{"_id":"pretty-format","_rev":"296-e8fa2d095a202c8e9da1c4af9f503912","name":"pretty-format","description":"Stringify any JavaScript value.","dist-tags":{"latest":"29.7.0","next":"30.0.0-alpha.3"},"versions":{"1.0.0":{"name":"pretty-format","version":"1.0.0","description":"Stringify any JavaScript value.","main":"dist/pretty-format.js","scripts":{"test":"gulp","test-browser":"gulp test-browser","build":"gulp build","coverage":"gulp coverage"},"repository":{"type":"git","url":"https://github.com/thejameskyle/pretty-format.git"},"keywords":["boilerplate","es6","node","starter","kit","transpile","6to5","babel"],"author":{"name":"James Kyle","email":"me@thejameskyle.com"},"license":"MIT","bugs":{"url":"https://github.com/thejameskyle/pretty-format/issues"},"homepage":"https://github.com/thejameskle/pretty-format","devDependencies":{"babel":"^4.3.0","babelify":"^5.0.3","browserify":"^8.1.1","chai":"^2.0.0","del":"^1.1.1","esperanto":"^0.6.7","glob":"^4.3.5","gulp":"^3.8.10","gulp-babel":"^4.0.0","gulp-file":"^0.2.0","gulp-filter":"^2.0.0","gulp-istanbul":"^0.6.0","gulp-jscs":"^1.4.0","gulp-jshint":"^1.9.0","gulp-livereload":"^3.4.0","gulp-load-plugins":"^0.8.0","gulp-mocha":"^2.0.0","gulp-notify":"^2.1.0","gulp-plumber":"^0.6.6","gulp-rename":"^1.2.0","gulp-sourcemaps":"^1.3.0","gulp-uglifyjs":"^0.6.0","isparta":"^2.2.0","jshint-stylish":"^1.0.0","mkdirp":"^0.5.0","mocha":"^2.1.0","run-sequence":"^1.0.2","sinon":"^1.12.2","sinon-chai":"^2.7.0","vinyl-source-stream":"^1.0.0"},"babelBoilerplateOptions":{"entryFileName":"pretty-format","exportVarName":"PrettyFormat","mochaGlobals":["stub","spy","expect"]},"dependencies":{"lodash":"^3.4.0"},"gitHead":"f5033177cce46717f1883ca3bfb17a2c39b495a1","_id":"pretty-format@1.0.0","_shasum":"ce2aa8e552a93cb0d20f23c625313a843d657a77","_from":".","_npmVersion":"2.3.0","_nodeVersion":"0.10.36","_npmUser":{"name":"thejameskyle","email":"me@thejameskyle.com"},"maintainers":[{"name":"thejameskyle","email":"me@thejameskyle.com"}],"dist":{"shasum":"ce2aa8e552a93cb0d20f23c625313a843d657a77","tarball":"http://localhost:4545/npm/registry/pretty-format/pretty-format-1.0.0.tgz","integrity":"sha512-Fbb5NtaGcNZUChaAMMTnWGpPheC1hLVzklHrAj7TJXzOgRRlbW7VaSWP/bwgq0kPw5EhTYBZfxDOTc/4k7XTPA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDjgrcYQWQLJeKb4GnhiLiFGq+Cc6tptgP67KGzCqg9QAiAxS00CQKPwUeAcJqRYc9CPCKcGEKOvQXwpwpB7phS6aA=="}]},"directories":{}},"1.1.0":{"name":"pretty-format","version":"1.1.0","description":"Stringify any JavaScript value.","main":"dist/pretty-format.js","scripts":{"test":"gulp","test-browser":"gulp test-browser","build":"gulp build","coverage":"gulp coverage"},"repository":{"type":"git","url":"https://github.com/thejameskyle/pretty-format.git"},"keywords":["boilerplate","es6","node","starter","kit","transpile","6to5","babel"],"author":{"name":"James Kyle","email":"me@thejameskyle.com"},"license":"MIT","bugs":{"url":"https://github.com/thejameskyle/pretty-format/issues"},"homepage":"https://github.com/thejameskle/pretty-format","devDependencies":{"babel":"^4.3.0","babelify":"^5.0.3","browserify":"^8.1.1","chai":"^2.0.0","del":"^1.1.1","esperanto":"^0.6.7","glob":"^4.3.5","gulp":"^3.8.10","gulp-babel":"^4.0.0","gulp-file":"^0.2.0","gulp-filter":"^2.0.0","gulp-istanbul":"^0.6.0","gulp-jscs":"^1.4.0","gulp-jshint":"^1.9.0","gulp-livereload":"^3.4.0","gulp-load-plugins":"^0.8.0","gulp-mocha":"^2.0.0","gulp-notify":"^2.1.0","gulp-plumber":"^0.6.6","gulp-rename":"^1.2.0","gulp-sourcemaps":"^1.3.0","gulp-uglifyjs":"^0.6.0","isparta":"^2.2.0","jshint-stylish":"^1.0.0","mkdirp":"^0.5.0","mocha":"^2.1.0","run-sequence":"^1.0.2","sinon":"^1.12.2","sinon-chai":"^2.7.0","vinyl-source-stream":"^1.0.0"},"babelBoilerplateOptions":{"entryFileName":"pretty-format","exportVarName":"PrettyFormat","mochaGlobals":["stub","spy","expect"]},"dependencies":{"lodash":"^3.4.0"},"gitHead":"57e24007ae9e526a847e1627ef9119bd983667ae","_id":"pretty-format@1.1.0","_shasum":"dafccca3f9922601c2090b411e312e88fd705262","_from":".","_npmVersion":"2.3.0","_nodeVersion":"0.10.36","_npmUser":{"name":"thejameskyle","email":"me@thejameskyle.com"},"maintainers":[{"name":"thejameskyle","email":"me@thejameskyle.com"}],"dist":{"shasum":"dafccca3f9922601c2090b411e312e88fd705262","tarball":"http://localhost:4545/npm/registry/pretty-format/pretty-format-1.1.0.tgz","integrity":"sha512-eAyOM4LBil6NhBr8dmGxIumoiwTVS1AqJ8Rx32BePQC60SHPOfGcGhA7ummZFFhGvyrxR6AyL00uuQJOsLPuJw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICKvcDZjR/wi0hCoX/qc/dj9IDtwnBQFwo65OxAEW5U6AiEA1NYsYJIXR5vfV3MXeQv029XU51ryhZDEDiGUvgQBdm4="}]},"directories":{}},"1.1.1":{"name":"pretty-format","version":"1.1.1","description":"Stringify any JavaScript value.","main":"dist/pretty-format.js","scripts":{"test":"gulp","test-browser":"gulp test-browser","build":"gulp build","coverage":"gulp coverage"},"repository":{"type":"git","url":"https://github.com/thejameskyle/pretty-format.git"},"keywords":["boilerplate","es6","node","starter","kit","transpile","6to5","babel"],"author":{"name":"James Kyle","email":"me@thejameskyle.com"},"license":"MIT","bugs":{"url":"https://github.com/thejameskyle/pretty-format/issues"},"homepage":"https://github.com/thejameskle/pretty-format","devDependencies":{"babel":"^4.3.0","babelify":"^5.0.3","browserify":"^8.1.1","chai":"^2.0.0","del":"^1.1.1","esperanto":"^0.6.7","glob":"^4.3.5","gulp":"^3.8.10","gulp-babel":"^4.0.0","gulp-file":"^0.2.0","gulp-filter":"^2.0.0","gulp-istanbul":"^0.6.0","gulp-jscs":"^1.4.0","gulp-jshint":"^1.9.0","gulp-livereload":"^3.4.0","gulp-load-plugins":"^0.8.0","gulp-mocha":"^2.0.0","gulp-notify":"^2.1.0","gulp-plumber":"^0.6.6","gulp-rename":"^1.2.0","gulp-sourcemaps":"^1.3.0","gulp-uglifyjs":"^0.6.0","isparta":"^2.2.0","jshint-stylish":"^1.0.0","mkdirp":"^0.5.0","mocha":"^2.1.0","run-sequence":"^1.0.2","sinon":"^1.12.2","sinon-chai":"^2.7.0","vinyl-source-stream":"^1.0.0"},"babelBoilerplateOptions":{"entryFileName":"pretty-format","exportVarName":"PrettyFormat","mochaGlobals":["stub","spy","expect"]},"dependencies":{"lodash":"^3.4.0"},"gitHead":"1f3cac5be4c339af4297f9b97e48a9e1c8307370","_id":"pretty-format@1.1.1","_shasum":"19235bc0abcb1926ea461c6e2584d9ff49ab126e","_from":".","_npmVersion":"2.3.0","_nodeVersion":"0.10.36","_npmUser":{"name":"thejameskyle","email":"me@thejameskyle.com"},"maintainers":[{"name":"thejameskyle","email":"me@thejameskyle.com"}],"dist":{"shasum":"19235bc0abcb1926ea461c6e2584d9ff49ab126e","tarball":"http://localhost:4545/npm/registry/pretty-format/pretty-format-1.1.1.tgz","integrity":"sha512-qPVasKaENaWoIz60pmcCJoOllUy810BX9ycdN4SfUxUpuRn1tdsAI70+JUFvr1d0ReNtBX6xTjwrWy++vUt/kw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIC6/XWEb3hALnISA5e7GjUrQrhieznE5NQkyPpZdqTB7AiA/Y2z3tQkqbRpB+vQwalHnZRzjTMYjWKRcu+xDXro1Fg=="}]},"directories":{}},"1.2.0":{"name":"pretty-format","version":"1.2.0","description":"Stringify any JavaScript value.","main":"dist/pretty-format.js","scripts":{"test":"gulp","test-browser":"gulp test-browser","build":"gulp build","coverage":"gulp coverage"},"repository":{"type":"git","url":"https://github.com/thejameskyle/pretty-format.git"},"keywords":["boilerplate","es6","node","starter","kit","transpile","6to5","babel"],"author":{"name":"James Kyle","email":"me@thejameskyle.com"},"license":"MIT","bugs":{"url":"https://github.com/thejameskyle/pretty-format/issues"},"homepage":"https://github.com/thejameskle/pretty-format","devDependencies":{"babel":"^4.3.0","babelify":"^5.0.3","browserify":"^8.1.1","chai":"^2.0.0","del":"^1.1.1","esperanto":"^0.6.7","glob":"^4.3.5","gulp":"^3.8.10","gulp-babel":"^4.0.0","gulp-file":"^0.2.0","gulp-filter":"^2.0.0","gulp-istanbul":"^0.6.0","gulp-jscs":"^1.4.0","gulp-jshint":"^1.9.0","gulp-livereload":"^3.4.0","gulp-load-plugins":"^0.8.0","gulp-mocha":"^2.0.0","gulp-notify":"^2.1.0","gulp-plumber":"^0.6.6","gulp-rename":"^1.2.0","gulp-sourcemaps":"^1.3.0","gulp-uglifyjs":"^0.6.0","isparta":"^2.2.0","jshint-stylish":"^1.0.0","mkdirp":"^0.5.0","mocha":"^2.1.0","run-sequence":"^1.0.2","sinon":"^1.12.2","sinon-chai":"^2.7.0","vinyl-source-stream":"^1.0.0"},"babelBoilerplateOptions":{"entryFileName":"pretty-format","exportVarName":"PrettyFormat","mochaGlobals":["stub","spy","expect"]},"dependencies":{"lodash":"^3.4.0"},"gitHead":"554b33cc08b0048d41db88dc0440974afebce5fa","_id":"pretty-format@1.2.0","_shasum":"69376de6b777da76ed273f7ed5d76289f115cdb9","_from":".","_npmVersion":"2.3.0","_nodeVersion":"0.10.36","_npmUser":{"name":"thejameskyle","email":"me@thejameskyle.com"},"maintainers":[{"name":"thejameskyle","email":"me@thejameskyle.com"}],"dist":{"shasum":"69376de6b777da76ed273f7ed5d76289f115cdb9","tarball":"http://localhost:4545/npm/registry/pretty-format/pretty-format-1.2.0.tgz","integrity":"sha512-tIv8E46HTI7bIYNxLBR/5Fhvko/jewbPgzfGrj2uaBxZB2JddVEMPub8xYyFkIvSHCum8oUpb2weZhFbF08tiw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHFqkJsKbuDQak+Re6WSyvmi/BTmzOuWOi7ENfMXra8UAiAzjd67Fz5QTbyxksgYOR0tVzwy9CgJuqw0LSyjCU7Iww=="}]},"directories":{}},"2.0.0":{"name":"pretty-format","version":"2.0.0","description":"Stringify any JavaScript value.","license":"MIT","main":"index.js","author":{"name":"James Kyle","email":"me@thejameskyle.com"},"keywords":[],"repository":{"type":"git","url":"https://github.com/thejameskyle/pretty-format.git"},"bugs":{"url":"https://github.com/thejameskyle/pretty-format/issues"},"homepage":"https://github.com/thejameskle/pretty-format","scripts":{"test":"mocha test.js"},"devDependencies":{"mocha":"^2.1.0"},"dependencies":{"lodash":"^4.13.1"},"gitHead":"37d2b08cf05dba367d026d5921e3e6f4505689de","_id":"pretty-format@2.0.0","_shasum":"040492380331ffffccd75e153dac72dbcc7ec378","_from":".","_npmVersion":"3.8.3","_nodeVersion":"5.10.1","_npmUser":{"name":"thejameskyle","email":"me@thejameskyle.com"},"dist":{"shasum":"040492380331ffffccd75e153dac72dbcc7ec378","tarball":"http://localhost:4545/npm/registry/pretty-format/pretty-format-2.0.0.tgz","integrity":"sha512-9U7WVHdNjxWDJ9koTodKfSGPL95riskwk2CejNF9LVd8KdbkVTSh3f7ptUtXVm/SoIp+s5HvYNTGQDOFPKPbyw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCVBmZtkF16k8KrJDXHx4JfRwd8n4dcGKPwSsYJKwTgCwIgBXXfdLzOncMmwWgyJ8FKfU8EQYUbJaloFPmg6I71Ge8="}]},"maintainers":[{"name":"cpojer","email":"christoph.pojer@gmail.com"},{"name":"thejameskyle","email":"me@thejameskyle.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/pretty-format-2.0.0.tgz_1464818545698_0.25608914671465755"},"directories":{}},"2.1.0":{"name":"pretty-format","version":"2.1.0","description":"Stringify any JavaScript value.","license":"MIT","main":"index.js","author":{"name":"James Kyle","email":"me@thejameskyle.com"},"keywords":[],"repository":{"type":"git","url":"https://github.com/thejameskyle/pretty-format.git"},"bugs":{"url":"https://github.com/thejameskyle/pretty-format/issues"},"homepage":"https://github.com/thejameskle/pretty-format","scripts":{"test":"mocha test.js"},"devDependencies":{"mocha":"^2.1.0"},"dependencies":{"lodash":"^4.13.1"},"gitHead":"06b0943f6b43c685c8a3153e372f20d894ca0e69","_id":"pretty-format@2.1.0","_shasum":"476ffab78d55d8c43474b999bfa817e345d117c3","_from":".","_npmVersion":"3.8.3","_nodeVersion":"5.10.1","_npmUser":{"name":"thejameskyle","email":"me@thejameskyle.com"},"dist":{"shasum":"476ffab78d55d8c43474b999bfa817e345d117c3","tarball":"http://localhost:4545/npm/registry/pretty-format/pretty-format-2.1.0.tgz","integrity":"sha512-0BhD723cTYeYTWs8U3G45ZxHR7hWTFu1tCPrvg1TF6XW0VT53FDMLKSfbzrCaelpMVPHB+qw4xX/0CtjkdLtSw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGZWjeMv5bBkDeN+Tp0xGfzrAmPqFhYWBPHN+nEbbUy4AiEA2t9VwPHDUp44h99pcRuc51gI2TlqCtxyyZGDZ4UqoBI="}]},"maintainers":[{"name":"cpojer","email":"christoph.pojer@gmail.com"},{"name":"thejameskyle","email":"me@thejameskyle.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/pretty-format-2.1.0.tgz_1464825138448_0.10198654420673847"},"directories":{}},"3.0.0":{"name":"pretty-format","version":"3.0.0","description":"Stringify any JavaScript value.","license":"MIT","main":"index.js","author":{"name":"James Kyle","email":"me@thejameskyle.com"},"keywords":[],"repository":{"type":"git","url":"https://github.com/thejameskyle/pretty-format.git"},"bugs":{"url":"https://github.com/thejameskyle/pretty-format/issues"},"homepage":"https://github.com/thejameskle/pretty-format","scripts":{"test":"mocha test.js"},"devDependencies":{"mocha":"^2.1.0"},"dependencies":{"lodash":"^4.13.1"},"gitHead":"247edd4f36664cd60407a310d4ca835218034cb8","_id":"pretty-format@3.0.0","_shasum":"52db9fe7e9e6393b0387a218ebc085d99fe7d160","_from":".","_npmVersion":"3.8.3","_nodeVersion":"5.10.1","_npmUser":{"name":"thejameskyle","email":"me@thejameskyle.com"},"dist":{"shasum":"52db9fe7e9e6393b0387a218ebc085d99fe7d160","tarball":"http://localhost:4545/npm/registry/pretty-format/pretty-format-3.0.0.tgz","integrity":"sha512-5b0sNAecZBnhIlEv+PJBimhzWLjWnWGus92hGkXhCYJUn3RR4e4ngtvqXSJ21KUcy1gm17tYwoyI0H0oDFgUFg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAHPw249aARdnQfOKDqhlv79SVqBB1yFKcESZ7qnb1R4AiAM9Py/i0M46vP/bpcqQmB5OCagWdwh+JTPfiaiqlTB4A=="}]},"maintainers":[{"name":"cpojer","email":"christoph.pojer@gmail.com"},{"name":"thejameskyle","email":"me@thejameskyle.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/pretty-format-3.0.0.tgz_1465850033484_0.756478788331151"},"directories":{}},"3.1.0":{"name":"pretty-format","version":"3.1.0","description":"Stringify any JavaScript value.","license":"MIT","main":"index.js","author":{"name":"James Kyle","email":"me@thejameskyle.com"},"keywords":[],"repository":{"type":"git","url":"https://github.com/thejameskyle/pretty-format.git"},"bugs":{"url":"https://github.com/thejameskyle/pretty-format/issues"},"homepage":"https://github.com/thejameskle/pretty-format","scripts":{"test":"mocha test.js"},"devDependencies":{"mocha":"^2.1.0"},"dependencies":{"lodash":"^4.13.1"},"gitHead":"bc0c4d481a51204724019a526c9164eaa48817ed","_id":"pretty-format@3.1.0","_shasum":"1fc982197f0e8da0dae57da0cb65cd03db25f20e","_from":".","_npmVersion":"2.14.9","_nodeVersion":"0.12.9","_npmUser":{"name":"thejameskyle","email":"me@thejameskyle.com"},"dist":{"shasum":"1fc982197f0e8da0dae57da0cb65cd03db25f20e","tarball":"http://localhost:4545/npm/registry/pretty-format/pretty-format-3.1.0.tgz","integrity":"sha512-WEL5jKQPUtNGX/Rl/UyyGB5PAc25ERpdhlXPFFRzfCtpyFlRhd0PxllfbdB7C+JUruRyoAUWAbQQ1a/4wnKUzQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDyc+4N6+Whjmtj6XGDMhCZX+Hd3aT9p2hylzYXQfHCVgIgQRZ/DBz19uZUW8pZhIfVGh63K13zrAhXLrnKQULb7K4="}]},"maintainers":[{"name":"cpojer","email":"christoph.pojer@gmail.com"},{"name":"thejameskyle","email":"me@thejameskyle.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/pretty-format-3.1.0.tgz_1465878718616_0.28907121275551617"},"directories":{}},"3.2.0":{"name":"pretty-format","version":"3.2.0","description":"Stringify any JavaScript value.","license":"MIT","main":"index.js","author":{"name":"James Kyle","email":"me@thejameskyle.com"},"keywords":[],"repository":{"type":"git","url":"git+https://github.com/thejameskyle/pretty-format.git"},"bugs":{"url":"https://github.com/thejameskyle/pretty-format/issues"},"homepage":"https://github.com/thejameskle/pretty-format","scripts":{"test":"mocha test.js test-plugins-ReactTestComponent.js"},"devDependencies":{"mocha":"^2.1.0","react":"15.2.0-rc.1"},"dependencies":{"lodash":"^4.13.1"},"gitHead":"9254efec454215c5c2c1789b0c679c9b8d0b14ec","_id":"pretty-format@3.2.0","_shasum":"30ba2f8ded37451af53d632fee1fe34b660a285f","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.0.0","_npmUser":{"name":"cpojer","email":"christoph.pojer@gmail.com"},"dist":{"shasum":"30ba2f8ded37451af53d632fee1fe34b660a285f","tarball":"http://localhost:4545/npm/registry/pretty-format/pretty-format-3.2.0.tgz","integrity":"sha512-TfISWtKWxTnPXNzgkH4mMF4KVxPLkB6gVhyVdshhd1RbFQuMUw7Xt4COPGn2PSWpPyBD+/VL4Xh8tY78dnIQUQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBR2+MRpnVqla/w8bdJVYDTOpIUsdAxngcF7s6uqzFlNAiAJvFYYPmWyQx7y6oXlROjz2XdfHTSk0O2ojj66u+07MQ=="}]},"maintainers":[{"name":"cpojer","email":"christoph.pojer@gmail.com"},{"name":"thejameskyle","email":"me@thejameskyle.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/pretty-format-3.2.0.tgz_1465961024482_0.2189729092642665"},"directories":{}},"3.3.0":{"name":"pretty-format","version":"3.3.0","description":"Stringify any JavaScript value.","license":"MIT","main":"index.js","author":{"name":"James Kyle","email":"me@thejameskyle.com"},"keywords":[],"repository":{"type":"git","url":"git+https://github.com/thejameskyle/pretty-format.git"},"bugs":{"url":"https://github.com/thejameskyle/pretty-format/issues"},"homepage":"https://github.com/thejameskle/pretty-format","scripts":{"test":"mocha test.js"},"devDependencies":{"mocha":"^2.1.0","react":"15.2.0-rc.1"},"dependencies":{"lodash":"^4.13.1"},"gitHead":"e39d00679d4e5e43f23d8a7ef29f2d5c844ec46a","_id":"pretty-format@3.3.0","_shasum":"1dd02939d41bc88fa01b0b7e76bb39562f37ba01","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.0.0","_npmUser":{"name":"cpojer","email":"christoph.pojer@gmail.com"},"dist":{"shasum":"1dd02939d41bc88fa01b0b7e76bb39562f37ba01","tarball":"http://localhost:4545/npm/registry/pretty-format/pretty-format-3.3.0.tgz","integrity":"sha512-3cvBaPgOC9GEbswCs5BobNSsIwdE/UqqDtV1F02b+O6cMN5X7JAMsm4f+71R14DoDEh5ACO+sne4mHHXXUeEUg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCxxfGSYO/NMRMvxmoqLu+pG7Gm+6ui4wP8CQIgQfVswgIhANh8OD60diCsQmcjaWQBCYX51wE0zTmLc1Hy8Nn6IvRo"}]},"maintainers":[{"name":"cpojer","email":"christoph.pojer@gmail.com"},{"name":"thejameskyle","email":"me@thejameskyle.com"}],"_npmOperationalInternal":{"host":"packages-16-east.internal.npmjs.com","tmp":"tmp/pretty-format-3.3.0.tgz_1465972283646_0.32496382878161967"},"directories":{}},"3.3.1":{"name":"pretty-format","version":"3.3.1","description":"Stringify any JavaScript value.","license":"MIT","main":"index.js","author":{"name":"James Kyle","email":"me@thejameskyle.com"},"keywords":[],"repository":{"type":"git","url":"https://github.com/thejameskyle/pretty-format.git"},"bugs":{"url":"https://github.com/thejameskyle/pretty-format/issues"},"homepage":"https://github.com/thejameskle/pretty-format","scripts":{"test":"jest"},"jest":{"automock":false,"testEnvironment":"node","verbose":true},"devDependencies":{"jest":"^12.1.0","react":"15.2.0-rc.1"},"dependencies":{"lodash":"^4.13.1"},"gitHead":"ede3ded058074a8176512d31891b8999bc9b7ea5","_id":"pretty-format@3.3.1","_shasum":"54c1d4a7e705382017837d51916d8ec6662e4726","_from":".","_npmVersion":"3.8.3","_nodeVersion":"5.10.1","_npmUser":{"name":"thejameskyle","email":"me@thejameskyle.com"},"dist":{"shasum":"54c1d4a7e705382017837d51916d8ec6662e4726","tarball":"http://localhost:4545/npm/registry/pretty-format/pretty-format-3.3.1.tgz","integrity":"sha512-YqiKnNXzmUr/Lg+8aBL5a/yY8qNdAGFinw18yS8DnJa9uCHb92aSxjgYr87itT/GGTT7iDs9oRgk20TGzz8c8A==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIB3ion8RrUYHhSzYrJwq5JyCKh0uhp+S+cYyihLMmyGTAiAOw57MolUyUhtvq3eW0xWaiisRljsZIxQ2JgASW6OZFg=="}]},"maintainers":[{"name":"cpojer","email":"christoph.pojer@gmail.com"},{"name":"thejameskyle","email":"me@thejameskyle.com"}],"_npmOperationalInternal":{"host":"packages-16-east.internal.npmjs.com","tmp":"tmp/pretty-format-3.3.1.tgz_1466530860016_0.6480775438249111"},"directories":{}},"3.3.2":{"name":"pretty-format","version":"3.3.2","description":"Stringify any JavaScript value.","license":"MIT","main":"index.js","author":{"name":"James Kyle","email":"me@thejameskyle.com"},"keywords":[],"repository":{"type":"git","url":"git+https://github.com/thejameskyle/pretty-format.git"},"bugs":{"url":"https://github.com/thejameskyle/pretty-format/issues"},"homepage":"https://github.com/thejameskle/pretty-format","scripts":{"test":"jest"},"jest":{"automock":false,"testEnvironment":"node","verbose":true},"devDependencies":{"jest":"^12.1.0","react":"15.2.0-rc.1"},"dependencies":{"lodash":"^4.13.1"},"gitHead":"457b319dcf7ab6b2455820ffd6896b70d0d5e475","_id":"pretty-format@3.3.2","_shasum":"1643a3030cb27e6c73280d9dc9602dc203daf9bf","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.0.0","_npmUser":{"name":"cpojer","email":"christoph.pojer@gmail.com"},"dist":{"shasum":"1643a3030cb27e6c73280d9dc9602dc203daf9bf","tarball":"http://localhost:4545/npm/registry/pretty-format/pretty-format-3.3.2.tgz","integrity":"sha512-P/desEuA6cNymPfEiCGwkH8jwcZx+0YXXqKSFSBOrm7wxrPmV7zoaXHUryaCqJc9B2BAUhRAHNJU6bHS7KchBg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDhGda4M1Jz2MR4Wic9dMHdyG0Ek21CVzDil3xHoR6z0wIgPt1NiTAGsqAg9bJGsxv/COiQFuqr5usDNTq4hbcQX2s="}]},"maintainers":[{"name":"cpojer","email":"christoph.pojer@gmail.com"},{"name":"thejameskyle","email":"me@thejameskyle.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/pretty-format-3.3.2.tgz_1466630764906_0.5482108551077545"},"directories":{}},"3.4.0":{"name":"pretty-format","version":"3.4.0","description":"Stringify any JavaScript value.","license":"MIT","main":"index.js","author":{"name":"James Kyle","email":"me@thejameskyle.com"},"keywords":[],"repository":{"type":"git","url":"git+https://github.com/thejameskyle/pretty-format.git"},"bugs":{"url":"https://github.com/thejameskyle/pretty-format/issues"},"homepage":"https://github.com/thejameskle/pretty-format","scripts":{"test":"jest","perf":"node perf/test.js"},"jest":{"automock":false,"testEnvironment":"node","verbose":true},"devDependencies":{"chalk":"^1.1.3","jest":"^12.1.0","left-pad":"^1.1.0","react":"15.2.0-rc.1"},"gitHead":"12988cafd9b8dce7c58cc47491f08fedbafae658","_id":"pretty-format@3.4.0","_shasum":"81f5266888e6d51515c8d6728228cb50bf9730e8","_from":".","_npmVersion":"3.9.5","_nodeVersion":"6.2.2","_npmUser":{"name":"thejameskyle","email":"me@thejameskyle.com"},"dist":{"shasum":"81f5266888e6d51515c8d6728228cb50bf9730e8","tarball":"http://localhost:4545/npm/registry/pretty-format/pretty-format-3.4.0.tgz","integrity":"sha512-NKijSMINAvlPlDWj6jlJ9F8SEhMerjf1sEGGdwtK5g0gllfdoyuDYwT/wov3M1s//ESuvu0M+1bT/OmrqAhZww==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCjjY3jf2dI1k1STRb5/brIXgJTlDXhN+ANsaTtPxVXhgIgetyMegaQ3/UXEijuJkeM2Tf8J4T1iLN+c/PoCAQJ95w="}]},"maintainers":[{"name":"cpojer","email":"christoph.pojer@gmail.com"},{"name":"thejameskyle","email":"me@thejameskyle.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/pretty-format-3.4.0.tgz_1467492135459_0.17039876943454146"},"directories":{}},"3.4.1":{"name":"pretty-format","version":"3.4.1","description":"Stringify any JavaScript value.","license":"MIT","main":"index.js","author":{"name":"James Kyle","email":"me@thejameskyle.com"},"keywords":[],"repository":{"type":"git","url":"git+https://github.com/thejameskyle/pretty-format.git"},"bugs":{"url":"https://github.com/thejameskyle/pretty-format/issues"},"homepage":"https://github.com/thejameskle/pretty-format","scripts":{"test":"jest","perf":"node perf/test.js"},"jest":{"automock":false,"testEnvironment":"node","verbose":true},"devDependencies":{"chalk":"^1.1.3","jest":"^12.1.0","left-pad":"^1.1.0","react":"15.2.0-rc.1"},"gitHead":"a8de0a5fc54bd9014f66d7a51c2ec5b63fb4a101","_id":"pretty-format@3.4.1","_shasum":"e0a39a07407c6f8c38b07cbfee2df9907939c7f8","_from":".","_npmVersion":"3.9.5","_nodeVersion":"6.2.2","_npmUser":{"name":"thejameskyle","email":"me@thejameskyle.com"},"dist":{"shasum":"e0a39a07407c6f8c38b07cbfee2df9907939c7f8","tarball":"http://localhost:4545/npm/registry/pretty-format/pretty-format-3.4.1.tgz","integrity":"sha512-zfdQG3xpvFY/fROc8nUWjtPT37MMxpK5FZkVGdy45MhQmQSW0afJ5IcIMFimQPzxkZzpyT9LPXnNV0qkkQpoaw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEHNxl8AuCDaayHEDGiOmnNw+R4g8Vd8ArNcINnMKczHAiEAhA4cksts64oorf17OJYfrpd0zftG8LFsf07UvZQbOAE="}]},"maintainers":[{"name":"cpojer","email":"christoph.pojer@gmail.com"},{"name":"thejameskyle","email":"me@thejameskyle.com"}],"_npmOperationalInternal":{"host":"packages-16-east.internal.npmjs.com","tmp":"tmp/pretty-format-3.4.1.tgz_1467654558509_0.23463946976698935"},"directories":{}},"3.4.2":{"name":"pretty-format","version":"3.4.2","description":"Stringify any JavaScript value.","license":"MIT","main":"index.js","author":{"name":"James Kyle","email":"me@thejameskyle.com"},"keywords":[],"repository":{"type":"git","url":"git+https://github.com/thejameskyle/pretty-format.git"},"bugs":{"url":"https://github.com/thejameskyle/pretty-format/issues"},"homepage":"https://github.com/thejameskle/pretty-format","scripts":{"test":"jest","perf":"node perf/test.js"},"jest":{"automock":false,"testEnvironment":"node","verbose":true},"devDependencies":{"chalk":"^1.1.3","jest":"^12.1.0","left-pad":"^1.1.0","react":"15.2.0-rc.1"},"gitHead":"06b59f7d1d610f85753908dc5b275e76025d668c","_id":"pretty-format@3.4.2","_shasum":"186dbba514433bac3b3b616f8c806a0d5834ab3f","_from":".","_npmVersion":"3.9.5","_nodeVersion":"6.2.2","_npmUser":{"name":"cpojer","email":"christoph.pojer@gmail.com"},"dist":{"shasum":"186dbba514433bac3b3b616f8c806a0d5834ab3f","tarball":"http://localhost:4545/npm/registry/pretty-format/pretty-format-3.4.2.tgz","integrity":"sha512-SL8KezQUQi7t43EQ6nzPGOehBf4vcWjwPpRTyPk0my/L+yUHi9dbj9tJquy8n7zOK3+p9mAsYYk8FKkM60LNKQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDoKOP8VIcXvOMQOlGkzz2l2yskAXJo3DLe0ixgb5AXhAIgfuo8aoWl6Kp5oEB6oqTWdnJt8LOQ5smRy0NK5mDDlIQ="}]},"maintainers":[{"name":"cpojer","email":"christoph.pojer@gmail.com"},{"name":"thejameskyle","email":"me@thejameskyle.com"}],"_npmOperationalInternal":{"host":"packages-16-east.internal.npmjs.com","tmp":"tmp/pretty-format-3.4.2.tgz_1467769452652_0.2976850795093924"},"directories":{}},"3.4.3":{"name":"pretty-format","version":"3.4.3","description":"Stringify any JavaScript value.","license":"MIT","main":"index.js","author":{"name":"James Kyle","email":"me@thejameskyle.com"},"keywords":[],"repository":{"type":"git","url":"git+https://github.com/thejameskyle/pretty-format.git"},"bugs":{"url":"https://github.com/thejameskyle/pretty-format/issues"},"homepage":"https://github.com/thejameskle/pretty-format","scripts":{"test":"jest","perf":"node perf/test.js"},"jest":{"automock":false,"testEnvironment":"node","verbose":true},"devDependencies":{"chalk":"^1.1.3","jest":"^12.1.0","left-pad":"^1.1.0","react":"15.2.0-rc.1"},"gitHead":"d1f6f577307decbce99bf256274e4f2920df3725","_id":"pretty-format@3.4.3","_shasum":"1f5be6a5c252099a5920d3093fef60845f2286ab","_from":".","_npmVersion":"3.9.5","_nodeVersion":"6.2.2","_npmUser":{"name":"cpojer","email":"christoph.pojer@gmail.com"},"dist":{"shasum":"1f5be6a5c252099a5920d3093fef60845f2286ab","tarball":"http://localhost:4545/npm/registry/pretty-format/pretty-format-3.4.3.tgz","integrity":"sha512-l8Hp3qtKC6VjIKFTSp9haaGB9I6kdlQAJEFw3Nvj5yFUTZFrx/sPIvA5as8Y8l8jew6F1/3kYjtWYotCwCy8Aw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHwI7Jo6IUDOtUNFd8P7d/mGgV41wuJ7LOMqxLP1D5VEAiEA+udlH8FasR+g9SbZMX1AUeGrs/qEyPu15ZUYxEOse+Y="}]},"maintainers":[{"name":"cpojer","email":"christoph.pojer@gmail.com"},{"name":"thejameskyle","email":"me@thejameskyle.com"}],"_npmOperationalInternal":{"host":"packages-16-east.internal.npmjs.com","tmp":"tmp/pretty-format-3.4.3.tgz_1467786479000_0.7793948103208095"},"directories":{}},"3.5.0":{"name":"pretty-format","version":"3.5.0","description":"Stringify any JavaScript value.","license":"MIT","main":"index.js","author":{"name":"James Kyle","email":"me@thejameskyle.com"},"keywords":[],"repository":{"type":"git","url":"git+https://github.com/thejameskyle/pretty-format.git"},"bugs":{"url":"https://github.com/thejameskyle/pretty-format/issues"},"homepage":"https://github.com/thejameskle/pretty-format","scripts":{"test":"jest","perf":"node perf/test.js"},"jest":{"automock":false,"testEnvironment":"node","verbose":true},"devDependencies":{"chalk":"^1.1.3","jest":"^13.2.3","left-pad":"^1.1.0","react":"15.2.0-rc.1"},"gitHead":"38b091e8d1bb50f9ec3435cef6c72bd124859f9c","_id":"pretty-format@3.5.0","_shasum":"1d795f73086faae09df6c40feb1698134df9ba2d","_from":".","_npmVersion":"3.10.3","_nodeVersion":"6.3.0","_npmUser":{"name":"cpojer","email":"christoph.pojer@gmail.com"},"dist":{"shasum":"1d795f73086faae09df6c40feb1698134df9ba2d","tarball":"http://localhost:4545/npm/registry/pretty-format/pretty-format-3.5.0.tgz","integrity":"sha512-vPPEnSundtSyZIezVYwNHgVmTYCY8qu8RTYCSWIHaDlKSbZ6he/jz5jB11YX56Qz9wkXF2hX4D5VSPa6F2Iz0Q==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGjAOSx7M2ghG4MMBvpjr/D9ky73OG56fwMA/PEsdk7MAiBb18WFlEeCOcPyNH9FN7wTCcR9tq/lLzVUp/IWEYKPdg=="}]},"maintainers":[{"name":"cpojer","email":"christoph.pojer@gmail.com"},{"name":"thejameskyle","email":"me@thejameskyle.com"}],"_npmOperationalInternal":{"host":"packages-16-east.internal.npmjs.com","tmp":"tmp/pretty-format-3.5.0.tgz_1467966560716_0.14394370932132006"},"directories":{}},"3.5.1":{"name":"pretty-format","version":"3.5.1","description":"Stringify any JavaScript value.","license":"MIT","main":"index.js","author":{"name":"James Kyle","email":"me@thejameskyle.com"},"keywords":[],"repository":{"type":"git","url":"git+https://github.com/thejameskyle/pretty-format.git"},"bugs":{"url":"https://github.com/thejameskyle/pretty-format/issues"},"homepage":"https://github.com/thejameskle/pretty-format","scripts":{"test":"jest","perf":"node perf/test.js"},"jest":{"automock":false,"testEnvironment":"node","verbose":true},"devDependencies":{"chalk":"^1.1.3","jest":"^13.2.3","left-pad":"^1.1.0","react":"15.2.0-rc.1"},"gitHead":"8487a02de74e5747bd0a7e8491ed2eef1ed952f9","_id":"pretty-format@3.5.1","_shasum":"a3f5239a15bed8f56c70d313467616771ca26cc0","_from":".","_npmVersion":"3.8.6","_nodeVersion":"5.12.0","_npmUser":{"name":"thejameskyle","email":"me@thejameskyle.com"},"dist":{"shasum":"a3f5239a15bed8f56c70d313467616771ca26cc0","tarball":"http://localhost:4545/npm/registry/pretty-format/pretty-format-3.5.1.tgz","integrity":"sha512-aSdpnOlnbxx3uuR8kXdmYpZo30tlzJ4gVgdjGoO1yM+lulXhXZjj109tqjjeXuZi4qbBFHf4sfag6L0QfdtsRQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHqg2Ww7J9FY8GGcSkCFbQT11i9XaedvkggR0MKd2WEnAiBNzTnT1C9euWxb7xCT28v64HQQxpag5V0iCeWizis1uw=="}]},"maintainers":[{"name":"cpojer","email":"christoph.pojer@gmail.com"},{"name":"thejameskyle","email":"me@thejameskyle.com"}],"_npmOperationalInternal":{"host":"packages-16-east.internal.npmjs.com","tmp":"tmp/pretty-format-3.5.1.tgz_1470071183130_0.9069960319902748"},"directories":{}},"3.5.2":{"name":"pretty-format","version":"3.5.2","description":"Stringify any JavaScript value.","license":"MIT","main":"index.js","author":{"name":"James Kyle","email":"me@thejameskyle.com"},"keywords":[],"repository":{"type":"git","url":"git+https://github.com/thejameskyle/pretty-format.git"},"bugs":{"url":"https://github.com/thejameskyle/pretty-format/issues"},"homepage":"https://github.com/thejameskle/pretty-format","scripts":{"test":"jest","perf":"node perf/test.js"},"jest":{"automock":false,"testEnvironment":"node","verbose":true},"devDependencies":{"chalk":"^1.1.3","jest":"^14.1.0","left-pad":"^1.1.1","react":"15.3.0"},"gitHead":"ee8df7bead23e719db01719ecc23ed8c71ba1ffc","_id":"pretty-format@3.5.2","_shasum":"e97a0285f076a4ed722406522f9116773d169310","_from":".","_npmVersion":"3.10.3","_nodeVersion":"6.3.0","_npmUser":{"name":"cpojer","email":"christoph.pojer@gmail.com"},"dist":{"shasum":"e97a0285f076a4ed722406522f9116773d169310","tarball":"http://localhost:4545/npm/registry/pretty-format/pretty-format-3.5.2.tgz","integrity":"sha512-d42+ZgG/12pif/gQ7y+MsFy6fX31LjakhbnNMjLImw+xX9GRos+jdEVxZlADv9RXHI0+DpI16PmiGGK1Yk3ZHg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDMfJ/P/O1sZOnmjJ85aQ/dgg9ww1ZEMK1/JBmEnN6YWwIhALomXdYpg1GysF20/MTV/TgOzeLhwabmL62pikHVqF2J"}]},"maintainers":[{"name":"cpojer","email":"christoph.pojer@gmail.com"},{"name":"thejameskyle","email":"me@thejameskyle.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/pretty-format-3.5.2.tgz_1470279216845_0.8327156249433756"},"directories":{}},"3.5.3":{"name":"pretty-format","version":"3.5.3","description":"Stringify any JavaScript value.","license":"MIT","main":"index.js","author":{"name":"James Kyle","email":"me@thejameskyle.com"},"keywords":[],"repository":{"type":"git","url":"git+https://github.com/thejameskyle/pretty-format.git"},"bugs":{"url":"https://github.com/thejameskyle/pretty-format/issues"},"homepage":"https://github.com/thejameskle/pretty-format","scripts":{"test":"jest","perf":"node perf/test.js"},"jest":{"automock":false,"testEnvironment":"node","verbose":true},"devDependencies":{"chalk":"^1.1.3","jest":"^14.1.0","left-pad":"^1.1.1","react":"15.3.0"},"gitHead":"973e169d9d8f7c78758972c68406e5c7ff891276","_id":"pretty-format@3.5.3","_shasum":"539dfe29335c42f18c233dcca23eebcc1d41f1c8","_from":".","_npmVersion":"3.8.6","_nodeVersion":"5.12.0","_npmUser":{"name":"thejameskyle","email":"me@thejameskyle.com"},"dist":{"shasum":"539dfe29335c42f18c233dcca23eebcc1d41f1c8","tarball":"http://localhost:4545/npm/registry/pretty-format/pretty-format-3.5.3.tgz","integrity":"sha512-N9IiWJjXWmLj8S1wEKfyC469bcNwv+oNthwWS3nSBX4gioXSmBkMgutCyqOnNXUFmjWMsr15pGrSW1yz2KqXMg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDVTII+5irl/yYhqukzO8DeA9+vr/sfOK4+E1M9ysCRNQIhAMZB7E6CdSGghSHSJs2yHENMrrHGURv+zlKYq1V5cHzh"}]},"maintainers":[{"name":"cpojer","email":"christoph.pojer@gmail.com"},{"name":"thejameskyle","email":"me@thejameskyle.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/pretty-format-3.5.3.tgz_1470875030957_0.45410665567032993"},"directories":{}},"3.6.0":{"name":"pretty-format","version":"3.6.0","description":"Stringify any JavaScript value.","license":"MIT","main":"index.js","author":{"name":"James Kyle","email":"me@thejameskyle.com"},"keywords":[],"repository":{"type":"git","url":"git+https://github.com/thejameskyle/pretty-format.git"},"bugs":{"url":"https://github.com/thejameskyle/pretty-format/issues"},"homepage":"https://github.com/thejameskle/pretty-format","scripts":{"test":"jest","perf":"node perf/test.js"},"jest":{"automock":false,"testEnvironment":"node","verbose":true},"devDependencies":{"chalk":"^1.1.3","jest":"^14.1.0","left-pad":"^1.1.1","react":"15.3.0"},"gitHead":"a0c81c42ba2d62e61a5eecbc39c6f5cb475df67d","_id":"pretty-format@3.6.0","_shasum":"c1c06ee737a3281971c89e0f25cc1387ea4d5d80","_from":".","_npmVersion":"3.8.6","_nodeVersion":"5.12.0","_npmUser":{"name":"thejameskyle","email":"me@thejameskyle.com"},"dist":{"shasum":"c1c06ee737a3281971c89e0f25cc1387ea4d5d80","tarball":"http://localhost:4545/npm/registry/pretty-format/pretty-format-3.6.0.tgz","integrity":"sha512-LTgRqRLH4lcxsX++Us1uLlpEa1k4a6sVVq17wbPjLmTvF8d3iVwQG31wU6ZODrhmttNJ/dqoluhw8D03fPD98g==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDufoDtVoAgIT9VnOydC+FHLD1G+Nz2Qf6uO0FYDx/hhgIgPlyJedPBjRBV/LaIcyPou/Akl2xG5Y02fv4JfllioDo="}]},"maintainers":[{"name":"cpojer","email":"christoph.pojer@gmail.com"},{"name":"thejameskyle","email":"me@thejameskyle.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/pretty-format-3.6.0.tgz_1471465208714_0.31411029887385666"},"directories":{}},"3.7.0":{"name":"pretty-format","version":"3.7.0","description":"Stringify any JavaScript value.","license":"MIT","main":"index.js","author":{"name":"James Kyle","email":"me@thejameskyle.com"},"keywords":[],"repository":{"type":"git","url":"git+https://github.com/thejameskyle/pretty-format.git"},"bugs":{"url":"https://github.com/thejameskyle/pretty-format/issues"},"homepage":"https://github.com/thejameskle/pretty-format","scripts":{"test":"jest","perf":"node perf/test.js"},"jest":{"automock":false,"testEnvironment":"node","verbose":true},"devDependencies":{"chalk":"^1.1.3","jest":"^14.1.0","left-pad":"^1.1.1","react":"15.3.0"},"gitHead":"bc9409fb6d727d42082f2ff87870d7f49723130c","_id":"pretty-format@3.7.0","_shasum":"0bf7f828cafe6e86ffd6c9dd5a707867f35651ab","_from":".","_npmVersion":"3.10.3","_nodeVersion":"6.5.0","_npmUser":{"name":"cpojer","email":"christoph.pojer@gmail.com"},"dist":{"shasum":"0bf7f828cafe6e86ffd6c9dd5a707867f35651ab","tarball":"http://localhost:4545/npm/registry/pretty-format/pretty-format-3.7.0.tgz","integrity":"sha512-K/N+l1SnAraamMt4UvxIFuL0A8bVArDV+JNnKHY8h2qsoa3uDriL40hGPQDIPIUiPviQo2GtVld8M3esi4T29w==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAV9KeWjvf9iNsN99YINsYTTqNnsTI/aPMw4K+q3TCg9AiA2CIntR0p7AxKakoBj2TxDumok/UsaSzPLfOgHO6w/LQ=="}]},"maintainers":[{"name":"cpojer","email":"christoph.pojer@gmail.com"},{"name":"thejameskyle","email":"me@thejameskyle.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/pretty-format-3.7.0.tgz_1472742965635_0.8393159916158766"},"directories":{}},"3.8.0":{"name":"pretty-format","version":"3.8.0","description":"Stringify any JavaScript value.","license":"MIT","main":"index.js","author":{"name":"James Kyle","email":"me@thejameskyle.com"},"keywords":[],"repository":{"type":"git","url":"git+https://github.com/thejameskyle/pretty-format.git"},"bugs":{"url":"https://github.com/thejameskyle/pretty-format/issues"},"homepage":"https://github.com/thejameskle/pretty-format","scripts":{"test":"jest","perf":"node perf/test.js"},"jest":{"testEnvironment":"node","verbose":true},"devDependencies":{"chalk":"^1.1.3","jest":"^15.1.1","left-pad":"^1.1.1","react":"15.3.0"},"gitHead":"556f97f5ba896f15bf8e07e191636d31828f63a8","_id":"pretty-format@3.8.0","_shasum":"bfbed56d5e9a776645f4b1ff7aa1a3ac4fa3c385","_from":".","_npmVersion":"3.8.6","_nodeVersion":"5.12.0","_npmUser":{"name":"thejameskyle","email":"me@thejameskyle.com"},"dist":{"shasum":"bfbed56d5e9a776645f4b1ff7aa1a3ac4fa3c385","tarball":"http://localhost:4545/npm/registry/pretty-format/pretty-format-3.8.0.tgz","integrity":"sha512-WuxUnVtlWL1OfZFQFuqvnvs6MiAGk9UNsBostyBOB0Is9wb5uRESevA6rnl/rkksXaGX3GzZhPup5d6Vp1nFew==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGKlYEJdj9xJ42shTyj1xLJPtlxl86Orhd+3IFzXGNAHAiB5446kTOhc9tundS9ZoqzhyxjBFpHKD7hFpaCmaVfrAA=="}]},"maintainers":[{"name":"cpojer","email":"christoph.pojer@gmail.com"},{"name":"thejameskyle","email":"me@thejameskyle.com"}],"_npmOperationalInternal":{"host":"packages-16-east.internal.npmjs.com","tmp":"tmp/pretty-format-3.8.0.tgz_1473558204046_0.3871619531419128"},"directories":{}},"4.0.0":{"name":"pretty-format","version":"4.0.0","description":"Stringify any JavaScript value.","license":"MIT","main":"index.js","author":{"name":"James Kyle","email":"me@thejameskyle.com"},"keywords":[],"repository":{"type":"git","url":"git+https://github.com/thejameskyle/pretty-format.git"},"bugs":{"url":"https://github.com/thejameskyle/pretty-format/issues"},"homepage":"https://github.com/thejameskle/pretty-format","scripts":{"test":"jest","perf":"node perf/test.js"},"jest":{"testEnvironment":"node","verbose":true},"devDependencies":{"chalk":"^1.1.3","jest":"^15.1.1","left-pad":"^1.1.1","react":"15.3.0"},"gitHead":"9b2e2f48d564a67848c72bf42160938867366c18","_id":"pretty-format@4.0.0","_shasum":"eef0236ad1672ee5d6f36629d3e9e2454d01266c","_from":".","_npmVersion":"3.8.6","_nodeVersion":"5.12.0","_npmUser":{"name":"thejameskyle","email":"me@thejameskyle.com"},"dist":{"shasum":"eef0236ad1672ee5d6f36629d3e9e2454d01266c","tarball":"http://localhost:4545/npm/registry/pretty-format/pretty-format-4.0.0.tgz","integrity":"sha512-hgRvha+UajBMc/MMCPOh7D0+46O3kQUEC6TSdChecO7ERazehoZlez8XsdNkX6t3LiLay3kpJ4tJExpVmXsDzg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIASPNb6LcDAgnCRzbcVEjixwiiCWEyhklKqMLUtv1I2SAiAlESHXkcYUWu0FjIHZYzQYqKpi35g4t7xzoeOAwrVjxQ=="}]},"maintainers":[{"name":"cpojer","email":"christoph.pojer@gmail.com"},{"name":"thejameskyle","email":"me@thejameskyle.com"}],"_npmOperationalInternal":{"host":"packages-16-east.internal.npmjs.com","tmp":"tmp/pretty-format-4.0.0.tgz_1473559349051_0.9919021637178957"},"directories":{}},"4.1.0":{"name":"pretty-format","version":"4.1.0","description":"Stringify any JavaScript value.","license":"MIT","main":"index.js","author":{"name":"James Kyle","email":"me@thejameskyle.com"},"keywords":[],"repository":{"type":"git","url":"git+https://github.com/thejameskyle/pretty-format.git"},"bugs":{"url":"https://github.com/thejameskyle/pretty-format/issues"},"homepage":"https://github.com/thejameskle/pretty-format","scripts":{"test":"jest","perf":"node perf/test.js"},"jest":{"testEnvironment":"node","verbose":true},"devDependencies":{"chalk":"^1.1.3","jest":"^15.1.1","left-pad":"^1.1.1","react":"15.3.0"},"gitHead":"d03f38d418dbe342a0f9f8e8e787b50f3c2317dc","_id":"pretty-format@4.1.0","_shasum":"fcd582438146d039a93a670fc18c72aa71325577","_from":".","_npmVersion":"3.10.8","_nodeVersion":"6.6.0","_npmUser":{"name":"cpojer","email":"christoph.pojer@gmail.com"},"dist":{"shasum":"fcd582438146d039a93a670fc18c72aa71325577","tarball":"http://localhost:4545/npm/registry/pretty-format/pretty-format-4.1.0.tgz","integrity":"sha512-Vs+8J6JUAn1ICdcnzG09YZ0Fi65R/j2GXyUN4a9LFNmGjibwMop1387t7m2RVRdElmlBbeGC/ZTSost1q1mOZw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDpxWusNI/r2RJlOdApBNWxKOAMtS3ZaLLWrdeHrjE5+AIhAMP6K5JRAXk9ZRtsi7OQaIrPpp4lcaouCdg9yMCXlvt0"}]},"maintainers":[{"name":"cpojer","email":"christoph.pojer@gmail.com"},{"name":"thejameskyle","email":"me@thejameskyle.com"}],"_npmOperationalInternal":{"host":"packages-16-east.internal.npmjs.com","tmp":"tmp/pretty-format-4.1.0.tgz_1474370567756_0.6978352644946426"},"directories":{}},"4.2.0":{"name":"pretty-format","version":"4.2.0","description":"Stringify any JavaScript value.","license":"MIT","main":"index.js","author":{"name":"James Kyle","email":"me@thejameskyle.com"},"keywords":[],"repository":{"type":"git","url":"git+https://github.com/thejameskyle/pretty-format.git"},"bugs":{"url":"https://github.com/thejameskyle/pretty-format/issues"},"homepage":"https://github.com/thejameskle/pretty-format","scripts":{"test":"jest","perf":"node perf/test.js"},"jest":{"testEnvironment":"node","verbose":true},"devDependencies":{"chalk":"^1.1.3","jest":"^15.1.1","left-pad":"^1.1.1","react":"15.3.0"},"gitHead":"a870fef3ddcfb0fc77b84e391dcbeebfa02e19f5","_id":"pretty-format@4.2.0","_shasum":"6e2adb73eb423cbcc52077705d68c7504332013b","_from":".","_npmVersion":"3.10.8","_nodeVersion":"6.6.0","_npmUser":{"name":"cpojer","email":"christoph.pojer@gmail.com"},"dist":{"shasum":"6e2adb73eb423cbcc52077705d68c7504332013b","tarball":"http://localhost:4545/npm/registry/pretty-format/pretty-format-4.2.0.tgz","integrity":"sha512-fBqevoNLKF85cQqX7a+k8QnJSW+hO8lxo6QgD2oryreurIeJXy2UFryfrmgc21t1Ig/CA6dnEevocZxCCJGzow==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGTfjxBRN8oqOXOi2QNYQO0mOBL7lP0OW972iREPGKCyAiEAoiGdHbJtCnhf933uehxHQlo8APNMtoIoJ0OpyzoCCVE="}]},"maintainers":[{"name":"cpojer","email":"christoph.pojer@gmail.com"},{"name":"thejameskyle","email":"me@thejameskyle.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/pretty-format-4.2.0.tgz_1474431819370_0.05452787992544472"},"directories":{}},"4.2.1":{"name":"pretty-format","version":"4.2.1","description":"Stringify any JavaScript value.","license":"MIT","main":"index.js","author":{"name":"James Kyle","email":"me@thejameskyle.com"},"keywords":[],"repository":{"type":"git","url":"git+https://github.com/thejameskyle/pretty-format.git"},"bugs":{"url":"https://github.com/thejameskyle/pretty-format/issues"},"homepage":"https://github.com/thejameskle/pretty-format","scripts":{"test":"jest","perf":"node perf/test.js"},"jest":{"testEnvironment":"node","verbose":true},"devDependencies":{"chalk":"^1.1.3","jest":"^15.1.1","left-pad":"^1.1.1","react":"15.3.0"},"gitHead":"03fe50978332e63fb6b1107cf86d7744561dd22e","_id":"pretty-format@4.2.1","_shasum":"b1dad18c3be0c8209e64c7791fa67e252d2d3e07","_from":".","_npmVersion":"3.10.8","_nodeVersion":"6.6.0","_npmUser":{"name":"cpojer","email":"christoph.pojer@gmail.com"},"dist":{"shasum":"b1dad18c3be0c8209e64c7791fa67e252d2d3e07","tarball":"http://localhost:4545/npm/registry/pretty-format/pretty-format-4.2.1.tgz","integrity":"sha512-u7Lai66kb3F5ppykiEraKzfmFjWKurvXZXnxM0+pwi3B2jNRJRJittCLfJ7ltsH+UzAqfkT9ONp4LxGiibOqnQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIA4MeVdmNQI0PjV58RBn2/13XfwOb2xJfmkRM6Z0Se7BAiEApKlOB5dmrpQ+d4csK7qHRAtWhogBOvMJ5pNSBaYd4v0="}]},"maintainers":[{"name":"cpojer","email":"christoph.pojer@gmail.com"},{"name":"thejameskyle","email":"me@thejameskyle.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/pretty-format-4.2.1.tgz_1474439807179_0.30846197600476444"},"directories":{}},"4.2.2":{"name":"pretty-format","version":"4.2.2","description":"Stringify any JavaScript value.","license":"MIT","main":"index.js","author":{"name":"James Kyle","email":"me@thejameskyle.com"},"keywords":[],"repository":{"type":"git","url":"git+https://github.com/thejameskyle/pretty-format.git"},"bugs":{"url":"https://github.com/thejameskyle/pretty-format/issues"},"homepage":"https://github.com/thejameskle/pretty-format","scripts":{"test":"jest","perf":"node perf/test.js"},"jest":{"testEnvironment":"node","verbose":true},"devDependencies":{"chalk":"^1.1.3","jest":"^15.1.1","left-pad":"^1.1.1","react":"15.3.0"},"gitHead":"e593df850acd3a8087e3eb5fc46f66e7c93c3426","_id":"pretty-format@4.2.2","_shasum":"f80bf8d98a6f4d20997a51d18bf331f2ad789a64","_from":".","_npmVersion":"3.10.8","_nodeVersion":"6.9.1","_npmUser":{"name":"cpojer","email":"christoph.pojer@gmail.com"},"dist":{"shasum":"f80bf8d98a6f4d20997a51d18bf331f2ad789a64","tarball":"http://localhost:4545/npm/registry/pretty-format/pretty-format-4.2.2.tgz","integrity":"sha512-4zJroTK7uvGbsciNLhA2At8wTYHCoOU6WdH4RVnrmHv83WriBitzIoZz6mr715mUAABXLx6ffgw4idJrrt2rEw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC9fFy2T2GoMjKNjEROFus9DYhZgU/tcECOcKtZqU1H5QIgbheoqxyVBohcmYiGG6tof5XckOa76nnUtAggUXPgZNE="}]},"maintainers":[{"name":"cpojer","email":"christoph.pojer@gmail.com"},{"name":"thejameskyle","email":"me@thejameskyle.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/pretty-format-4.2.2.tgz_1478041303477_0.29300490533933043"},"directories":{}},"4.2.3":{"name":"pretty-format","version":"4.2.3","description":"Stringify any JavaScript value.","license":"MIT","main":"index.js","author":{"name":"James Kyle","email":"me@thejameskyle.com"},"keywords":[],"repository":{"type":"git","url":"git+https://github.com/thejameskyle/pretty-format.git"},"bugs":{"url":"https://github.com/thejameskyle/pretty-format/issues"},"homepage":"https://github.com/thejameskle/pretty-format","scripts":{"test":"jest","perf":"node perf/test.js"},"jest":{"testEnvironment":"node","verbose":true},"devDependencies":{"chalk":"^1.1.3","jest":"^15.1.1","left-pad":"^1.1.1","react":"15.3.0"},"gitHead":"ef22c76692bae5e111cd7432b3dd694f5c4d0f12","_id":"pretty-format@4.2.3","_shasum":"8894c2ac81419cf801629d8f66320a25380d8b05","_from":".","_npmVersion":"3.10.8","_nodeVersion":"6.9.1","_npmUser":{"name":"cpojer","email":"christoph.pojer@gmail.com"},"dist":{"shasum":"8894c2ac81419cf801629d8f66320a25380d8b05","tarball":"http://localhost:4545/npm/registry/pretty-format/pretty-format-4.2.3.tgz","integrity":"sha512-wzxxVhkcBaS/F/rjPp7Z7nT4pOD/p5kUVjHOgnuGdkcDMB3Bf9KgmuqRyRK+kIgzOSYyDbSZQ36BWYyz6UB4gw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD1jKQ8FdOFOlBX+Kc2SpG6cljhadkrMVnnbYtrZPvf3QIgPbz8tJkTYAIDClA/IWCySAmGun+C8ykuxKOE5MiGmu0="}]},"maintainers":[{"name":"cpojer","email":"christoph.pojer@gmail.com"},{"name":"thejameskyle","email":"me@thejameskyle.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/pretty-format-4.2.3.tgz_1478801682352_0.8379785239230841"},"directories":{}},"4.3.0":{"name":"pretty-format","version":"4.3.0","description":"Stringify any JavaScript value.","license":"MIT","main":"index.js","author":{"name":"James Kyle","email":"me@thejameskyle.com"},"keywords":[],"repository":{"type":"git","url":"git+https://github.com/thejameskyle/pretty-format.git"},"bugs":{"url":"https://github.com/thejameskyle/pretty-format/issues"},"homepage":"https://github.com/thejameskle/pretty-format","scripts":{"test":"jest","perf":"node perf/test.js"},"jest":{"testEnvironment":"node","verbose":true},"devDependencies":{"chalk":"^1.1.3","jest":"^15.1.1","left-pad":"^1.1.1","react":"15.3.0"},"gitHead":"8e3c166225d556a49e835db7919a346fd0a0cb11","_id":"pretty-format@4.3.0","_shasum":"67d3de28fd37957ada895b94452ae539396d97c8","_from":".","_npmVersion":"3.10.9","_nodeVersion":"7.1.0","_npmUser":{"name":"cpojer","email":"christoph.pojer@gmail.com"},"dist":{"shasum":"67d3de28fd37957ada895b94452ae539396d97c8","tarball":"http://localhost:4545/npm/registry/pretty-format/pretty-format-4.3.0.tgz","integrity":"sha512-CxdYyXMI2almPPdSNYo+856TE/SJzGQK6tHQLR0xQ+41mJO/0p4+hJ5QiIWqq8AfPj1xHh8swq7VFUcH9Y/1bw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIE3ffx0zk2GGD9pTaayJVXom4rGYxwQ4RgxWSmXyVmN0AiAHJDB1QjO56XOljcOPspErTlge2NkrbLhZrxIC85sAnQ=="}]},"maintainers":[{"name":"cpojer","email":"christoph.pojer@gmail.com"},{"name":"thejameskyle","email":"me@thejameskyle.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/pretty-format-4.3.0.tgz_1479452901694_0.7598880641162395"},"directories":{}},"4.3.1":{"name":"pretty-format","version":"4.3.1","description":"Stringify any JavaScript value.","license":"MIT","main":"index.js","author":{"name":"James Kyle","email":"me@thejameskyle.com"},"keywords":[],"repository":{"type":"git","url":"git+https://github.com/thejameskyle/pretty-format.git"},"bugs":{"url":"https://github.com/thejameskyle/pretty-format/issues"},"homepage":"https://github.com/thejameskle/pretty-format","scripts":{"test":"jest","perf":"node perf/test.js"},"jest":{"testEnvironment":"node","verbose":true},"devDependencies":{"chalk":"^1.1.3","jest":"^15.1.1","left-pad":"^1.1.1","react":"15.3.0"},"gitHead":"49ae3bab31388b5633c3029203e573f59d59f4a1","_id":"pretty-format@4.3.1","_shasum":"530be5c42b3c05b36414a7a2a4337aa80acd0e8d","_from":".","_npmVersion":"3.10.9","_nodeVersion":"7.1.0","_npmUser":{"name":"cpojer","email":"christoph.pojer@gmail.com"},"dist":{"shasum":"530be5c42b3c05b36414a7a2a4337aa80acd0e8d","tarball":"http://localhost:4545/npm/registry/pretty-format/pretty-format-4.3.1.tgz","integrity":"sha512-EhjEW6Rwv9P4KzazNy6PEb1p1EX8gl5cUrTMfZzHDhgFGEYY3F6Xysn9ja/XJ0g6UcEOHxA7Mya+McxiPXJK7Q==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEMTgw71z5OlL3irKEQ7EsEF90MJBjwcO+uQxCe48OiUAiEA7dq3qdbqcvDjXXf5ZTQJWnp4nEjcBKLrhwYWBYvrGRM="}]},"maintainers":[{"name":"cpojer","email":"christoph.pojer@gmail.com"},{"name":"thejameskyle","email":"me@thejameskyle.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/pretty-format-4.3.1.tgz_1479479968899_0.5202373208012432"},"directories":{}},"18.0.0":{"name":"pretty-format","version":"18.0.0","repository":{"type":"git","url":"git+https://github.com/facebook/jest.git"},"license":"BSD-3-Clause","description":"Stringify any JavaScript value.","main":"build/index.js","author":{"name":"James Kyle","email":"me@thejameskyle.com"},"scripts":{"test":"../../packages/jest-cli/bin/jest.js","perf":"node perf/test.js"},"dependencies":{"ansi-styles":"^2.2.1"},"bugs":{"url":"https://github.com/facebook/jest/issues"},"homepage":"https://github.com/facebook/jest#readme","_id":"pretty-format@18.0.0","_shasum":"5f45c59fe2ed6749d46765429679670b08b21137","_from":".","_npmVersion":"3.10.9","_nodeVersion":"7.2.0","_npmUser":{"name":"cpojer","email":"christoph.pojer@gmail.com"},"dist":{"shasum":"5f45c59fe2ed6749d46765429679670b08b21137","tarball":"http://localhost:4545/npm/registry/pretty-format/pretty-format-18.0.0.tgz","integrity":"sha512-atqBu848DmoUOzei2pHfDMdDH/eu3CQEK0OgRGgXH9JVZtOwLmkJAIzX2U9SELluav3T4NooNbpCFIPXs+HZmg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHSO41Qa97RpR1aZM1Lb3xWtDODIj0hOSEY+BqIHYu/VAiAfGqY17Wl7/y84BR+Y//bRNWUA/S7zaeSgPnl3iMihNQ=="}]},"maintainers":[{"name":"cpojer","email":"christoph.pojer@gmail.com"},{"name":"thejameskyle","email":"me@thejameskyle.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/pretty-format-18.0.0.tgz_1481801077732_0.5574890447314829"},"directories":{}},"18.1.0":{"name":"pretty-format","version":"18.1.0","repository":{"type":"git","url":"git+https://github.com/facebook/jest.git"},"license":"BSD-3-Clause","description":"Stringify any JavaScript value.","main":"build/index.js","author":{"name":"James Kyle","email":"me@thejameskyle.com"},"scripts":{"test":"../../packages/jest-cli/bin/jest.js","perf":"node perf/test.js"},"dependencies":{"ansi-styles":"^2.2.1"},"bugs":{"url":"https://github.com/facebook/jest/issues"},"homepage":"https://github.com/facebook/jest#readme","_id":"pretty-format@18.1.0","_shasum":"fb65a86f7a7f9194963eee91865c1bcf1039e284","_from":".","_npmVersion":"3.10.10","_nodeVersion":"7.3.0","_npmUser":{"name":"cpojer","email":"christoph.pojer@gmail.com"},"dist":{"shasum":"fb65a86f7a7f9194963eee91865c1bcf1039e284","tarball":"http://localhost:4545/npm/registry/pretty-format/pretty-format-18.1.0.tgz","integrity":"sha512-jlKL5u/PZajHEwJyYiTUwZ3P+zUTp7XylRdIxX5zchNpMJT0Z3lR/+I6g6e8JY8EY7Qk8iSj0BdUZTRXQtixYg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD0EMAqiO6LgPxiylGgXxW9Kc8HZw2+SJ7OgVkuyCQ0ogIgBCg2QyrcYwEylXAes75DevfTsSCRs5hpatOEwmh6IOk="}]},"maintainers":[{"name":"cpojer","email":"christoph.pojer@gmail.com"},{"name":"dmitriiabramov","email":"dmitrii@rheia.us"},{"name":"thejameskyle","email":"me@thejameskyle.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/pretty-format-18.1.0.tgz_1482976055665_0.7535617861431092"},"directories":{}},"18.5.0-alpha.7da3df39":{"name":"pretty-format","version":"18.5.0-alpha.7da3df39","repository":{"type":"git","url":"git+https://github.com/facebook/jest.git"},"license":"BSD-3-Clause","description":"Stringify any JavaScript value.","main":"build/index.js","author":{"name":"James Kyle","email":"me@thejameskyle.com"},"dependencies":{"ansi-styles":"^3.0.0"},"bugs":{"url":"https://github.com/facebook/jest/issues"},"homepage":"https://github.com/facebook/jest#readme","_id":"pretty-format@18.5.0-alpha.7da3df39","scripts":{},"_shasum":"e990895d97195b0ff0cbd7d1dd8d8e179be43ce3","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.5.0","_npmUser":{"name":"cpojer","email":"christoph.pojer@gmail.com"},"dist":{"shasum":"e990895d97195b0ff0cbd7d1dd8d8e179be43ce3","tarball":"http://localhost:4545/npm/registry/pretty-format/pretty-format-18.5.0-alpha.7da3df39.tgz","integrity":"sha512-eY4nOgDPVpShr0voqP/kic4j4MRQoc0OWOZ3Y/Ht0NM29U6PZMlLQl+XY2DLfmuA8wa8+wtdNUss4Oq0ue9GKA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCEqfb1/Vp6kVRD+M9nn999Ztv0u9pHNBhfAdjcdPxFcgIhAN07nTo78Xc0U31Hjgew/g9geeBlszCMb14pPGhLUbgH"}]},"maintainers":[{"name":"cpojer","email":"christoph.pojer@gmail.com"},{"name":"dmitriiabramov","email":"dmitrii@rheia.us"},{"name":"thejameskyle","email":"me@thejameskyle.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/pretty-format-18.5.0-alpha.7da3df39.tgz_1487350677326_0.2225903368089348"},"directories":{}},"19.0.0":{"name":"pretty-format","version":"19.0.0","repository":{"type":"git","url":"git+https://github.com/facebook/jest.git"},"license":"BSD-3-Clause","description":"Stringify any JavaScript value.","main":"build/index.js","author":{"name":"James Kyle","email":"me@thejameskyle.com"},"dependencies":{"ansi-styles":"^3.0.0"},"bugs":{"url":"https://github.com/facebook/jest/issues"},"homepage":"https://github.com/facebook/jest#readme","_id":"pretty-format@19.0.0","scripts":{},"_shasum":"56530d32acb98a3fa4851c4e2b9d37b420684c84","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.5.0","_npmUser":{"name":"cpojer","email":"christoph.pojer@gmail.com"},"dist":{"shasum":"56530d32acb98a3fa4851c4e2b9d37b420684c84","tarball":"http://localhost:4545/npm/registry/pretty-format/pretty-format-19.0.0.tgz","integrity":"sha512-fXZv+l48/Th+F2lULKbvQiWlYH/PTPb8N337YkyAxLxeeHrCgvf5bOaSXvNBeG5qyEqP01ICYYGApKoiFYrY5A==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCWRUwBxAzGIcn5tc3VFPtDZu7ca071gAa55Ryh2+/8+AIgdTTp9+A+FqnJ3x6lXAm51JFmP+zALLXzYjOlXuIaai0="}]},"maintainers":[{"name":"cpojer","email":"christoph.pojer@gmail.com"},{"name":"dmitriiabramov","email":"dmitrii@rheia.us"},{"name":"thejameskyle","email":"me@thejameskyle.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/pretty-format-19.0.0.tgz_1487669430940_0.7767606938723475"},"directories":{}},"19.1.0-alpha.eed82034":{"name":"pretty-format","version":"19.1.0-alpha.eed82034","repository":{"type":"git","url":"git+https://github.com/facebook/jest.git"},"license":"BSD-3-Clause","description":"Stringify any JavaScript value.","main":"build/index.js","author":{"name":"James Kyle","email":"me@thejameskyle.com"},"dependencies":{"ansi-styles":"^3.0.0"},"bugs":{"url":"https://github.com/facebook/jest/issues"},"homepage":"https://github.com/facebook/jest#readme","_id":"pretty-format@19.1.0-alpha.eed82034","scripts":{},"_shasum":"970654771b23bb904f7362f814c38c95e339cd1d","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.2","_npmUser":{"name":"cpojer","email":"christoph.pojer@gmail.com"},"dist":{"shasum":"970654771b23bb904f7362f814c38c95e339cd1d","tarball":"http://localhost:4545/npm/registry/pretty-format/pretty-format-19.1.0-alpha.eed82034.tgz","integrity":"sha512-7X3AdZ7UyFAyntFah9buA5XJPUZpI1yCGx+GSXRAUrELBDk2DAV7TwD1gEPsMSqI7u1DmvVbIvowZjPXhNyiKw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCMOtMlsYlls83jT9vaC2ZCgcnCeOHEifkvDoXfnoca9wIgfRUv0m14NoIL48xE1xvK/kj2j5fpcoU6+NpA+KuTLl8="}]},"maintainers":[{"name":"cpojer","email":"christoph.pojer@gmail.com"},{"name":"dmitriiabramov","email":"dmitrii@rheia.us"},{"name":"fb","email":"opensource+npm@fb.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/pretty-format-19.1.0-alpha.eed82034.tgz_1489711281837_0.8856345196254551"},"directories":{}},"19.2.0-alpha.993e64af":{"name":"pretty-format","version":"19.2.0-alpha.993e64af","repository":{"type":"git","url":"git+https://github.com/facebook/jest.git"},"license":"BSD-3-Clause","description":"Stringify any JavaScript value.","main":"build/index.js","browser":"build-es5/index.js","author":{"name":"James Kyle","email":"me@thejameskyle.com"},"dependencies":{"ansi-styles":"^3.0.0"},"bugs":{"url":"https://github.com/facebook/jest/issues"},"homepage":"https://github.com/facebook/jest#readme","_id":"pretty-format@19.2.0-alpha.993e64af","scripts":{},"_shasum":"e15683e06787f4656ccc5e6f850928a9dcd9e032","_from":".","_npmVersion":"4.2.0","_nodeVersion":"7.9.0","_npmUser":{"name":"cpojer","email":"christoph.pojer@gmail.com"},"dist":{"shasum":"e15683e06787f4656ccc5e6f850928a9dcd9e032","tarball":"http://localhost:4545/npm/registry/pretty-format/pretty-format-19.2.0-alpha.993e64af.tgz","integrity":"sha512-qt5ewdvAS4A4iMdVGps6h90tFCmN3ozCmNFITEGryOedd095tJ8+oQFxadoxf+uEcD7Ngs/IGog/DIwUBNZdog==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDVW5Rj8TO2LMCEcmLTHXKkidNC+05ksbY9qM6PXAdHHAIhAOOmxoX/maCNwdvkKPGIL8VLRK6vdvnFOEE6mj0l36ip"}]},"maintainers":[{"name":"cpojer","email":"christoph.pojer@gmail.com"},{"name":"dmitriiabramov","email":"dmitrii@rheia.us"},{"name":"fb","email":"opensource+npm@fb.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/pretty-format-19.2.0-alpha.993e64af.tgz_1493912259929_0.5100777607876807"},"directories":{}},"19.3.0-alpha.85402254":{"name":"pretty-format","version":"19.3.0-alpha.85402254","repository":{"type":"git","url":"git+https://github.com/facebook/jest.git"},"license":"BSD-3-Clause","description":"Stringify any JavaScript value.","main":"build/index.js","browser":"build-es5/index.js","author":{"name":"James Kyle","email":"me@thejameskyle.com"},"dependencies":{"ansi-styles":"^3.0.0"},"bugs":{"url":"https://github.com/facebook/jest/issues"},"homepage":"https://github.com/facebook/jest#readme","_id":"pretty-format@19.3.0-alpha.85402254","scripts":{},"_shasum":"e0cdbd5b0bd06242dc2c00434bed3f9124e6f108","_from":".","_npmVersion":"4.2.0","_nodeVersion":"7.9.0","_npmUser":{"name":"cpojer","email":"christoph.pojer@gmail.com"},"dist":{"shasum":"e0cdbd5b0bd06242dc2c00434bed3f9124e6f108","tarball":"http://localhost:4545/npm/registry/pretty-format/pretty-format-19.3.0-alpha.85402254.tgz","integrity":"sha512-huDHBGPAc/shsLAgzvp+5eT4k+2fyd+14wPz3I4httz5XZrgLO0OTnWwgToXQCUinbpZj+lO4wZ0sVy3T6x64g==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC0zjTGu9MKRW35qDccG7v5y/EMquK8VvvnSxYQYjY/ogIhALRwcx2cevUosC5A5jvqeqAJx04Nl3t6p/hcRBL729qO"}]},"maintainers":[{"name":"cpojer","email":"christoph.pojer@gmail.com"},{"name":"dmitriiabramov","email":"dmitrii@rheia.us"},{"name":"fb","email":"opensource+npm@fb.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/pretty-format-19.3.0-alpha.85402254.tgz_1493984901988_0.14289735327474773"},"directories":{}},"20.0.0":{"name":"pretty-format","version":"20.0.0","repository":{"type":"git","url":"git+https://github.com/facebook/jest.git"},"license":"BSD-3-Clause","description":"Stringify any JavaScript value.","main":"build/index.js","browser":"build-es5/index.js","author":{"name":"James Kyle","email":"me@thejameskyle.com"},"dependencies":{"ansi-styles":"^3.0.0"},"bugs":{"url":"https://github.com/facebook/jest/issues"},"homepage":"https://github.com/facebook/jest#readme","_id":"pretty-format@20.0.0","scripts":{},"_shasum":"bd100f330e707e4f49fef3f234d6e915242a6e7e","_from":".","_npmVersion":"4.2.0","_nodeVersion":"7.9.0","_npmUser":{"name":"cpojer","email":"christoph.pojer@gmail.com"},"dist":{"shasum":"bd100f330e707e4f49fef3f234d6e915242a6e7e","tarball":"http://localhost:4545/npm/registry/pretty-format/pretty-format-20.0.0.tgz","integrity":"sha512-Qvfdr+IeCrzU4uJOqASMb4KIgQpCklysmn96Ky03terXePbsNYXhDo6qIDF5WD/j20OlS4qnOCSDaGhiPpj6mQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBEUvfz1RRIvWDF/BXeemyoakmgVhsJDHFQLJfYJuJSbAiEAthLp8RdojKdSm3XZCfrxN0XCWUszWMGpbXQjR3vXWgM="}]},"maintainers":[{"name":"cpojer","email":"christoph.pojer@gmail.com"},{"name":"dmitriiabramov","email":"dmitrii@rheia.us"},{"name":"fb","email":"opensource+npm@fb.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/pretty-format-20.0.0.tgz_1494073956310_0.3826066949404776"},"directories":{}},"20.0.1":{"name":"pretty-format","version":"20.0.1","repository":{"type":"git","url":"git+https://github.com/facebook/jest.git"},"license":"BSD-3-Clause","description":"Stringify any JavaScript value.","main":"build/index.js","browser":"build-es5/index.js","author":{"name":"James Kyle","email":"me@thejameskyle.com"},"dependencies":{"ansi-regex":"^2.1.1","ansi-styles":"^3.0.0"},"bugs":{"url":"https://github.com/facebook/jest/issues"},"homepage":"https://github.com/facebook/jest#readme","_id":"pretty-format@20.0.1","scripts":{},"_shasum":"ba95329771907c189643dd251e244061ff642350","_from":".","_npmVersion":"4.2.0","_nodeVersion":"7.9.0","_npmUser":{"name":"cpojer","email":"christoph.pojer@gmail.com"},"dist":{"shasum":"ba95329771907c189643dd251e244061ff642350","tarball":"http://localhost:4545/npm/registry/pretty-format/pretty-format-20.0.1.tgz","integrity":"sha512-lPi5AF+Izi3iq2BFH8rnviJjMfyC9Cyu4AuU3u++lIQxvcLv4bZ9plFh75I90jM71Aghg4c3rfyFGcS2m+KRHg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFnj7hCGaXUbe+YasN4lgJeT8WvQctuppw62urPUu/EaAiEAvthRiJyictIIE/h1zoLlqiVn24c6osFTVq8arF6ll7A="}]},"maintainers":[{"name":"cpojer","email":"christoph.pojer@gmail.com"},{"name":"dmitriiabramov","email":"dmitrii@rheia.us"},{"name":"fb","email":"opensource+npm@fb.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/pretty-format-20.0.1.tgz_1494499807965_0.6633350073825568"},"directories":{}},"20.0.2":{"name":"pretty-format","version":"20.0.2","repository":{"type":"git","url":"git+https://github.com/facebook/jest.git"},"license":"BSD-3-Clause","description":"Stringify any JavaScript value.","main":"build/index.js","browser":"build-es5/index.js","author":{"name":"James Kyle","email":"me@thejameskyle.com"},"dependencies":{"ansi-regex":"^2.1.1","ansi-styles":"^3.0.0"},"bugs":{"url":"https://github.com/facebook/jest/issues"},"homepage":"https://github.com/facebook/jest#readme","_id":"pretty-format@20.0.2","scripts":{},"_shasum":"91831cb1d8fbedb783b58a1e3fcdf88c1bd7cfd1","_from":".","_npmVersion":"4.2.0","_nodeVersion":"7.10.0","_npmUser":{"name":"cpojer","email":"christoph.pojer@gmail.com"},"dist":{"shasum":"91831cb1d8fbedb783b58a1e3fcdf88c1bd7cfd1","tarball":"http://localhost:4545/npm/registry/pretty-format/pretty-format-20.0.2.tgz","integrity":"sha512-pT8UwsVd0C6vEOtPGOz1d8YqHO8iqFVFWLrfhcD/NJiovA2uJzgordYzPWBVVgZho5xncRgJJQYLpHHLnhziUA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC7Mo6jD4FnNyz/MVZyGf9BomiV7WCZsC+LxJFN6M0cGgIhAKKA8U1f8ESRqWkEjbGJewr2X2Kpkb9xUaz+i4fZjc3B"}]},"maintainers":[{"name":"cpojer","email":"christoph.pojer@gmail.com"},{"name":"dmitriiabramov","email":"dmitrii@rheia.us"},{"name":"fb","email":"opensource+npm@fb.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/pretty-format-20.0.2.tgz_1495018221751_0.7365539520978928"},"directories":{}},"20.0.3":{"name":"pretty-format","version":"20.0.3","repository":{"type":"git","url":"git+https://github.com/facebook/jest.git"},"license":"BSD-3-Clause","description":"Stringify any JavaScript value.","main":"build/index.js","browser":"build-es5/index.js","author":{"name":"James Kyle","email":"me@thejameskyle.com"},"dependencies":{"ansi-regex":"^2.1.1","ansi-styles":"^3.0.0"},"bugs":{"url":"https://github.com/facebook/jest/issues"},"homepage":"https://github.com/facebook/jest#readme","_id":"pretty-format@20.0.3","scripts":{},"_shasum":"020e350a560a1fe1a98dc3beb6ccffb386de8b14","_from":".","_npmVersion":"4.2.0","_nodeVersion":"7.10.0","_npmUser":{"name":"cpojer","email":"christoph.pojer@gmail.com"},"dist":{"shasum":"020e350a560a1fe1a98dc3beb6ccffb386de8b14","tarball":"http://localhost:4545/npm/registry/pretty-format/pretty-format-20.0.3.tgz","integrity":"sha512-dSW/15bmtC3vuheyzWUveowskTAUAWKE08+x06rgYzvSoDzg6cVg/MPKgNvh87jRJvOQ/qaQZLLWml2jrukk6w==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDPp5A8OE9xVpmTevt2V8njfmay+B1qL75MoJ524I2wGgIgDXAfxnBRZ0llRihCGp8g+jJKeGp7rsmrkCrifDG9f2s="}]},"maintainers":[{"name":"cpojer","email":"christoph.pojer@gmail.com"},{"name":"dmitriiabramov","email":"dmitrii@rheia.us"},{"name":"fb","email":"opensource+npm@fb.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/pretty-format-20.0.3.tgz_1495018631891_0.5346766302827746"},"directories":{}},"20.1.0-alpha.1":{"name":"pretty-format","version":"20.1.0-alpha.1","repository":{"type":"git","url":"git+https://github.com/facebook/jest.git"},"license":"BSD-3-Clause","description":"Stringify any JavaScript value.","main":"build/index.js","author":{"name":"James Kyle","email":"me@thejameskyle.com"},"dependencies":{"ansi-regex":"^2.1.1","ansi-styles":"^3.0.0"},"bugs":{"url":"https://github.com/facebook/jest/issues"},"homepage":"https://github.com/facebook/jest#readme","_id":"pretty-format@20.1.0-alpha.1","_npmVersion":"5.0.3","_nodeVersion":"8.1.2","_npmUser":{"name":"cpojer","email":"christoph.pojer@gmail.com"},"dist":{"integrity":"sha512-Esjgh3MaR0OUFG+rbIjRabqpuUoS/cERoZcOiXdaemjhiaUfjahtXq0IPNNsUuD6A2n4RB51EBnWMcJnJ1oOnw==","shasum":"51092a6e850b27d0f9e94b03ad71350145dda215","tarball":"http://localhost:4545/npm/registry/pretty-format/pretty-format-20.1.0-alpha.1.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDqcb+ZiWMtNW9a4PTXgLIGEZSuXhDyNPlliHbMNLekIAiAk1wsarxHea7UGSvbTjJmg/n6QvYDp9CZfljWQ6kracQ=="}]},"maintainers":[{"email":"christoph.pojer@gmail.com","name":"cpojer"},{"email":"opensource+npm@fb.com","name":"fb"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pretty-format-20.1.0-alpha.1.tgz_1498644980434_0.827074789442122"},"directories":{}},"20.1.0-alpha.2":{"name":"pretty-format","version":"20.1.0-alpha.2","repository":{"type":"git","url":"git+https://github.com/facebook/jest.git"},"license":"BSD-3-Clause","description":"Stringify any JavaScript value.","main":"build/index.js","author":{"name":"James Kyle","email":"me@thejameskyle.com"},"dependencies":{"ansi-regex":"^2.1.1","ansi-styles":"^3.0.0"},"bugs":{"url":"https://github.com/facebook/jest/issues"},"homepage":"https://github.com/facebook/jest#readme","_id":"pretty-format@20.1.0-alpha.2","_npmVersion":"5.0.3","_nodeVersion":"8.1.2","_npmUser":{"name":"cpojer","email":"christoph.pojer@gmail.com"},"dist":{"integrity":"sha512-E8LQAfbHl2M3r06bu0+iGfo0BRFSDObmYAnoadCqJ1D6D/gZzAnGBTog897TkvmkMx9/mOzqA3paOjKTju+xEQ==","shasum":"f6c08b56fee1d84936a18fea2edd1e1a03faaa5a","tarball":"http://localhost:4545/npm/registry/pretty-format/pretty-format-20.1.0-alpha.2.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDO4l9ixMwaHBkfJ0y3QS2a58XLrxUIbOEe5V6lJIF3jwIhAN4tUEp6mYFtbBjavEVlRkseh44ok028WQK44tctHmto"}]},"maintainers":[{"email":"christoph.pojer@gmail.com","name":"cpojer"},{"email":"opensource+npm@fb.com","name":"fb"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pretty-format-20.1.0-alpha.2.tgz_1498754206978_0.7984285997226834"},"directories":{}},"20.1.0-alpha.3":{"name":"pretty-format","version":"20.1.0-alpha.3","repository":{"type":"git","url":"git+https://github.com/facebook/jest.git"},"license":"BSD-3-Clause","description":"Stringify any JavaScript value.","main":"build/index.js","author":{"name":"James Kyle","email":"me@thejameskyle.com"},"dependencies":{"ansi-regex":"^2.1.1","ansi-styles":"^3.0.0"},"bugs":{"url":"https://github.com/facebook/jest/issues"},"homepage":"https://github.com/facebook/jest#readme","_id":"pretty-format@20.1.0-alpha.3","_npmVersion":"5.0.3","_nodeVersion":"8.1.2","_npmUser":{"name":"cpojer","email":"christoph.pojer@gmail.com"},"dist":{"integrity":"sha512-cNkYnwAvdpzPhU6eR3xxM3x/5WX0xy1w99Zv9KlZYsC0zzkFnghm3C2Y+SdfH2i2hHKmJyuXjL36IFwfkEP08g==","shasum":"ea1dd3874bc638c5d6237528ca2f6a087923257d","tarball":"http://localhost:4545/npm/registry/pretty-format/pretty-format-20.1.0-alpha.3.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIC8K5vlr3UxT+uio5hIiyD0Y2I6/kFUnfJClPPWnTd57AiEAiRbwldwQc+qxbRpWZOjZUJ+1b0oECLYRCpzx9LhgiXI="}]},"maintainers":[{"email":"christoph.pojer@gmail.com","name":"cpojer"},{"email":"opensource+npm@fb.com","name":"fb"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pretty-format-20.1.0-alpha.3.tgz_1498832453553_0.9796057401690632"},"directories":{}},"20.1.0-beta.1":{"name":"pretty-format","version":"20.1.0-beta.1","repository":{"type":"git","url":"git+https://github.com/facebook/jest.git"},"license":"BSD-3-Clause","description":"Stringify any JavaScript value.","main":"build/index.js","author":{"name":"James Kyle","email":"me@thejameskyle.com"},"dependencies":{"ansi-regex":"^3.0.0","ansi-styles":"^3.0.0"},"bugs":{"url":"https://github.com/facebook/jest/issues"},"homepage":"https://github.com/facebook/jest#readme","_id":"pretty-format@20.1.0-beta.1","_npmVersion":"5.0.3","_nodeVersion":"8.1.4","_npmUser":{"name":"cpojer","email":"christoph.pojer@gmail.com"},"dist":{"integrity":"sha512-TQcPA1tPty01GSzrumH0v/+DWHlhn3wHkvQgArec1UWmEhsBDpzr2Tw6DVZ5LQ2Zdm1+vqh3vwn/mZ+HJL2dFQ==","shasum":"4c8dbd96fde7b61b965e311af142a60235ecf72a","tarball":"http://localhost:4545/npm/registry/pretty-format/pretty-format-20.1.0-beta.1.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDv1Ww3o61Z/CvYWCOFCmtYE2N6uvyLOg95Oc2TUeDQwAIgQbJMzQNTj6kbWdZJDa0i7rJnKQTega0VMBYJ0mUzX9Q="}]},"maintainers":[{"email":"christoph.pojer@gmail.com","name":"cpojer"},{"email":"opensource+npm@fb.com","name":"fb"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pretty-format-20.1.0-beta.1.tgz_1499942021825_0.3699762055184692"},"directories":{}},"20.1.0-chi.1":{"name":"pretty-format","version":"20.1.0-chi.1","repository":{"type":"git","url":"git+https://github.com/facebook/jest.git"},"license":"BSD-3-Clause","description":"Stringify any JavaScript value.","main":"build/index.js","author":{"name":"James Kyle","email":"me@thejameskyle.com"},"dependencies":{"ansi-regex":"^3.0.0","ansi-styles":"^3.0.0"},"bugs":{"url":"https://github.com/facebook/jest/issues"},"homepage":"https://github.com/facebook/jest#readme","_id":"pretty-format@20.1.0-chi.1","_npmVersion":"5.0.3","_nodeVersion":"8.1.4","_npmUser":{"name":"cpojer","email":"christoph.pojer@gmail.com"},"dist":{"integrity":"sha512-HX/SOY4KwKk78KrCs9oTpEmcZDf6BnDoTwM4fG2kQSfKhUB0G9dP2p/WdLxbjye8DvXU2oR9d1la+d1eKdRmiA==","shasum":"36439fb4ca2bb68e76a0d965170a354e7b2bfc99","tarball":"http://localhost:4545/npm/registry/pretty-format/pretty-format-20.1.0-chi.1.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIH0ip/MHsA1IAlSHnT/85GWDFgUTpKakaFVpS1edQ+8oAiAoSkJ1z976f4gCTcu5sWBtPaK24lpd7G2/GULYI40WuA=="}]},"maintainers":[{"email":"christoph.pojer@gmail.com","name":"cpojer"},{"email":"opensource+npm@fb.com","name":"fb"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pretty-format-20.1.0-chi.1.tgz_1500027904420_0.6980449620168656"},"directories":{}},"20.1.0-delta.1":{"name":"pretty-format","version":"20.1.0-delta.1","repository":{"type":"git","url":"git+https://github.com/facebook/jest.git"},"license":"BSD-3-Clause","description":"Stringify any JavaScript value.","main":"build/index.js","author":{"name":"James Kyle","email":"me@thejameskyle.com"},"dependencies":{"ansi-regex":"^3.0.0","ansi-styles":"^3.0.0"},"bugs":{"url":"https://github.com/facebook/jest/issues"},"homepage":"https://github.com/facebook/jest#readme","_id":"pretty-format@20.1.0-delta.1","_npmVersion":"5.0.3","_nodeVersion":"8.1.4","_npmUser":{"name":"cpojer","email":"christoph.pojer@gmail.com"},"dist":{"integrity":"sha512-1iTpD1bzISgDgyQy9vVUsCQE9yceKEDyBNetu+lnq7L/ciQoAJY4XYNO8rh0nQoRBHyQdmaF9behAYN39dxzpA==","shasum":"f1d31d80b5bd8724b33f3065acb1457710213d0d","tarball":"http://localhost:4545/npm/registry/pretty-format/pretty-format-20.1.0-delta.1.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICIiI7KGb081HdOY6i0t99QuePZ8OirftfZGXN4I86yeAiBIPe+haMV2Ws5u/xJ54+h9nM6wGCr5IbBh9hfBA+r7fw=="}]},"maintainers":[{"email":"jean@lauliac.com","name":"jeanlauliac"},{"email":"christoph.pojer@gmail.com","name":"cpojer"},{"email":"opensource+npm@fb.com","name":"fb"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pretty-format-20.1.0-delta.1.tgz_1500367613994_0.9472515909001231"},"directories":{}},"20.1.0-delta.2":{"name":"pretty-format","version":"20.1.0-delta.2","repository":{"type":"git","url":"git+https://github.com/facebook/jest.git"},"license":"BSD-3-Clause","description":"Stringify any JavaScript value.","main":"build/index.js","author":{"name":"James Kyle","email":"me@thejameskyle.com"},"dependencies":{"ansi-regex":"^3.0.0","ansi-styles":"^3.0.0"},"bugs":{"url":"https://github.com/facebook/jest/issues"},"homepage":"https://github.com/facebook/jest#readme","_id":"pretty-format@20.1.0-delta.2","_npmVersion":"5.0.3","_nodeVersion":"8.1.4","_npmUser":{"name":"cpojer","email":"christoph.pojer@gmail.com"},"dist":{"integrity":"sha512-DUKhIiDpLFWl8a88CXjIad2hpz8GWQ/ifF4werLE30QETdOa0Y9DyJYjwO3nlRbcwBhWy2r3fqLczDr8vdZgRg==","shasum":"b30fb1f421158115db5c2561aee3e0932058b4cf","tarball":"http://localhost:4545/npm/registry/pretty-format/pretty-format-20.1.0-delta.2.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCHuXtOW/XxrgNNkp8B0RKEo0zQX7n5YPAkGoRt6u1t1gIgWTzCb87MzXzT7PsoMI92kQz3esnvPaSfPQLm82u98pI="}]},"maintainers":[{"email":"jean@lauliac.com","name":"jeanlauliac"},{"email":"christoph.pojer@gmail.com","name":"cpojer"},{"email":"opensource+npm@fb.com","name":"fb"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pretty-format-20.1.0-delta.2.tgz_1500469003591_0.6975763365626335"},"directories":{}},"20.1.0-delta.3":{"name":"pretty-format","version":"20.1.0-delta.3","repository":{"type":"git","url":"git+https://github.com/facebook/jest.git"},"license":"BSD-3-Clause","description":"Stringify any JavaScript value.","main":"build/index.js","browser":"build-es5/index.js","author":{"name":"James Kyle","email":"me@thejameskyle.com"},"dependencies":{"ansi-regex":"^3.0.0","ansi-styles":"^3.0.0"},"bugs":{"url":"https://github.com/facebook/jest/issues"},"homepage":"https://github.com/facebook/jest#readme","_id":"pretty-format@20.1.0-delta.3","_npmVersion":"5.3.0","_nodeVersion":"8.2.1","_npmUser":{"name":"cpojer","email":"christoph.pojer@gmail.com"},"dist":{"integrity":"sha512-oPg69E6gYphXZtbP3MUWF8AdBVxgRpay7+aZuXSd4wfktTY0eAbTA+KxS6aWb2vzLJZjoFzIZn3yoSkb+xoOew==","shasum":"1f84f5ba81dc2d9670aa629e87369650da3bdf62","tarball":"http://localhost:4545/npm/registry/pretty-format/pretty-format-20.1.0-delta.3.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDpiTrCyQWFyysfGQwWB4emqM5cCXIPE0+eDnsyaabl+wIgKkjfrIep4BgdOmQJ6VE/sxs9QyXgFDBGxMZYSrX6ui0="}]},"maintainers":[{"email":"jean@lauliac.com","name":"jeanlauliac"},{"email":"christoph.pojer@gmail.com","name":"cpojer"},{"email":"opensource+npm@fb.com","name":"fb"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pretty-format-20.1.0-delta.3.tgz_1501020745661_0.15517720603384078"},"directories":{}},"20.1.0-delta.4":{"name":"pretty-format","version":"20.1.0-delta.4","repository":{"type":"git","url":"git+https://github.com/facebook/jest.git"},"license":"BSD-3-Clause","description":"Stringify any JavaScript value.","main":"build/index.js","browser":"build-es5/index.js","author":{"name":"James Kyle","email":"me@thejameskyle.com"},"dependencies":{"ansi-regex":"^3.0.0","ansi-styles":"^3.0.0"},"bugs":{"url":"https://github.com/facebook/jest/issues"},"homepage":"https://github.com/facebook/jest#readme","_id":"pretty-format@20.1.0-delta.4","_npmVersion":"5.3.0","_nodeVersion":"8.2.1","_npmUser":{"name":"cpojer","email":"christoph.pojer@gmail.com"},"dist":{"integrity":"sha512-kIYNcMwJ1O2vX04ojQOQ/w3YcJLDqkUmGnxZUwulYTlDq2lYVqPobc3+Mvaj8T/eNIklhQM6hwcHcawOdE89iA==","shasum":"4867b8e91e1eb7a97b2b02bd46bf9829f6fe1c89","tarball":"http://localhost:4545/npm/registry/pretty-format/pretty-format-20.1.0-delta.4.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCZS4s8mHl92Wk2Fn1i1kL5GJcG1g5fs857DkBpX99gVAIhAKlco26kF4EQL3U47DnA84+kVSFYI6cXHa4KxxNGOrPm"}]},"maintainers":[{"email":"jean@lauliac.com","name":"jeanlauliac"},{"email":"christoph.pojer@gmail.com","name":"cpojer"},{"email":"opensource+npm@fb.com","name":"fb"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pretty-format-20.1.0-delta.4.tgz_1501175948595_0.7395031834021211"},"directories":{}},"20.1.0-delta.5":{"name":"pretty-format","version":"20.1.0-delta.5","repository":{"type":"git","url":"git+https://github.com/facebook/jest.git"},"license":"BSD-3-Clause","description":"Stringify any JavaScript value.","main":"build/index.js","browser":"build-es5/index.js","author":{"name":"James Kyle","email":"me@thejameskyle.com"},"dependencies":{"ansi-regex":"^3.0.0","ansi-styles":"^3.0.0"},"bugs":{"url":"https://github.com/facebook/jest/issues"},"homepage":"https://github.com/facebook/jest#readme","_id":"pretty-format@20.1.0-delta.5","_npmVersion":"5.3.0","_nodeVersion":"8.0.0","_npmUser":{"name":"aaronabramov","email":"aaron@abramov.io"},"dist":{"integrity":"sha512-aIFTNcOiazeXsqjPB534cDBM8unE4veDalZ2dS7BOxHpFVmz4vz1uIKZqO/Yo4bDcZelfk4aa22mTyuApX8R4w==","shasum":"7a45a00938192cb306606b04c84a885a1501e0ff","tarball":"http://localhost:4545/npm/registry/pretty-format/pretty-format-20.1.0-delta.5.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIA6glTzrDAIP7CA13IiMwtpZgGkF31fznV35Ge8xfhTOAiEAyQJ/hXMHVr1UqXOkLzVXmDETvqT1nnz1ma502Z/gaFo="}]},"maintainers":[{"email":"aaron@abramov.io","name":"aaronabramov"},{"email":"jean@lauliac.com","name":"jeanlauliac"},{"email":"christoph.pojer@gmail.com","name":"cpojer"},{"email":"opensource+npm@fb.com","name":"fb"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pretty-format-20.1.0-delta.5.tgz_1501605216720_0.6961817897390574"},"directories":{}},"20.1.0-echo.1":{"name":"pretty-format","version":"20.1.0-echo.1","repository":{"type":"git","url":"git+https://github.com/facebook/jest.git"},"license":"BSD-3-Clause","description":"Stringify any JavaScript value.","main":"build/index.js","browser":"build-es5/index.js","author":{"name":"James Kyle","email":"me@thejameskyle.com"},"dependencies":{"ansi-regex":"^3.0.0","ansi-styles":"^3.0.0"},"bugs":{"url":"https://github.com/facebook/jest/issues"},"homepage":"https://github.com/facebook/jest#readme","_id":"pretty-format@20.1.0-echo.1","_npmVersion":"5.0.3","_nodeVersion":"8.1.4","_npmUser":{"name":"mjesun","email":"mjesun@hotmail.com"},"dist":{"integrity":"sha512-0xv3lhkXb7xtQmha53cSrjl4MVd6Ymj0QJrWWcoK2JEnvSHTYMCLOdzkDi2rXw7Ex+p0DqeBEzM1+ZDksdYItA==","shasum":"3b97907461d90a06b2e7531185cb1b529eb186f3","tarball":"http://localhost:4545/npm/registry/pretty-format/pretty-format-20.1.0-echo.1.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC8/HtkDNG1yARGb/89D7m9WoBkd8CEk29WTtY57+g9YgIhAJJsErxYRqPQy9j1t75v4g6e8UZo3lBWC3cIIDCFZzp8"}]},"maintainers":[{"email":"mjesun@hotmail.com","name":"mjesun"},{"email":"aaron@abramov.io","name":"aaronabramov"},{"email":"jean@lauliac.com","name":"jeanlauliac"},{"email":"christoph.pojer@gmail.com","name":"cpojer"},{"email":"opensource+npm@fb.com","name":"fb"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pretty-format-20.1.0-echo.1.tgz_1502210993548_0.23874914622865617"},"directories":{}},"21.0.0-alpha.1":{"name":"pretty-format","version":"21.0.0-alpha.1","repository":{"type":"git","url":"git+https://github.com/facebook/jest.git"},"license":"BSD-3-Clause","description":"Stringify any JavaScript value.","main":"build/index.js","browser":"build-es5/index.js","author":{"name":"James Kyle","email":"me@thejameskyle.com"},"dependencies":{"ansi-regex":"^3.0.0","ansi-styles":"^3.0.0"},"bugs":{"url":"https://github.com/facebook/jest/issues"},"homepage":"https://github.com/facebook/jest#readme","_id":"pretty-format@21.0.0-alpha.1","_npmVersion":"5.3.0","_nodeVersion":"8.2.1","_npmUser":{"name":"cpojer","email":"christoph.pojer@gmail.com"},"dist":{"integrity":"sha512-Fv3tbErGJ3XxYAVM5OnhGirsOvugIKJ8TYSjyJPT4B8epkenbJkweWHUClT5VRReJ6n5gPzNpi+lZHzPlrab/w==","shasum":"ce06c788260803f557e569d0e2a526510375df34","tarball":"http://localhost:4545/npm/registry/pretty-format/pretty-format-21.0.0-alpha.1.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDl/BpS73JeB77g/5/CYDTyXep87QrkTfmsO5khlLlLtAiBQE4O41Aghzjt3OaOU/dckp2XSDYtH17dC+0GfdWkPvg=="}]},"maintainers":[{"email":"mjesun@hotmail.com","name":"mjesun"},{"email":"aaron@abramov.io","name":"aaronabramov"},{"email":"jean@lauliac.com","name":"jeanlauliac"},{"email":"christoph.pojer@gmail.com","name":"cpojer"},{"email":"opensource+npm@fb.com","name":"fb"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pretty-format-21.0.0-alpha.1.tgz_1502446445030_0.3482506617438048"},"directories":{}},"21.0.0-alpha.2":{"name":"pretty-format","version":"21.0.0-alpha.2","repository":{"type":"git","url":"git+https://github.com/facebook/jest.git"},"license":"BSD-3-Clause","description":"Stringify any JavaScript value.","main":"build/index.js","browser":"build-es5/index.js","author":{"name":"James Kyle","email":"me@thejameskyle.com"},"dependencies":{"ansi-regex":"^3.0.0","ansi-styles":"^3.0.0"},"bugs":{"url":"https://github.com/facebook/jest/issues"},"homepage":"https://github.com/facebook/jest#readme","_id":"pretty-format@21.0.0-alpha.2","_npmVersion":"5.3.0","_nodeVersion":"8.0.0","_npmUser":{"name":"aaronabramov","email":"aaron@abramov.io"},"dist":{"integrity":"sha512-7gc3fKT7HLAyoRleN4VOgqsLwArExCZ8DaiXkWK5xkX40nTZ9icZGduKDNuGMNlTva7rKuz0qqA2sxBtTvq8aQ==","shasum":"0122a9d5f73b9895ee9ba5954aeb817fb988f9c3","tarball":"http://localhost:4545/npm/registry/pretty-format/pretty-format-21.0.0-alpha.2.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIET4nsUnAAgFHSGqPOmBnMQiekTux2Oz/F58AsLs/gBlAiBM2cus1jKjwaS6JlolubhWsZJpOd2Ki3L7RAvYg3nZ3w=="}]},"maintainers":[{"email":"mjesun@hotmail.com","name":"mjesun"},{"email":"aaron@abramov.io","name":"aaronabramov"},{"email":"jean@lauliac.com","name":"jeanlauliac"},{"email":"christoph.pojer@gmail.com","name":"cpojer"},{"email":"opensource+npm@fb.com","name":"fb"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pretty-format-21.0.0-alpha.2.tgz_1503353208575_0.771268846001476"},"directories":{}},"21.0.0-beta.1":{"name":"pretty-format","version":"21.0.0-beta.1","repository":{"type":"git","url":"git+https://github.com/facebook/jest.git"},"license":"BSD-3-Clause","description":"Stringify any JavaScript value.","main":"build/index.js","browser":"build-es5/index.js","author":{"name":"James Kyle","email":"me@thejameskyle.com"},"dependencies":{"ansi-regex":"^3.0.0","ansi-styles":"^3.0.0"},"bugs":{"url":"https://github.com/facebook/jest/issues"},"homepage":"https://github.com/facebook/jest#readme","_id":"pretty-format@21.0.0-beta.1","_npmVersion":"5.3.0","_nodeVersion":"8.4.0","_npmUser":{"name":"cpojer","email":"christoph.pojer@gmail.com"},"dist":{"integrity":"sha512-EVmydIhn2zDLhoCPKU5cCvKHBRp+gxHsWrt4U0YLv8vLGk97/TOv1bvV7oHlo3d7KI6gMgf3Czhusm8M5DGFhQ==","shasum":"53fb4572e1ab46b44cad62fd91863f4cd9d40225","tarball":"http://localhost:4545/npm/registry/pretty-format/pretty-format-21.0.0-beta.1.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD8p3k48YvZswB+jputDHhYYyB/aryeePsOmTMtH6oA2AIgG7cLKf0RgStumlZ7LsTrfFFu9s10w5k+slc+m6ATh6E="}]},"maintainers":[{"email":"mjesun@hotmail.com","name":"mjesun"},{"email":"aaron@abramov.io","name":"aaronabramov"},{"email":"jean@lauliac.com","name":"jeanlauliac"},{"email":"christoph.pojer@gmail.com","name":"cpojer"},{"email":"opensource+npm@fb.com","name":"fb"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pretty-format-21.0.0-beta.1.tgz_1503610009937_0.9285495886579156"},"directories":{}},"21.0.0":{"name":"pretty-format","version":"21.0.0","repository":{"type":"git","url":"git+https://github.com/facebook/jest.git"},"license":"BSD-3-Clause","description":"Stringify any JavaScript value.","main":"build/index.js","browser":"build-es5/index.js","author":{"name":"James Kyle","email":"me@thejameskyle.com"},"dependencies":{"ansi-regex":"^3.0.0","ansi-styles":"^3.2.0"},"bugs":{"url":"https://github.com/facebook/jest/issues"},"homepage":"https://github.com/facebook/jest#readme","_id":"pretty-format@21.0.0","_npmVersion":"5.3.0","_nodeVersion":"8.4.0","_npmUser":{"name":"cpojer","email":"christoph.pojer@gmail.com"},"dist":{"integrity":"sha512-xICDS0AgbFdP8RNDxi58hOWfm7CDjC88PPx49PA8GmBs6WBwWEMLRT6lU0mtX9snTBBMncQxDNs4rMloCjZwuA==","shasum":"bea1522c4c47e49b44db5b6fbf83e7737251f305","tarball":"http://localhost:4545/npm/registry/pretty-format/pretty-format-21.0.0.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIE+vVDw72/2w31ygbflJlfproW7shZ47hENNjymgJNBXAiBkFs+9GBUzBFIMtyGEql52VhNx+pK2iREFbuxOBLkemQ=="}]},"maintainers":[{"email":"mjesun@hotmail.com","name":"mjesun"},{"email":"aaron@abramov.io","name":"aaronabramov"},{"email":"jean@lauliac.com","name":"jeanlauliac"},{"email":"christoph.pojer@gmail.com","name":"cpojer"},{"email":"opensource+npm@fb.com","name":"fb"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pretty-format-21.0.0.tgz_1504537314379_0.43319351389072835"},"directories":{}},"21.0.2":{"name":"pretty-format","version":"21.0.2","repository":{"type":"git","url":"git+https://github.com/facebook/jest.git"},"license":"BSD-3-Clause","description":"Stringify any JavaScript value.","main":"build/index.js","browser":"build-es5/index.js","author":{"name":"James Kyle","email":"me@thejameskyle.com"},"dependencies":{"ansi-regex":"^3.0.0","ansi-styles":"^3.2.0"},"bugs":{"url":"https://github.com/facebook/jest/issues"},"homepage":"https://github.com/facebook/jest#readme","_id":"pretty-format@21.0.2","_npmVersion":"5.3.0","_nodeVersion":"8.4.0","_npmUser":{"name":"cpojer","email":"christoph.pojer@gmail.com"},"dist":{"integrity":"sha512-+fjqIZo/KcMEreY5onowgXzENgd6zKxJS9BoiIoOeRmXTM0Fo6Er0RUbIjzLyY2TBV1K2S7vDUzOVcUtKE9jgQ==","shasum":"76adcebd836c41ccd2e6b626e70f63050d2a3534","tarball":"http://localhost:4545/npm/registry/pretty-format/pretty-format-21.0.2.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGsqUcyTXf1SZ2nk2DHem4NmvQgfKnuqytWx9HFzjN8fAiEArFxN3gltU2ql/JE+52XXS5lwwGloQ7JEFPZtdy4Q9yg="}]},"maintainers":[{"email":"mjesun@hotmail.com","name":"mjesun"},{"email":"aaron@abramov.io","name":"aaronabramov"},{"email":"jean@lauliac.com","name":"jeanlauliac"},{"email":"christoph.pojer@gmail.com","name":"cpojer"},{"email":"opensource+npm@fb.com","name":"fb"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pretty-format-21.0.2.tgz_1504880367068_0.5469620125368237"},"directories":{}},"21.1.0":{"name":"pretty-format","version":"21.1.0","repository":{"type":"git","url":"git+https://github.com/facebook/jest.git"},"license":"BSD-3-Clause","description":"Stringify any JavaScript value.","main":"build/index.js","browser":"build-es5/index.js","author":{"name":"James Kyle","email":"me@thejameskyle.com"},"dependencies":{"ansi-regex":"^3.0.0","ansi-styles":"^3.2.0"},"bugs":{"url":"https://github.com/facebook/jest/issues"},"homepage":"https://github.com/facebook/jest#readme","_id":"pretty-format@21.1.0","_npmVersion":"5.3.0","_nodeVersion":"8.4.0","_npmUser":{"name":"cpojer","email":"christoph.pojer@gmail.com"},"dist":{"integrity":"sha512-041BVxr2pp7uGG8slfw43ysRXSaBIVqo5Li03BwI3K1/9oENlhkEEYWPkHpDzj7NlJ3GZte+Tv/DId5g2PLduA==","shasum":"557428254323832ee8b7c971cb613442bea67f61","tarball":"http://localhost:4545/npm/registry/pretty-format/pretty-format-21.1.0.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD6QTGj0K+1UUzRwqmZfAPAXqE1noIVPyWEwUI1Gk2mWwIgKwE4ZOOVtnN9tqdSRdHiH9FHxUFcoc46EEwX14if2Uw="}]},"maintainers":[{"email":"mjesun@hotmail.com","name":"mjesun"},{"email":"aaron@abramov.io","name":"aaronabramov"},{"email":"jean@lauliac.com","name":"jeanlauliac"},{"email":"christoph.pojer@gmail.com","name":"cpojer"},{"email":"opensource+npm@fb.com","name":"fb"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pretty-format-21.1.0.tgz_1505353814511_0.45887886406853795"},"directories":{}},"21.2.0":{"name":"pretty-format","version":"21.2.0","repository":{"type":"git","url":"git+https://github.com/facebook/jest.git"},"license":"MIT","description":"Stringify any JavaScript value.","main":"build/index.js","browser":"build-es5/index.js","author":{"name":"James Kyle","email":"me@thejameskyle.com"},"dependencies":{"ansi-regex":"^3.0.0","ansi-styles":"^3.2.0"},"bugs":{"url":"https://github.com/facebook/jest/issues"},"homepage":"https://github.com/facebook/jest#readme","_id":"pretty-format@21.2.0","_npmVersion":"5.3.0","_nodeVersion":"8.4.0","_npmUser":{"name":"cpojer","email":"christoph.pojer@gmail.com"},"dist":{"integrity":"sha512-r0Ec8aBODhkhwpbw83uQ3dh5l982BRjwDDT2bsY3s9nfeaFvWlOh/hWg81Z4qJX1OwkJBmZqw2Mhk8sWXarx6A==","shasum":"8ca29556ad13eed5db48a3096b98bab9c321c6fa","tarball":"http://localhost:4545/npm/registry/pretty-format/pretty-format-21.2.0.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCjY0pO+SQfBe/IgKVPwNRlnR5xHTIB9vtPe5mUxThkdAIhAOoO/v4U6/w7uFqDLGSZRHl9PtkorbWCzAlXVPeDcaG5"}]},"maintainers":[{"email":"mjesun@hotmail.com","name":"mjesun"},{"email":"aaron@abramov.io","name":"aaronabramov"},{"email":"jean@lauliac.com","name":"jeanlauliac"},{"email":"christoph.pojer@gmail.com","name":"cpojer"},{"email":"opensource+npm@fb.com","name":"fb"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pretty-format-21.2.0.tgz_1506457337974_0.018551710061728954"},"directories":{}},"21.2.1":{"name":"pretty-format","version":"21.2.1","repository":{"type":"git","url":"git+https://github.com/facebook/jest.git"},"license":"MIT","description":"Stringify any JavaScript value.","main":"build/index.js","browser":"build-es5/index.js","author":{"name":"James Kyle","email":"me@thejameskyle.com"},"dependencies":{"ansi-regex":"^3.0.0","ansi-styles":"^3.2.0"},"bugs":{"url":"https://github.com/facebook/jest/issues"},"homepage":"https://github.com/facebook/jest#readme","_id":"pretty-format@21.2.1","_npmVersion":"5.3.0","_nodeVersion":"8.4.0","_npmUser":{"name":"cpojer","email":"christoph.pojer@gmail.com"},"dist":{"integrity":"sha512-ZdWPGYAnYfcVP8yKA3zFjCn8s4/17TeYH28MXuC8vTp0o21eXjbFGcOAXZEaDaOFJjc3h2qa7HQNHNshhvoh2A==","shasum":"ae5407f3cf21066cd011aa1ba5fce7b6a2eddb36","tarball":"http://localhost:4545/npm/registry/pretty-format/pretty-format-21.2.1.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCBgtAgRmVEXKanMHLVVgRkUCyPZYxJWZvNkWlblPZouAIhAPGavGH8/Jn7gQPD24djHBLKkwX0lB7hsnvnUPpvkCbI"}]},"maintainers":[{"email":"mjesun@hotmail.com","name":"mjesun"},{"email":"aaron@abramov.io","name":"aaronabramov"},{"email":"jean@lauliac.com","name":"jeanlauliac"},{"email":"christoph.pojer@gmail.com","name":"cpojer"},{"email":"opensource+npm@fb.com","name":"fb"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pretty-format-21.2.1.tgz_1506550502084_0.2247674383688718"},"directories":{}},"21.3.0-alpha.1e3ee68e":{"name":"pretty-format","version":"21.3.0-alpha.1e3ee68e","repository":{"type":"git","url":"git+https://github.com/facebook/jest.git"},"license":"MIT","description":"Stringify any JavaScript value.","main":"build/index.js","browser":"build-es5/index.js","author":{"name":"James Kyle","email":"me@thejameskyle.com"},"dependencies":{"ansi-regex":"^3.0.0","ansi-styles":"^3.2.0"},"bugs":{"url":"https://github.com/facebook/jest/issues"},"homepage":"https://github.com/facebook/jest#readme","_id":"pretty-format@21.3.0-alpha.1e3ee68e","_npmVersion":"5.3.0","_nodeVersion":"8.4.0","_npmUser":{"name":"cpojer","email":"christoph.pojer@gmail.com"},"dist":{"integrity":"sha512-Yy//p7NR7KKeVzoPEqx6hgQAK9cvLRuWSHHcq+va1fapfgN0EvrU8+Bh6kOIxOtbf8pM9/sP0sh9sDmCSwM25w==","shasum":"a3bad57fa8925ca2e7b5fe66454ac3d30371a314","tarball":"http://localhost:4545/npm/registry/pretty-format/pretty-format-21.3.0-alpha.1e3ee68e.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFdteH2WdXDaYFoTvseKDKg6qmE18F2lI5mHGTItGffBAiEAp9K3vnX3vgH3oVBB/KoiPRgpdyJRCciajnLH8a9KYAU="}]},"maintainers":[{"email":"mjesun@hotmail.com","name":"mjesun"},{"email":"aaron@abramov.io","name":"aaronabramov"},{"email":"jean@lauliac.com","name":"jeanlauliac"},{"email":"christoph.pojer@gmail.com","name":"cpojer"},{"email":"opensource+npm@fb.com","name":"fb"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pretty-format-21.3.0-alpha.1e3ee68e.tgz_1506608440405_0.08250383823178709"},"directories":{}},"21.3.0-alpha.eff7a1cf":{"name":"pretty-format","version":"21.3.0-alpha.eff7a1cf","repository":{"type":"git","url":"git+https://github.com/facebook/jest.git"},"license":"MIT","description":"Stringify any JavaScript value.","main":"build/index.js","browser":"build-es5/index.js","author":{"name":"James Kyle","email":"me@thejameskyle.com"},"dependencies":{"ansi-regex":"^3.0.0","ansi-styles":"^3.2.0"},"bugs":{"url":"https://github.com/facebook/jest/issues"},"homepage":"https://github.com/facebook/jest#readme","_id":"pretty-format@21.3.0-alpha.eff7a1cf","_npmVersion":"5.3.0","_nodeVersion":"8.4.0","_npmUser":{"name":"cpojer","email":"christoph.pojer@gmail.com"},"dist":{"integrity":"sha512-t5+JnrK2LQGOKoZCtDajQzz1XNsc1ZZ1clOWqfg75RXZ7JAIwEP8OxJa/YqyWcatJ0tpLQdk9Pso+fyDsQMabQ==","shasum":"c8d2648ce88753abcdfaa407b555b853db796068","tarball":"http://localhost:4545/npm/registry/pretty-format/pretty-format-21.3.0-alpha.eff7a1cf.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDiDAttkNIWk5mfQZkxF4puN/rmJZyVO3GeCgu0lLB49AIgI214FkRHkUl3EaKmTixiGczg4w1zpWjJ4uHd3xaMXFg="}]},"maintainers":[{"email":"mjesun@hotmail.com","name":"mjesun"},{"email":"aaron@abramov.io","name":"aaronabramov"},{"email":"jean@lauliac.com","name":"jeanlauliac"},{"email":"christoph.pojer@gmail.com","name":"cpojer"},{"email":"opensource+npm@fb.com","name":"fb"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pretty-format-21.3.0-alpha.eff7a1cf.tgz_1506876408988_0.26944437134079635"},"directories":{}},"21.3.0-beta.1":{"name":"pretty-format","version":"21.3.0-beta.1","repository":{"type":"git","url":"git+https://github.com/facebook/jest.git"},"license":"MIT","description":"Stringify any JavaScript value.","main":"build/index.js","browser":"build-es5/index.js","author":{"name":"James Kyle","email":"me@thejameskyle.com"},"dependencies":{"ansi-regex":"^3.0.0","ansi-styles":"^3.2.0"},"bugs":{"url":"https://github.com/facebook/jest/issues"},"homepage":"https://github.com/facebook/jest#readme","_id":"pretty-format@21.3.0-beta.1","_npmVersion":"5.3.0","_nodeVersion":"8.4.0","_npmUser":{"name":"cpojer","email":"christoph.pojer@gmail.com"},"dist":{"integrity":"sha512-hhGC6GaSgmXvb/WR1HUOsVOx3zZbPlwjiJ73OoIQZeMSiMoJvigr4QbyWX4WasRw2kJuMmdzSsTl573Fsa5Mog==","shasum":"0525f192e6722eae942a9ecb93eab7ef4faa2440","tarball":"http://localhost:4545/npm/registry/pretty-format/pretty-format-21.3.0-beta.1.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC3vJZSnhgLFWfeghlW/+VaWD7L//Iex6JrpAj+8deMwQIhAJQhiMQNF64rCOPTmmgZ3QK8uyniMjwVNmmPBnf/Mt+x"}]},"maintainers":[{"email":"mjesun@hotmail.com","name":"mjesun"},{"email":"aaron@abramov.io","name":"aaronabramov"},{"email":"jean@lauliac.com","name":"jeanlauliac"},{"email":"christoph.pojer@gmail.com","name":"cpojer"},{"email":"opensource+npm@fb.com","name":"fb"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pretty-format-21.3.0-beta.1.tgz_1507114118268_0.1342497942969203"},"directories":{}},"21.3.0-beta.2":{"name":"pretty-format","version":"21.3.0-beta.2","repository":{"type":"git","url":"git+https://github.com/facebook/jest.git"},"license":"MIT","description":"Stringify any JavaScript value.","main":"build/index.js","browser":"build-es5/index.js","author":{"name":"James Kyle","email":"me@thejameskyle.com"},"dependencies":{"ansi-regex":"^3.0.0","ansi-styles":"^3.2.0"},"bugs":{"url":"https://github.com/facebook/jest/issues"},"homepage":"https://github.com/facebook/jest#readme","_id":"pretty-format@21.3.0-beta.2","_npmVersion":"5.3.0","_nodeVersion":"8.4.0","_npmUser":{"name":"cpojer","email":"christoph.pojer@gmail.com"},"dist":{"integrity":"sha512-U4RrCjvNm+u2VV+3xxeLAORBtXo1yUqccfkclKgU05sT6djh/L2B+Xz2WwXgqp1W5LcKawdrVav5InovYwnATQ==","shasum":"781840c8d10bc37c4438c61ab50678917a9f8a7d","tarball":"http://localhost:4545/npm/registry/pretty-format/pretty-format-21.3.0-beta.2.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAKYJbaQ8zMamkJ01z2QVYfm4zTTiJUrR69/edMna39fAiADDzQpEHlV79oVb2RsS3N2L2NX5es7gnrToAr9tPBeNA=="}]},"maintainers":[{"email":"mjesun@hotmail.com","name":"mjesun"},{"email":"aaron@abramov.io","name":"aaronabramov"},{"email":"jean@lauliac.com","name":"jeanlauliac"},{"email":"christoph.pojer@gmail.com","name":"cpojer"},{"email":"opensource+npm@fb.com","name":"fb"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pretty-format-21.3.0-beta.2.tgz_1507888445329_0.3785671025980264"},"directories":{}},"21.3.0-beta.3":{"name":"pretty-format","version":"21.3.0-beta.3","repository":{"type":"git","url":"git+https://github.com/facebook/jest.git"},"license":"MIT","description":"Stringify any JavaScript value.","main":"build/index.js","browser":"build-es5/index.js","author":{"name":"James Kyle","email":"me@thejameskyle.com"},"dependencies":{"ansi-regex":"^3.0.0","ansi-styles":"^3.2.0"},"bugs":{"url":"https://github.com/facebook/jest/issues"},"homepage":"https://github.com/facebook/jest#readme","_id":"pretty-format@21.3.0-beta.3","_npmVersion":"5.3.0","_nodeVersion":"8.4.0","_npmUser":{"name":"cpojer","email":"christoph.pojer@gmail.com"},"dist":{"integrity":"sha512-GWHJ+1T4WGd0n07XtnAPBX9cJrDe4lDwApFERWbgmJEBZLqOAb2aRMRCWw3lx0YJ4rJUTJQspzykUi17bXMvrw==","shasum":"f52e763ef855a5e0b093fc4af201592e896512f9","tarball":"http://localhost:4545/npm/registry/pretty-format/pretty-format-21.3.0-beta.3.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCrG6BeEH1YaWf3bvraX8xswtKMbw8AOgoL8RNIBTBdawIgTjLUG4DTD7CJK5/vj3AqPLKGTnpKLvK/YAWPH2ngL7o="}]},"maintainers":[{"email":"mjesun@hotmail.com","name":"mjesun"},{"email":"aaron@abramov.io","name":"aaronabramov"},{"email":"jean@lauliac.com","name":"jeanlauliac"},{"email":"christoph.pojer@gmail.com","name":"cpojer"},{"email":"opensource+npm@fb.com","name":"fb"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pretty-format-21.3.0-beta.3.tgz_1508960044838_0.6422023139894009"},"directories":{}},"21.3.0-beta.4":{"name":"pretty-format","version":"21.3.0-beta.4","repository":{"type":"git","url":"git+https://github.com/facebook/jest.git"},"license":"MIT","description":"Stringify any JavaScript value.","main":"build/index.js","browser":"build-es5/index.js","author":{"name":"James Kyle","email":"me@thejameskyle.com"},"dependencies":{"ansi-regex":"^3.0.0","ansi-styles":"^3.2.0"},"bugs":{"url":"https://github.com/facebook/jest/issues"},"homepage":"https://github.com/facebook/jest#readme","_id":"pretty-format@21.3.0-beta.4","_npmVersion":"5.3.0","_nodeVersion":"8.4.0","_npmUser":{"name":"cpojer","email":"christoph.pojer@gmail.com"},"dist":{"integrity":"sha512-0N/mF0q7xrvqYiVH70Jx6gs6PSd7wgEFwXvZeNfJCZvNqanI0ziubX4b29ZxqLD7EDYWInhrFIVPy+PS7BeP5Q==","shasum":"6b3b8aba0b7097f821156e5fd1e3bc0fa923b17f","tarball":"http://localhost:4545/npm/registry/pretty-format/pretty-format-21.3.0-beta.4.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICRg+Q+GB25sJKcbPupx2UE4VYZrv++VxX8/XIfX/6cjAiAakJ0Q9WfD1kwAfHtlixZn9gJWWBJZ6ic79B78Yh41xg=="}]},"maintainers":[{"email":"mjesun@hotmail.com","name":"mjesun"},{"email":"aaron@abramov.io","name":"aaronabramov"},{"email":"jean@lauliac.com","name":"jeanlauliac"},{"email":"christoph.pojer@gmail.com","name":"cpojer"},{"email":"opensource+npm@fb.com","name":"fb"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pretty-format-21.3.0-beta.4.tgz_1509024417918_0.15134358499199152"},"directories":{}},"21.3.0-beta.5":{"name":"pretty-format","version":"21.3.0-beta.5","repository":{"type":"git","url":"git+https://github.com/facebook/jest.git"},"license":"MIT","description":"Stringify any JavaScript value.","main":"build/index.js","browser":"build-es5/index.js","author":{"name":"James Kyle","email":"me@thejameskyle.com"},"dependencies":{"ansi-regex":"^3.0.0","ansi-styles":"^3.2.0"},"bugs":{"url":"https://github.com/facebook/jest/issues"},"homepage":"https://github.com/facebook/jest#readme","_id":"pretty-format@21.3.0-beta.5","_npmVersion":"5.3.0","_nodeVersion":"8.4.0","_npmUser":{"name":"cpojer","email":"christoph.pojer@gmail.com"},"dist":{"integrity":"sha512-RJsSz0OezKVzE11v6XawL4bKSf/Ot8/emu2MniJCmVXyGZ/qAecQ9YjtY8IqMJkLN/GBvDb+4cZvwdwaLrcGSA==","shasum":"7293f1b7cd5af9e4d451d3fce2d9edf37be1225a","tarball":"http://localhost:4545/npm/registry/pretty-format/pretty-format-21.3.0-beta.5.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDXAdrVmPy9pM8T7RV0pGsKIcxahSV0PKOHWLWTOhSi4AIgIyzDQpn/kWMS2pR+riisVtpB47NVgMuZmHhc5tix50g="}]},"maintainers":[{"email":"mjesun@hotmail.com","name":"mjesun"},{"email":"aaron@abramov.io","name":"aaronabramov"},{"email":"jean@lauliac.com","name":"jeanlauliac"},{"email":"christoph.pojer@gmail.com","name":"cpojer"},{"email":"opensource+npm@fb.com","name":"fb"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pretty-format-21.3.0-beta.5.tgz_1509628650932_0.5733425945509225"},"directories":{}},"21.3.0-beta.6":{"name":"pretty-format","version":"21.3.0-beta.6","repository":{"type":"git","url":"git+https://github.com/facebook/jest.git"},"license":"MIT","description":"Stringify any JavaScript value.","main":"build/index.js","browser":"build-es5/index.js","author":{"name":"James Kyle","email":"me@thejameskyle.com"},"dependencies":{"ansi-regex":"^3.0.0","ansi-styles":"^3.2.0"},"bugs":{"url":"https://github.com/facebook/jest/issues"},"homepage":"https://github.com/facebook/jest#readme","_id":"pretty-format@21.3.0-beta.6","_npmVersion":"5.3.0","_nodeVersion":"8.4.0","_npmUser":{"name":"cpojer","email":"christoph.pojer@gmail.com"},"dist":{"integrity":"sha512-Izb3jeV4i6KVY0B5ioD1raEI4KLGO0IMJZuAk6LGNU+Y2Nih5L5Fyj034uajMG4HIYXUMwjZPjlGbhJdkQA0+Q==","shasum":"9e7124609ce93e236214032f812d01fd87dffdac","tarball":"http://localhost:4545/npm/registry/pretty-format/pretty-format-21.3.0-beta.6.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGESh4yB8vAoBfFCIDFbv+bo25Qp4Dtw2uepcGh3dK4JAiB9Ce2GWkLtl6cR2a88SJUi6weIkLVvMOIUT+CRpeUNvg=="}]},"maintainers":[{"email":"mjesun@hotmail.com","name":"mjesun"},{"email":"aaron@abramov.io","name":"aaronabramov"},{"email":"jean@lauliac.com","name":"jeanlauliac"},{"email":"christoph.pojer@gmail.com","name":"cpojer"},{"email":"opensource+npm@fb.com","name":"fb"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pretty-format-21.3.0-beta.6.tgz_1509726094359_0.6912878968287259"},"directories":{}},"21.3.0-beta.7":{"name":"pretty-format","version":"21.3.0-beta.7","repository":{"type":"git","url":"git+https://github.com/facebook/jest.git"},"license":"MIT","description":"Stringify any JavaScript value.","main":"build/index.js","browser":"build-es5/index.js","author":{"name":"James Kyle","email":"me@thejameskyle.com"},"dependencies":{"ansi-regex":"^3.0.0","ansi-styles":"^3.2.0"},"bugs":{"url":"https://github.com/facebook/jest/issues"},"homepage":"https://github.com/facebook/jest#readme","_id":"pretty-format@21.3.0-beta.7","_npmVersion":"5.3.0","_nodeVersion":"8.4.0","_npmUser":{"name":"cpojer","email":"christoph.pojer@gmail.com"},"dist":{"integrity":"sha512-GUxhDwEMPB7P2Y6IzPhHqUHy2eFz7JcNO8Vc3GHWXBHGLJALMLS0x7q65heedUQfP8lxAULBcFYwLm37MT3XGw==","shasum":"5cd0599fc79e89ac4d5f639d9d7aeb83cfa85d11","tarball":"http://localhost:4545/npm/registry/pretty-format/pretty-format-21.3.0-beta.7.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGrXXSQ9mKagOStXniMgLKINi4IqQ7BTtDeOLqjlsdDDAiEAr+m5jN8KHmJFcC0Ery0LJvdFA0075Dm/ulkUBL8uUjs="}]},"maintainers":[{"email":"mjesun@hotmail.com","name":"mjesun"},{"email":"aaron@abramov.io","name":"aaronabramov"},{"email":"jean@lauliac.com","name":"jeanlauliac"},{"email":"christoph.pojer@gmail.com","name":"cpojer"},{"email":"opensource+npm@fb.com","name":"fb"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pretty-format-21.3.0-beta.7.tgz_1509961188645_0.923250918276608"},"directories":{}},"21.3.0-beta.8":{"name":"pretty-format","version":"21.3.0-beta.8","repository":{"type":"git","url":"git+https://github.com/facebook/jest.git"},"license":"MIT","description":"Stringify any JavaScript value.","main":"build/index.js","browser":"build-es5/index.js","author":{"name":"James Kyle","email":"me@thejameskyle.com"},"dependencies":{"ansi-regex":"^3.0.0","ansi-styles":"^3.2.0"},"bugs":{"url":"https://github.com/facebook/jest/issues"},"homepage":"https://github.com/facebook/jest#readme","_id":"pretty-format@21.3.0-beta.8","_npmVersion":"5.3.0","_nodeVersion":"8.4.0","_npmUser":{"name":"cpojer","email":"christoph.pojer@gmail.com"},"dist":{"integrity":"sha512-2GJqwkxJtofmptZumdQHWlAduMBeEMpLy2NM6HvicgI9PtVHzgsObRuRfufMD709LB7UryI2F5xpIyziW+9vjg==","shasum":"66cb61c4658c2ecab21251495d6d6c102a25b4ba","tarball":"http://localhost:4545/npm/registry/pretty-format/pretty-format-21.3.0-beta.8.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCIYe7IklAA25TphRuAABFIX9Hv8VC9XetIxtKyli5EmgIhAKtrK5lgJsR8vaq5TQxa98iO1uVhiSB8A6v90sFjV+JY"}]},"maintainers":[{"email":"mjesun@hotmail.com","name":"mjesun"},{"email":"aaron@abramov.io","name":"aaronabramov"},{"email":"jean@lauliac.com","name":"jeanlauliac"},{"email":"christoph.pojer@gmail.com","name":"cpojer"},{"email":"opensource+npm@fb.com","name":"fb"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pretty-format-21.3.0-beta.8.tgz_1510076622582_0.9108345645945519"},"directories":{}},"21.3.0-beta.9":{"name":"pretty-format","version":"21.3.0-beta.9","repository":{"type":"git","url":"git+https://github.com/facebook/jest.git"},"license":"MIT","description":"Stringify any JavaScript value.","main":"build/index.js","browser":"build-es5/index.js","author":{"name":"James Kyle","email":"me@thejameskyle.com"},"dependencies":{"ansi-regex":"^3.0.0","ansi-styles":"^3.2.0"},"bugs":{"url":"https://github.com/facebook/jest/issues"},"homepage":"https://github.com/facebook/jest#readme","_id":"pretty-format@21.3.0-beta.9","_npmVersion":"5.5.1","_nodeVersion":"8.4.0","_npmUser":{"name":"cpojer","email":"christoph.pojer@gmail.com"},"dist":{"integrity":"sha512-2g5xelJnG75jAdtzBGwUwL0rQz4wIetbZRKSXeUdqxM3zFUv085Ql0O4Arx5y3YGi0LFQQkPDT9SWsWhE+Kdhg==","shasum":"dedd97b728c818f8e9c8818fc4c35c156cae01a5","tarball":"http://localhost:4545/npm/registry/pretty-format/pretty-format-21.3.0-beta.9.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBE4pEmTgIA3Xd9ESV0k0dU1BbSFw3K2tgF6v4M3ZDycAiEAyUvXcAkwetQVv/BljLRxMI3Up84ON31KxAvt5aV/DgE="}]},"maintainers":[{"email":"mjesun@hotmail.com","name":"mjesun"},{"email":"aaron@abramov.io","name":"aaronabramov"},{"email":"jean@lauliac.com","name":"jeanlauliac"},{"email":"christoph.pojer@gmail.com","name":"cpojer"},{"email":"opensource+npm@fb.com","name":"fb"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pretty-format-21.3.0-beta.9.tgz_1511356652309_0.2100884655956179"},"directories":{}},"21.3.0-beta.10":{"name":"pretty-format","version":"21.3.0-beta.10","repository":{"type":"git","url":"git+https://github.com/facebook/jest.git"},"license":"MIT","description":"Stringify any JavaScript value.","main":"build/index.js","browser":"build-es5/index.js","author":{"name":"James Kyle","email":"me@thejameskyle.com"},"dependencies":{"ansi-regex":"^3.0.0","ansi-styles":"^3.2.0"},"bugs":{"url":"https://github.com/facebook/jest/issues"},"homepage":"https://github.com/facebook/jest#readme","_id":"pretty-format@21.3.0-beta.10","_npmVersion":"5.5.1","_nodeVersion":"8.9.1","_npmUser":{"name":"cpojer","email":"christoph.pojer@gmail.com"},"dist":{"integrity":"sha512-vTwmiTua5avxqAgGoHft8z1mxmx0UDf6+JYr4YSrnhEzquN/tkr7+igq3axXBrbc9LqUNayRgBSWgW/kpNRBmw==","shasum":"6899d96e7b41420cdae15813f5695969e211b5bc","tarball":"http://localhost:4545/npm/registry/pretty-format/pretty-format-21.3.0-beta.10.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD3aey98aQ2VZyXSrNyPtE1q+cHyM7smjXOkhS4KLoWxgIhAMg53ayDb777kyk9tmXg7oQ6Zkw7kbBXuO88Rgqdp/Oi"}]},"maintainers":[{"email":"mjesun@hotmail.com","name":"mjesun"},{"email":"aaron@abramov.io","name":"aaronabramov"},{"email":"jean@lauliac.com","name":"jeanlauliac"},{"email":"christoph.pojer@gmail.com","name":"cpojer"},{"email":"opensource+npm@fb.com","name":"fb"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pretty-format-21.3.0-beta.10.tgz_1511613564251_0.8827821186278015"},"directories":{}},"21.3.0-beta.11":{"name":"pretty-format","version":"21.3.0-beta.11","repository":{"type":"git","url":"git+https://github.com/facebook/jest.git"},"license":"MIT","description":"Stringify any JavaScript value.","main":"build/index.js","browser":"build-es5/index.js","author":{"name":"James Kyle","email":"me@thejameskyle.com"},"dependencies":{"ansi-regex":"^3.0.0","ansi-styles":"^3.2.0"},"bugs":{"url":"https://github.com/facebook/jest/issues"},"homepage":"https://github.com/facebook/jest#readme","_id":"pretty-format@21.3.0-beta.11","_npmVersion":"5.5.1","_nodeVersion":"8.9.1","_npmUser":{"name":"cpojer","email":"christoph.pojer@gmail.com"},"dist":{"integrity":"sha512-0Cic2qmU/Q4OnAN6m3rYt2WZIpdFtEgvdA+6bBtporuz29q6bZBlqfIV5oNJ/JLGFvAwecWlUYkrX3fSuozvsw==","shasum":"3a32f4b33b868e20f73018de91a27cc2764643f4","tarball":"http://localhost:4545/npm/registry/pretty-format/pretty-format-21.3.0-beta.11.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIB50k2owz5pOm1aSvnHICzJGdIwQNLPClotIvYG1nUZJAiEA9tMTjiUXnp83Eyr43Emqb2a7zvWUI+nwrODH+ZWrs3M="}]},"maintainers":[{"email":"mjesun@hotmail.com","name":"mjesun"},{"email":"aaron@abramov.io","name":"aaronabramov"},{"email":"jean@lauliac.com","name":"jeanlauliac"},{"email":"christoph.pojer@gmail.com","name":"cpojer"},{"email":"opensource+npm@fb.com","name":"fb"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pretty-format-21.3.0-beta.11.tgz_1511965880572_0.03304202784784138"},"directories":{}},"21.3.0-beta.12":{"name":"pretty-format","version":"21.3.0-beta.12","repository":{"type":"git","url":"git+https://github.com/facebook/jest.git"},"license":"MIT","description":"Stringify any JavaScript value.","main":"build/index.js","browser":"build-es5/index.js","author":{"name":"James Kyle","email":"me@thejameskyle.com"},"dependencies":{"ansi-regex":"^3.0.0","ansi-styles":"^3.2.0"},"bugs":{"url":"https://github.com/facebook/jest/issues"},"homepage":"https://github.com/facebook/jest#readme","_id":"pretty-format@21.3.0-beta.12","_npmVersion":"5.5.1","_nodeVersion":"8.9.1","_npmUser":{"name":"cpojer","email":"christoph.pojer@gmail.com"},"dist":{"integrity":"sha512-VF7P/DdKFSvZtjyePORUmhMj9ZAjrTJmZattz6WTB8XHvbY8nuI6tqc0jtdIWjVr8xu3raNej+DySiDfIlO/Fw==","shasum":"fc74dd91aa8a0af1667abd705d59fa31b9295616","tarball":"http://localhost:4545/npm/registry/pretty-format/pretty-format-21.3.0-beta.12.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBOTkmSmNVJ1CNoqpYtSG77Rd4amaKTaJ33bExHL3Ps0AiANyNLl+Ft+sPu3kmIf1YZrxw9oq5sfUCknezyyyHeEBw=="}]},"maintainers":[{"email":"mjesun@hotmail.com","name":"mjesun"},{"email":"aaron@abramov.io","name":"aaronabramov"},{"email":"jean@lauliac.com","name":"jeanlauliac"},{"email":"christoph.pojer@gmail.com","name":"cpojer"},{"email":"opensource+npm@fb.com","name":"fb"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pretty-format-21.3.0-beta.12.tgz_1512499714975_0.8375277179293334"},"directories":{}},"21.3.0-beta.13":{"name":"pretty-format","version":"21.3.0-beta.13","repository":{"type":"git","url":"git+https://github.com/facebook/jest.git"},"license":"MIT","description":"Stringify any JavaScript value.","main":"build/index.js","browser":"build-es5/index.js","author":{"name":"James Kyle","email":"me@thejameskyle.com"},"dependencies":{"ansi-regex":"^3.0.0","ansi-styles":"^3.2.0"},"bugs":{"url":"https://github.com/facebook/jest/issues"},"homepage":"https://github.com/facebook/jest#readme","_id":"pretty-format@21.3.0-beta.13","_npmVersion":"5.5.1","_nodeVersion":"8.9.1","_npmUser":{"name":"cpojer","email":"christoph.pojer@gmail.com"},"dist":{"integrity":"sha512-Yj7N6BYJkQQdVeKtQXN4ATHoMzyCFmr5par/QsujXjm1e49EzDzm4/7zYxrR4AvyuqrTVtfB+kljK82G0PHGOw==","shasum":"e67a45a517de01a119ddb02804cd7232efea34af","tarball":"http://localhost:4545/npm/registry/pretty-format/pretty-format-21.3.0-beta.13.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDvWc5QubrkKjr6V/RCTlrF21pZaTmp5fbtN0o/nGRmNAiAojQ9XGWvhFMMDtsWUl4ZLC1y02oiqTeCNfW5l6V/kPw=="}]},"maintainers":[{"email":"mjesun@hotmail.com","name":"mjesun"},{"email":"aaron@abramov.io","name":"aaronabramov"},{"email":"jean@lauliac.com","name":"jeanlauliac"},{"email":"christoph.pojer@gmail.com","name":"cpojer"},{"email":"opensource+npm@fb.com","name":"fb"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pretty-format-21.3.0-beta.13.tgz_1512571028845_0.16150664957240224"},"directories":{}},"21.3.0-beta.14":{"name":"pretty-format","version":"21.3.0-beta.14","repository":{"type":"git","url":"git+https://github.com/facebook/jest.git"},"license":"MIT","description":"Stringify any JavaScript value.","main":"build/index.js","browser":"build-es5/index.js","author":{"name":"James Kyle","email":"me@thejameskyle.com"},"dependencies":{"ansi-regex":"^3.0.0","ansi-styles":"^3.2.0"},"bugs":{"url":"https://github.com/facebook/jest/issues"},"homepage":"https://github.com/facebook/jest#readme","_id":"pretty-format@21.3.0-beta.14","_npmVersion":"5.6.0","_nodeVersion":"9.2.1","_npmUser":{"name":"cpojer","email":"christoph.pojer@gmail.com"},"dist":{"integrity":"sha512-yIsEgUDAwqeuJ4MNDIk2vq5ISIsk8YEQEVlGM9LPnKXsZlnkQU+f7taWaPgv+AMOk526j+4CmCm/scCT96KgzA==","shasum":"21ae2e5d29656d54498b7b0ccefda842810eeba5","tarball":"http://localhost:4545/npm/registry/pretty-format/pretty-format-21.3.0-beta.14.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCID5d/2mln2q2H13y8iP5WM3LjxORnwd9GD3i4691iNW0AiA3ULLKTYsaGYTFkb2t50vFZ8fGIDmfjM69WyRFW0mOBg=="}]},"maintainers":[{"email":"mjesun@hotmail.com","name":"mjesun"},{"email":"aaron@abramov.io","name":"aaronabramov"},{"email":"jean@lauliac.com","name":"jeanlauliac"},{"email":"christoph.pojer@gmail.com","name":"cpojer"},{"email":"opensource+npm@fb.com","name":"fb"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pretty-format-21.3.0-beta.14.tgz_1513075955153_0.6669253744184971"},"directories":{}},"21.3.0-beta.15":{"name":"pretty-format","version":"21.3.0-beta.15","repository":{"type":"git","url":"git+https://github.com/facebook/jest.git"},"license":"MIT","description":"Stringify any JavaScript value.","main":"build/index.js","browser":"build-es5/index.js","author":{"name":"James Kyle","email":"me@thejameskyle.com"},"dependencies":{"ansi-regex":"^3.0.0","ansi-styles":"^3.2.0"},"bugs":{"url":"https://github.com/facebook/jest/issues"},"homepage":"https://github.com/facebook/jest#readme","_id":"pretty-format@21.3.0-beta.15","_npmVersion":"5.6.0","_nodeVersion":"9.2.1","_npmUser":{"name":"cpojer","email":"christoph.pojer@gmail.com"},"dist":{"integrity":"sha512-LO3IWQMOPzBrxk6SxfYtw2O5MVgSlU5iieQ8hmsSAgTpaB0lVaIORZbSaEUSDfxQfFLdE9889+GTFOe03BA7PQ==","shasum":"702708a64be53619b2c10138dc5a594056fd1569","tarball":"http://localhost:4545/npm/registry/pretty-format/pretty-format-21.3.0-beta.15.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFPVd2kM8lkVbyXTzsNswV7yyL7z6mYRYDqKfQWjPl24AiBD7d2hgdjpP1c/O/wFdXVyYNY52OAPpANOLiXYpMhHJw=="}]},"maintainers":[{"email":"mjesun@hotmail.com","name":"mjesun"},{"email":"aaron@abramov.io","name":"aaronabramov"},{"email":"jean@lauliac.com","name":"jeanlauliac"},{"email":"christoph.pojer@gmail.com","name":"cpojer"},{"email":"opensource+npm@fb.com","name":"fb"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pretty-format-21.3.0-beta.15.tgz_1513344458991_0.48647130909375846"},"directories":{}},"22.0.0":{"name":"pretty-format","version":"22.0.0","repository":{"type":"git","url":"git+https://github.com/facebook/jest.git"},"license":"MIT","description":"Stringify any JavaScript value.","main":"build/index.js","browser":"build-es5/index.js","author":{"name":"James Kyle","email":"me@thejameskyle.com"},"dependencies":{"ansi-regex":"^3.0.0","ansi-styles":"^3.2.0"},"bugs":{"url":"https://github.com/facebook/jest/issues"},"homepage":"https://github.com/facebook/jest#readme","_id":"pretty-format@22.0.0","_npmVersion":"5.5.1","_nodeVersion":"8.9.1","_npmUser":{"name":"mjesun","email":"mjesun@hotmail.com"},"dist":{"integrity":"sha512-Csm7QFEcmhj9/XtpbHgj7mk7klbCsfsZhZCKNY3FQSoep6eiaBWdPyr+kZAEuYfW0LHBK90uB0mNnYI63uRHcg==","shasum":"3c1da8d100e7e0b0ff1d839f4743b002d5907531","tarball":"http://localhost:4545/npm/registry/pretty-format/pretty-format-22.0.0.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCVDKz90dZjiGdsApZNejfCK+m5UKNegtpdlQexsNyVhAIgFhvNWXOtkRoEVoq+bbaSRcKDP5n0dF6zYF1FChJP42Q="}]},"maintainers":[{"email":"mjesun@hotmail.com","name":"mjesun"},{"email":"aaron@abramov.io","name":"aaronabramov"},{"email":"jean@lauliac.com","name":"jeanlauliac"},{"email":"christoph.pojer@gmail.com","name":"cpojer"},{"email":"opensource+npm@fb.com","name":"fb"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pretty-format-22.0.0.tgz_1513595004523_0.2027169002685696"},"directories":{}},"22.0.1":{"name":"pretty-format","version":"22.0.1","repository":{"type":"git","url":"git+https://github.com/facebook/jest.git"},"license":"MIT","description":"Stringify any JavaScript value.","main":"build/index.js","browser":"build-es5/index.js","author":{"name":"James Kyle","email":"me@thejameskyle.com"},"dependencies":{"ansi-regex":"^3.0.0","ansi-styles":"^3.2.0"},"bugs":{"url":"https://github.com/facebook/jest/issues"},"homepage":"https://github.com/facebook/jest#readme","_id":"pretty-format@22.0.1","_npmVersion":"5.6.0","_nodeVersion":"9.2.1","_npmUser":{"name":"cpojer","email":"christoph.pojer@gmail.com"},"dist":{"integrity":"sha512-/66A0zEbZUzAH4Xtk3szLp9LERQtq25lwrBygaMK4yg+KWKwZOmpAQUMmYr2uA9bqGogoz0Vu9SrUbeV7Tbwxg==","shasum":"65074c3946f544f6cd8445581293f532e0b3761c","tarball":"http://localhost:4545/npm/registry/pretty-format/pretty-format-22.0.1.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCk1oIpn7tajLh5QpIvE3nQ8Gb05TDns2nRtunOb4FZqgIgGOtHnFCsshEhGhlRavq9kOK+s77o75NyIN7siET7isQ="}]},"maintainers":[{"email":"mjesun@hotmail.com","name":"mjesun"},{"email":"aaron@abramov.io","name":"aaronabramov"},{"email":"jean@lauliac.com","name":"jeanlauliac"},{"email":"christoph.pojer@gmail.com","name":"cpojer"},{"email":"opensource+npm@fb.com","name":"fb"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pretty-format-22.0.1.tgz_1513628965104_0.48569458769634366"},"directories":{}},"22.0.2":{"name":"pretty-format","version":"22.0.2","repository":{"type":"git","url":"git+https://github.com/facebook/jest.git"},"license":"MIT","description":"Stringify any JavaScript value.","main":"build/index.js","browser":"build-es5/index.js","author":{"name":"James Kyle","email":"me@thejameskyle.com"},"dependencies":{"ansi-regex":"^3.0.0","ansi-styles":"^3.2.0"},"bugs":{"url":"https://github.com/facebook/jest/issues"},"homepage":"https://github.com/facebook/jest#readme","_id":"pretty-format@22.0.2","_npmVersion":"5.6.0","_nodeVersion":"9.2.1","_npmUser":{"name":"cpojer","email":"christoph.pojer@gmail.com"},"dist":{"integrity":"sha512-QcdCRIF1CpmW9ONgiZGrr+UEIbIGTx1ATbqlVlG2Sr3tlrKnL5FdOJGU0dxHk1rK0pFY2VVUHu/eRl7FfJ6Sag==","shasum":"c8a2fa835682ad259badd8ad70093f69a0704bad","tarball":"http://localhost:4545/npm/registry/pretty-format/pretty-format-22.0.2.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHqoz2sufQwVM6w+O5/H/aRoxpPy6cn8eryv2LUKaE9TAiB4EaczeFBxR72DD4oA/eqWbQphIgcgG620qJQi3Mr2xg=="}]},"maintainers":[{"email":"mjesun@hotmail.com","name":"mjesun"},{"email":"aaron@abramov.io","name":"aaronabramov"},{"email":"jean@lauliac.com","name":"jeanlauliac"},{"email":"christoph.pojer@gmail.com","name":"cpojer"},{"email":"opensource+npm@fb.com","name":"fb"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pretty-format-22.0.2.tgz_1513691584424_0.41861588321626186"},"directories":{}},"22.0.3":{"name":"pretty-format","version":"22.0.3","repository":{"type":"git","url":"git+https://github.com/facebook/jest.git"},"license":"MIT","description":"Stringify any JavaScript value.","main":"build/index.js","browser":"build-es5/index.js","author":{"name":"James Kyle","email":"me@thejameskyle.com"},"dependencies":{"ansi-regex":"^3.0.0","ansi-styles":"^3.2.0"},"bugs":{"url":"https://github.com/facebook/jest/issues"},"homepage":"https://github.com/facebook/jest#readme","_id":"pretty-format@22.0.3","_npmVersion":"5.6.0","_nodeVersion":"9.2.1","_npmUser":{"name":"cpojer","email":"christoph.pojer@gmail.com"},"dist":{"integrity":"sha512-qXbDFJ2/Kk3HFIaLdOblbsCKQ09kZu4MKbXB+m/EaqD7PZ/wXe2XcRREmQleMh4wmerxlma6eJTh3nxCXYUmmA==","shasum":"a2bfa59fc33ad24aa4429981bb52524b41ba5dd7","tarball":"http://localhost:4545/npm/registry/pretty-format/pretty-format-22.0.3.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC4S+gAZ4JKDzxIgJqnpXFTvg9S+G4ngy1A+8ZERc6PFQIhAJf5o8JARGfZwAexdzspjeql75g16zZdIMlKD3Hg4K75"}]},"maintainers":[{"email":"mjesun@hotmail.com","name":"mjesun"},{"email":"aaron@abramov.io","name":"aaronabramov"},{"email":"jean@lauliac.com","name":"jeanlauliac"},{"email":"christoph.pojer@gmail.com","name":"cpojer"},{"email":"opensource+npm@fb.com","name":"fb"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pretty-format-22.0.3.tgz_1513695534694_0.9589479956775904"},"directories":{}},"22.0.5":{"name":"pretty-format","version":"22.0.5","repository":{"type":"git","url":"git+https://github.com/facebook/jest.git"},"license":"MIT","description":"Stringify any JavaScript value.","main":"build/index.js","browser":"build-es5/index.js","author":{"name":"James Kyle","email":"me@thejameskyle.com"},"dependencies":{"ansi-regex":"^3.0.0","ansi-styles":"^3.2.0"},"bugs":{"url":"https://github.com/facebook/jest/issues"},"homepage":"https://github.com/facebook/jest#readme","_id":"pretty-format@22.0.5","_npmVersion":"5.5.1","_nodeVersion":"8.9.1","_npmUser":{"name":"mjesun","email":"mjesun@hotmail.com"},"dist":{"integrity":"sha512-kWls6NjFrwueDmrTq0qtXxDn/fiAica59J+C4lpE6mfeUYeg6gMR/4TH6ahz/Ceqh8O09au8Qe7TYRyDqT8NvQ==","shasum":"8bad3f12b2b84c76fc57a976bde6770eb4043c69","tarball":"http://localhost:4545/npm/registry/pretty-format/pretty-format-22.0.5.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDrogp9+2R7PoqGWrVECPQQ0IJK33rU+d9AKuOy90bPsQIgfRvrqFt5ybPRvdsUc9OH5clgoyCZzULHMFyva5sP/Fo="}]},"maintainers":[{"email":"mjesun@hotmail.com","name":"mjesun"},{"email":"aaron@abramov.io","name":"aaronabramov"},{"email":"jean@lauliac.com","name":"jeanlauliac"},{"email":"christoph.pojer@gmail.com","name":"cpojer"},{"email":"opensource+npm@fb.com","name":"fb"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pretty-format-22.0.5.tgz_1515510592727_0.8857751328032464"},"directories":{}},"22.0.6":{"name":"pretty-format","version":"22.0.6","repository":{"type":"git","url":"git+https://github.com/facebook/jest.git"},"license":"MIT","description":"Stringify any JavaScript value.","main":"build/index.js","browser":"build-es5/index.js","author":{"name":"James Kyle","email":"me@thejameskyle.com"},"dependencies":{"ansi-regex":"^3.0.0","ansi-styles":"^3.2.0"},"bugs":{"url":"https://github.com/facebook/jest/issues"},"homepage":"https://github.com/facebook/jest#readme","_id":"pretty-format@22.0.6","_npmVersion":"5.6.0","_nodeVersion":"9.3.0","_npmUser":{"name":"cpojer","email":"christoph.pojer@gmail.com"},"dist":{"integrity":"sha512-U7vmPaahWJapEjMbqvHK4D0k7Cux2S1qHsXI5UHwdRK4gidtT0fFwFU3nutg3Ho8b7s5ikN0HVYNaHOjpRiY4g==","shasum":"bbb78e38445f263c2d3b9e281f4b844380990720","tarball":"http://localhost:4545/npm/registry/pretty-format/pretty-format-22.0.6.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDMfUt5v+9wkawapbD6j5y4ZGgnSgZjxKHSb5/o3bL/UAIhAMTYFEtJryO64+GPWfHuBXgzgLa8yOMPaXGTJe01BWuJ"}]},"maintainers":[{"email":"mjesun@hotmail.com","name":"mjesun"},{"email":"aaron@abramov.io","name":"aaronabramov"},{"email":"jean@lauliac.com","name":"jeanlauliac"},{"email":"christoph.pojer@gmail.com","name":"cpojer"},{"email":"opensource+npm@fb.com","name":"fb"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pretty-format-22.0.6.tgz_1515664005346_0.2216013662982732"},"directories":{}},"22.1.0":{"name":"pretty-format","version":"22.1.0","repository":{"type":"git","url":"git+https://github.com/facebook/jest.git"},"license":"MIT","description":"Stringify any JavaScript value.","main":"build/index.js","browser":"build-es5/index.js","author":{"name":"James Kyle","email":"me@thejameskyle.com"},"dependencies":{"ansi-regex":"^3.0.0","ansi-styles":"^3.2.0"},"bugs":{"url":"https://github.com/facebook/jest/issues"},"homepage":"https://github.com/facebook/jest#readme","_id":"pretty-format@22.1.0","_npmVersion":"5.6.0","_nodeVersion":"9.4.0","_npmUser":{"name":"cpojer","email":"christoph.pojer@gmail.com"},"dist":{"integrity":"sha512-0HHR5hCmjDGU4sez3w5zRDAAwn7V0vT4SgPiYPZ1XDm5sT3Icb+Bh+fsOP3+Y3UwPjMr7TbRj+L7eQyMkPAxAw==","shasum":"2277605b40ed4529ae4db51ff62f4be817647914","tarball":"http://localhost:4545/npm/registry/pretty-format/pretty-format-22.1.0.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCjUwW3whQc5hKcwSnRBpUNY69d1KyDVZyod92nT2QJ4AIhAIKhXLB6h2U5WN29JuwosCplho7JG7X5n99Pp+KzuYsl"}]},"maintainers":[{"email":"mjesun@hotmail.com","name":"mjesun"},{"email":"aaron@abramov.io","name":"aaronabramov"},{"email":"jean@lauliac.com","name":"jeanlauliac"},{"email":"christoph.pojer@gmail.com","name":"cpojer"},{"email":"opensource+npm@fb.com","name":"fb"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pretty-format-22.1.0.tgz_1516017435817_0.08602811326272786"},"directories":{}},"22.4.0":{"name":"pretty-format","version":"22.4.0","repository":{"type":"git","url":"git+https://github.com/facebook/jest.git"},"license":"MIT","description":"Stringify any JavaScript value.","main":"build/index.js","browser":"build-es5/index.js","author":{"name":"James Kyle","email":"me@thejameskyle.com"},"dependencies":{"ansi-regex":"^3.0.0","ansi-styles":"^3.2.0"},"bugs":{"url":"https://github.com/facebook/jest/issues"},"homepage":"https://github.com/facebook/jest#readme","_id":"pretty-format@22.4.0","_npmVersion":"5.5.1","_nodeVersion":"8.9.1","_npmUser":{"name":"mjesun","email":"mjesun@hotmail.com"},"dist":{"integrity":"sha512-pvCxP2iODIIk9adXlo4S3GRj0BrJiil68kByAa1PrgG97c1tClh9dLMgp3Z6cHFZrclaABt0UH8PIhwHuFLqYA==","shasum":"237b1f7e1c50ed03bc65c03ccc29d7c8bb7beb94","tarball":"http://localhost:4545/npm/registry/pretty-format/pretty-format-22.4.0.tgz","fileCount":16,"unpackedSize":433375,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCID0mvgb4znh31xNwG735JaQfyed3qrQw17jw5s/FaekCAiAcrs5W7iES/2FECkaJOIv37XSRgndp+wNeldOkhxq6+w=="}]},"maintainers":[{"email":"aaron@abramov.io","name":"aaronabramov"},{"email":"christoph.pojer@gmail.com","name":"cpojer"},{"email":"opensource+npm@fb.com","name":"fb"},{"email":"jean@lauliac.com","name":"jeanlauliac"},{"email":"mjesun@hotmail.com","name":"mjesun"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pretty-format_22.4.0_1519128211238_0.3710352585898531"},"_hasShrinkwrap":false},"22.4.3":{"name":"pretty-format","version":"22.4.3","repository":{"type":"git","url":"git+https://github.com/facebook/jest.git"},"license":"MIT","description":"Stringify any JavaScript value.","main":"build/index.js","browser":"build-es5/index.js","author":{"name":"James Kyle","email":"me@thejameskyle.com"},"dependencies":{"ansi-regex":"^3.0.0","ansi-styles":"^3.2.0"},"bugs":{"url":"https://github.com/facebook/jest/issues"},"homepage":"https://github.com/facebook/jest#readme","_id":"pretty-format@22.4.3","_npmVersion":"5.5.1","_nodeVersion":"8.9.1","_npmUser":{"name":"mjesun","email":"mjesun@hotmail.com"},"dist":{"integrity":"sha512-S4oT9/sT6MN7/3COoOy+ZJeA92VmOnveLHgrwBE3Z1W5N9S2A1QGNYiE1z75DAENbJrXXUb+OWXhpJcg05QKQQ==","shasum":"f873d780839a9c02e9664c8a082e9ee79eaac16f","tarball":"http://localhost:4545/npm/registry/pretty-format/pretty-format-22.4.3.tgz","fileCount":16,"unpackedSize":428862,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDHlzziPHmTCBgicxw6PA8WwsAlj8ghcUbP3GHN4Bc4oAIhAJCfhwFim2q4TmOHE6q15E4MobMHCxnADGAaj3klk49C"}]},"maintainers":[{"email":"aaron@abramov.io","name":"aaronabramov"},{"email":"christoph.pojer@gmail.com","name":"cpojer"},{"email":"opensource+npm@fb.com","name":"fb"},{"email":"jean@lauliac.com","name":"jeanlauliac"},{"email":"mjesun@hotmail.com","name":"mjesun"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pretty-format_22.4.3_1521648490562_0.8268179225620371"},"_hasShrinkwrap":false},"23.0.0-alpha.2":{"name":"pretty-format","version":"23.0.0-alpha.2","repository":{"type":"git","url":"https://github.com/facebook/jest.git"},"license":"MIT","description":"Stringify any JavaScript value.","main":"build/index.js","browser":"build-es5/index.js","author":{"name":"James Kyle","email":"me@thejameskyle.com"},"dependencies":{"ansi-regex":"^3.0.0","ansi-styles":"^3.2.0"},"readmeFilename":"README.md","readme":"# pretty-format\n\n> Stringify any JavaScript value.\n\n* Supports all built-in JavaScript types\n * primitive types: `Boolean`, `null`, `Number`, `String`, `Symbol`,\n `undefined`\n * other non-collection types: `Date`, `Error`, `Function`, `RegExp`\n * collection types:\n * `arguments`, `Array`, `ArrayBuffer`, `DataView`, `Float32Array`,\n `Float64Array`, `Int8Array`, `Int16Array`, `Int32Array`, `Uint8Array`,\n `Uint8ClampedArray`, `Uint16Array`, `Uint32Array`,\n * `Map`, `Set`, `WeakMap`, `WeakSet`\n * `Object`\n* [Blazingly fast](https://gist.github.com/thejameskyle/2b04ffe4941aafa8f970de077843a8fd)\n * similar performance to `JSON.stringify` in v8\n * significantly faster than `util.format` in Node.js\n* Serialize application-specific data types with built-in or user-defined\n plugins\n\n## Installation\n\n```sh\n$ yarn add pretty-format\n```\n\n## Usage\n\n```js\nconst prettyFormat = require('pretty-format'); // CommonJS\n```\n\n```js\nimport prettyFormat from 'pretty-format'; // ES2015 modules\n```\n\n```js\nconst val = {object: {}};\nval.circularReference = val;\nval[Symbol('foo')] = 'foo';\nval.map = new Map([['prop', 'value']]);\nval.array = [-0, Infinity, NaN];\n\nconsole.log(prettyFormat(val));\n/*\nObject {\n \"array\": Array [\n -0,\n Infinity,\n NaN,\n ],\n \"circularReference\": [Circular],\n \"map\": Map {\n \"prop\" => \"value\",\n },\n \"object\": Object {},\n Symbol(foo): \"foo\",\n}\n*/\n```\n\n## Usage with options\n\n```js\nfunction onClick() {}\n\nconsole.log(prettyFormat(onClick));\n/*\n[Function onClick]\n*/\n\nconst options = {\n printFunctionName: false,\n};\nconsole.log(prettyFormat(onClick, options));\n/*\n[Function]\n*/\n```\n\n| key | type | default | description |\n| :------------------ | :-------- | :--------- | :------------------------------------------------------ |\n| `callToJSON` | `boolean` | `true` | call `toJSON` method (if it exists) on objects |\n| `escapeRegex` | `boolean` | `false` | escape special characters in regular expressions |\n| `highlight` | `boolean` | `false` | highlight syntax with colors in terminal (some plugins) |\n| `indent` | `number` | `2` | spaces in each level of indentation |\n| `maxDepth` | `number` | `Infinity` | levels to print in arrays, objects, elements, and so on |\n| `min` | `boolean` | `false` | minimize added space: no indentation nor line breaks |\n| `plugins` | `array` | `[]` | plugins to serialize application-specific data types |\n| `printFunctionName` | `boolean` | `true` | include or omit the name of a function |\n| `theme` | `object` | | colors to highlight syntax in terminal |\n\nProperty values of `theme` are from\n[ansi-styles colors](https://github.com/chalk/ansi-styles#colors)\n\n```js\nconst DEFAULT_THEME = {\n comment: 'gray',\n content: 'reset',\n prop: 'yellow',\n tag: 'cyan',\n value: 'green',\n};\n```\n\n## Usage with plugins\n\nThe `pretty-format` package provides some built-in plugins, including:\n\n* `ReactElement` for elements from `react`\n* `ReactTestComponent` for test objects from `react-test-renderer`\n\n```js\n// CommonJS\nconst prettyFormat = require('pretty-format');\nconst ReactElement = prettyFormat.plugins.ReactElement;\nconst ReactTestComponent = prettyFormat.plugins.ReactTestComponent;\n\nconst React = require('react');\nconst renderer = require('react-test-renderer');\n```\n\n```js\n// ES2015 modules and destructuring assignment\nimport prettyFormat from 'pretty-format';\nconst {ReactElement, ReactTestComponent} = prettyFormat.plugins;\n\nimport React from 'react';\nimport renderer from 'react-test-renderer';\n```\n\n```js\nconst onClick = () => {};\nconst element = React.createElement('button', {onClick}, 'Hello World');\n\nconst formatted1 = prettyFormat(element, {\n plugins: [ReactElement],\n printFunctionName: false,\n});\nconst formatted2 = prettyFormat(renderer.create(element).toJSON(), {\n plugins: [ReactTestComponent],\n printFunctionName: false,\n});\n/*\n\n*/\n```\n\n## Usage in Jest\n\nFor snapshot tests, Jest uses `pretty-format` with options that include some of\nits built-in plugins. For this purpose, plugins are also known as **snapshot\nserializers**.\n\nTo serialize application-specific data types, you can add modules to\n`devDependencies` of a project, and then:\n\nIn an **individual** test file, you can add a module as follows. It precedes any\nmodules from Jest configuration.\n\n```js\nimport serializer from 'my-serializer-module';\nexpect.addSnapshotSerializer(serializer);\n\n// tests which have `expect(value).toMatchSnapshot()` assertions\n```\n\nFor **all** test files, you can specify modules in Jest configuration. They\nprecede built-in plugins for React, HTML, and Immutable.js data types. For\nexample, in a `package.json` file:\n\n```json\n{\n \"jest\": {\n \"snapshotSerializers\": [\"my-serializer-module\"]\n }\n}\n```\n\n## Writing plugins\n\nA plugin is a JavaScript object.\n\nIf `options` has a `plugins` array: for the first plugin whose `test(val)`\nmethod returns a truthy value, then `prettyFormat(val, options)` returns the\nresult from either:\n\n* `serialize(val, …)` method of the **improved** interface (available in\n **version 21** or later)\n* `print(val, …)` method of the **original** interface (if plugin does not have\n `serialize` method)\n\n### test\n\nWrite `test` so it can receive `val` argument of any type. To serialize\n**objects** which have certain properties, then a guarded expression like\n`val != null && …` or more concise `val && …` prevents the following errors:\n\n* `TypeError: Cannot read property 'whatever' of null`\n* `TypeError: Cannot read property 'whatever' of undefined`\n\nFor example, `test` method of built-in `ReactElement` plugin:\n\n```js\nconst elementSymbol = Symbol.for('react.element');\nconst test = val => val && val.$$typeof === elementSymbol;\n```\n\nPay attention to efficiency in `test` because `pretty-format` calls it often.\n\n### serialize\n\nThe **improved** interface is available in **version 21** or later.\n\nWrite `serialize` to return a string, given the arguments:\n\n* `val` which “passed the test”\n* unchanging `config` object: derived from `options`\n* current `indentation` string: concatenate to `indent` from `config`\n* current `depth` number: compare to `maxDepth` from `config`\n* current `refs` array: find circular references in objects\n* `printer` callback function: serialize children\n\n### config\n\n| key | type | description |\n| :------------------ | :-------- | :------------------------------------------------------ |\n| `callToJSON` | `boolean` | call `toJSON` method (if it exists) on objects |\n| `colors` | `Object` | escape codes for colors to highlight syntax |\n| `escapeRegex` | `boolean` | escape special characters in regular expressions |\n| `indent` | `string` | spaces in each level of indentation |\n| `maxDepth` | `number` | levels to print in arrays, objects, elements, and so on |\n| `min` | `boolean` | minimize added space: no indentation nor line breaks |\n| `plugins` | `array` | plugins to serialize application-specific data types |\n| `printFunctionName` | `boolean` | include or omit the name of a function |\n| `spacingInner` | `strong` | spacing to separate items in a list |\n| `spacingOuter` | `strong` | spacing to enclose a list of items |\n\nEach property of `colors` in `config` corresponds to a property of `theme` in\n`options`:\n\n* the key is the same (for example, `tag`)\n* the value in `colors` is a object with `open` and `close` properties whose\n values are escape codes from\n [ansi-styles](https://github.com/chalk/ansi-styles) for the color value in\n `theme` (for example, `'cyan'`)\n\nSome properties in `config` are derived from `min` in `options`:\n\n* `spacingInner` and `spacingOuter` are **newline** if `min` is `false`\n* `spacingInner` is **space** and `spacingOuter` is **empty string** if `min` is\n `true`\n\n### Example of serialize and test\n\nThis plugin is a pattern you can apply to serialize composite data types. Of\ncourse, `pretty-format` does not need a plugin to serialize arrays :)\n\n```js\n// We reused more code when we factored out a function for child items\n// that is independent of depth, name, and enclosing punctuation (see below).\nconst SEPARATOR = ',';\nfunction serializeItems(items, config, indentation, depth, refs, printer) {\n if (items.length === 0) {\n return '';\n }\n const indentationItems = indentation + config.indent;\n return (\n config.spacingOuter +\n items\n .map(\n item =>\n indentationItems +\n printer(item, config, indentationItems, depth, refs), // callback\n )\n .join(SEPARATOR + config.spacingInner) +\n (config.min ? '' : SEPARATOR) + // following the last item\n config.spacingOuter +\n indentation\n );\n}\n\nconst plugin = {\n test(val) {\n return Array.isArray(val);\n },\n serialize(array, config, indentation, depth, refs, printer) {\n const name = array.constructor.name;\n return ++depth > config.maxDepth\n ? '[' + name + ']'\n : (config.min ? '' : name + ' ') +\n '[' +\n serializeItems(array, config, indentation, depth, refs, printer) +\n ']';\n },\n};\n```\n\n```js\nconst val = {\n filter: 'completed',\n items: [\n {\n text: 'Write test',\n completed: true,\n },\n {\n text: 'Write serialize',\n completed: true,\n },\n ],\n};\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n plugins: [plugin],\n }),\n);\n/*\nObject {\n \"filter\": \"completed\",\n \"items\": Array [\n Object {\n \"completed\": true,\n \"text\": \"Write test\",\n },\n Object {\n \"completed\": true,\n \"text\": \"Write serialize\",\n },\n ],\n}\n*/\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n indent: 4,\n plugins: [plugin],\n }),\n);\n/*\nObject {\n \"filter\": \"completed\",\n \"items\": Array [\n Object {\n \"completed\": true,\n \"text\": \"Write test\",\n },\n Object {\n \"completed\": true,\n \"text\": \"Write serialize\",\n },\n ],\n}\n*/\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n maxDepth: 1,\n plugins: [plugin],\n }),\n);\n/*\nObject {\n \"filter\": \"completed\",\n \"items\": [Array],\n}\n*/\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n min: true,\n plugins: [plugin],\n }),\n);\n/*\n{\"filter\": \"completed\", \"items\": [{\"completed\": true, \"text\": \"Write test\"}, {\"completed\": true, \"text\": \"Write serialize\"}]}\n*/\n```\n\n### print\n\nThe **original** interface is adequate for plugins:\n\n* that **do not** depend on options other than `highlight` or `min`\n* that **do not** depend on `depth` or `refs` in recursive traversal, and\n* if values either\n * do **not** require indentation, or\n * do **not** occur as children of JavaScript data structures (for example,\n array)\n\nWrite `print` to return a string, given the arguments:\n\n* `val` which “passed the test”\n* current `printer(valChild)` callback function: serialize children\n* current `indenter(lines)` callback function: indent lines at the next level\n* unchanging `config` object: derived from `options`\n* unchanging `colors` object: derived from `options`\n\nThe 3 properties of `config` are `min` in `options` and:\n\n* `spacing` and `edgeSpacing` are **newline** if `min` is `false`\n* `spacing` is **space** and `edgeSpacing` is **empty string** if `min` is\n `true`\n\nEach property of `colors` corresponds to a property of `theme` in `options`:\n\n* the key is the same (for example, `tag`)\n* the value in `colors` is a object with `open` and `close` properties whose\n values are escape codes from\n [ansi-styles](https://github.com/chalk/ansi-styles) for the color value in\n `theme` (for example, `'cyan'`)\n\n### Example of print and test\n\nThis plugin prints functions with the **number of named arguments** excluding\nrest argument.\n\n```js\nconst plugin = {\n print(val) {\n return `[Function ${val.name || 'anonymous'} ${val.length}]`;\n },\n test(val) {\n return typeof val === 'function';\n },\n};\n```\n\n```js\nconst val = {\n onClick(event) {},\n render() {},\n};\n\nprettyFormat(val, {\n plugins: [plugin],\n});\n/*\nObject {\n \"onClick\": [Function onClick 1],\n \"render\": [Function render 0],\n}\n*/\n\nprettyFormat(val);\n/*\nObject {\n \"onClick\": [Function onClick],\n \"render\": [Function render],\n}\n*/\n```\n\nThis plugin **ignores** the `printFunctionName` option. That limitation of the\noriginal `print` interface is a reason to use the improved `serialize`\ninterface, described above.\n\n```js\nprettyFormat(val, {\n plugins: [pluginOld],\n printFunctionName: false,\n});\n/*\nObject {\n \"onClick\": [Function onClick 1],\n \"render\": [Function render 0],\n}\n*/\n\nprettyFormat(val, {\n printFunctionName: false,\n});\n/*\nObject {\n \"onClick\": [Function],\n \"render\": [Function],\n}\n*/\n```\n","_id":"pretty-format@23.0.0-alpha.2","dist":{"shasum":"c16ab6df05ae34b94536f9aa193ba642db2f9b3c","tarball":"http://localhost:4545/npm/registry/pretty-format/pretty-format-23.0.0-alpha.2.tgz","fileCount":23,"unpackedSize":427160,"integrity":"sha512-HvJZMzGWFa20SW8lqIPYbpwJx8jY2dajPRqmqBgRD1Z3Upm0XYHRfTGA1eTSocCvXzcSYsQ4IE3p6fBhstXhiA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCbCfrKqF/HG41cXouu50caisB/QDryaAs4Momc1xxtgQIhAIyZlgWosO6csbWpkpm7GEPWUE5YAhlgHuYbAWOZVFJH"}]},"maintainers":[{"email":"aaron@abramov.io","name":"aaronabramov"},{"email":"christoph.pojer@gmail.com","name":"cpojer"},{"email":"opensource+npm@fb.com","name":"fb"},{"email":"jean@lauliac.com","name":"jeanlauliac"},{"email":"mjesun@hotmail.com","name":"mjesun"}],"_npmUser":{"name":"mjesun","email":"mjesun@hotmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pretty-format_23.0.0-alpha.2_1522060847231_0.13993785091764677"},"_hasShrinkwrap":false},"23.0.0-alpha.4":{"name":"pretty-format","version":"23.0.0-alpha.4","repository":{"type":"git","url":"https://github.com/facebook/jest.git"},"license":"MIT","description":"Stringify any JavaScript value.","main":"build/index.js","browser":"build-es5/index.js","author":{"name":"James Kyle","email":"me@thejameskyle.com"},"dependencies":{"ansi-regex":"^3.0.0","ansi-styles":"^3.2.0"},"readmeFilename":"README.md","readme":"# pretty-format\n\n> Stringify any JavaScript value.\n\n* Supports all built-in JavaScript types\n * primitive types: `Boolean`, `null`, `Number`, `String`, `Symbol`,\n `undefined`\n * other non-collection types: `Date`, `Error`, `Function`, `RegExp`\n * collection types:\n * `arguments`, `Array`, `ArrayBuffer`, `DataView`, `Float32Array`,\n `Float64Array`, `Int8Array`, `Int16Array`, `Int32Array`, `Uint8Array`,\n `Uint8ClampedArray`, `Uint16Array`, `Uint32Array`,\n * `Map`, `Set`, `WeakMap`, `WeakSet`\n * `Object`\n* [Blazingly fast](https://gist.github.com/thejameskyle/2b04ffe4941aafa8f970de077843a8fd)\n * similar performance to `JSON.stringify` in v8\n * significantly faster than `util.format` in Node.js\n* Serialize application-specific data types with built-in or user-defined\n plugins\n\n## Installation\n\n```sh\n$ yarn add pretty-format\n```\n\n## Usage\n\n```js\nconst prettyFormat = require('pretty-format'); // CommonJS\n```\n\n```js\nimport prettyFormat from 'pretty-format'; // ES2015 modules\n```\n\n```js\nconst val = {object: {}};\nval.circularReference = val;\nval[Symbol('foo')] = 'foo';\nval.map = new Map([['prop', 'value']]);\nval.array = [-0, Infinity, NaN];\n\nconsole.log(prettyFormat(val));\n/*\nObject {\n \"array\": Array [\n -0,\n Infinity,\n NaN,\n ],\n \"circularReference\": [Circular],\n \"map\": Map {\n \"prop\" => \"value\",\n },\n \"object\": Object {},\n Symbol(foo): \"foo\",\n}\n*/\n```\n\n## Usage with options\n\n```js\nfunction onClick() {}\n\nconsole.log(prettyFormat(onClick));\n/*\n[Function onClick]\n*/\n\nconst options = {\n printFunctionName: false,\n};\nconsole.log(prettyFormat(onClick, options));\n/*\n[Function]\n*/\n```\n\n| key | type | default | description |\n| :------------------ | :-------- | :--------- | :------------------------------------------------------ |\n| `callToJSON` | `boolean` | `true` | call `toJSON` method (if it exists) on objects |\n| `escapeRegex` | `boolean` | `false` | escape special characters in regular expressions |\n| `highlight` | `boolean` | `false` | highlight syntax with colors in terminal (some plugins) |\n| `indent` | `number` | `2` | spaces in each level of indentation |\n| `maxDepth` | `number` | `Infinity` | levels to print in arrays, objects, elements, and so on |\n| `min` | `boolean` | `false` | minimize added space: no indentation nor line breaks |\n| `plugins` | `array` | `[]` | plugins to serialize application-specific data types |\n| `printFunctionName` | `boolean` | `true` | include or omit the name of a function |\n| `theme` | `object` | | colors to highlight syntax in terminal |\n\nProperty values of `theme` are from\n[ansi-styles colors](https://github.com/chalk/ansi-styles#colors)\n\n```js\nconst DEFAULT_THEME = {\n comment: 'gray',\n content: 'reset',\n prop: 'yellow',\n tag: 'cyan',\n value: 'green',\n};\n```\n\n## Usage with plugins\n\nThe `pretty-format` package provides some built-in plugins, including:\n\n* `ReactElement` for elements from `react`\n* `ReactTestComponent` for test objects from `react-test-renderer`\n\n```js\n// CommonJS\nconst prettyFormat = require('pretty-format');\nconst ReactElement = prettyFormat.plugins.ReactElement;\nconst ReactTestComponent = prettyFormat.plugins.ReactTestComponent;\n\nconst React = require('react');\nconst renderer = require('react-test-renderer');\n```\n\n```js\n// ES2015 modules and destructuring assignment\nimport prettyFormat from 'pretty-format';\nconst {ReactElement, ReactTestComponent} = prettyFormat.plugins;\n\nimport React from 'react';\nimport renderer from 'react-test-renderer';\n```\n\n```js\nconst onClick = () => {};\nconst element = React.createElement('button', {onClick}, 'Hello World');\n\nconst formatted1 = prettyFormat(element, {\n plugins: [ReactElement],\n printFunctionName: false,\n});\nconst formatted2 = prettyFormat(renderer.create(element).toJSON(), {\n plugins: [ReactTestComponent],\n printFunctionName: false,\n});\n/*\n\n*/\n```\n\n## Usage in Jest\n\nFor snapshot tests, Jest uses `pretty-format` with options that include some of\nits built-in plugins. For this purpose, plugins are also known as **snapshot\nserializers**.\n\nTo serialize application-specific data types, you can add modules to\n`devDependencies` of a project, and then:\n\nIn an **individual** test file, you can add a module as follows. It precedes any\nmodules from Jest configuration.\n\n```js\nimport serializer from 'my-serializer-module';\nexpect.addSnapshotSerializer(serializer);\n\n// tests which have `expect(value).toMatchSnapshot()` assertions\n```\n\nFor **all** test files, you can specify modules in Jest configuration. They\nprecede built-in plugins for React, HTML, and Immutable.js data types. For\nexample, in a `package.json` file:\n\n```json\n{\n \"jest\": {\n \"snapshotSerializers\": [\"my-serializer-module\"]\n }\n}\n```\n\n## Writing plugins\n\nA plugin is a JavaScript object.\n\nIf `options` has a `plugins` array: for the first plugin whose `test(val)`\nmethod returns a truthy value, then `prettyFormat(val, options)` returns the\nresult from either:\n\n* `serialize(val, …)` method of the **improved** interface (available in\n **version 21** or later)\n* `print(val, …)` method of the **original** interface (if plugin does not have\n `serialize` method)\n\n### test\n\nWrite `test` so it can receive `val` argument of any type. To serialize\n**objects** which have certain properties, then a guarded expression like\n`val != null && …` or more concise `val && …` prevents the following errors:\n\n* `TypeError: Cannot read property 'whatever' of null`\n* `TypeError: Cannot read property 'whatever' of undefined`\n\nFor example, `test` method of built-in `ReactElement` plugin:\n\n```js\nconst elementSymbol = Symbol.for('react.element');\nconst test = val => val && val.$$typeof === elementSymbol;\n```\n\nPay attention to efficiency in `test` because `pretty-format` calls it often.\n\n### serialize\n\nThe **improved** interface is available in **version 21** or later.\n\nWrite `serialize` to return a string, given the arguments:\n\n* `val` which “passed the test”\n* unchanging `config` object: derived from `options`\n* current `indentation` string: concatenate to `indent` from `config`\n* current `depth` number: compare to `maxDepth` from `config`\n* current `refs` array: find circular references in objects\n* `printer` callback function: serialize children\n\n### config\n\n| key | type | description |\n| :------------------ | :-------- | :------------------------------------------------------ |\n| `callToJSON` | `boolean` | call `toJSON` method (if it exists) on objects |\n| `colors` | `Object` | escape codes for colors to highlight syntax |\n| `escapeRegex` | `boolean` | escape special characters in regular expressions |\n| `indent` | `string` | spaces in each level of indentation |\n| `maxDepth` | `number` | levels to print in arrays, objects, elements, and so on |\n| `min` | `boolean` | minimize added space: no indentation nor line breaks |\n| `plugins` | `array` | plugins to serialize application-specific data types |\n| `printFunctionName` | `boolean` | include or omit the name of a function |\n| `spacingInner` | `strong` | spacing to separate items in a list |\n| `spacingOuter` | `strong` | spacing to enclose a list of items |\n\nEach property of `colors` in `config` corresponds to a property of `theme` in\n`options`:\n\n* the key is the same (for example, `tag`)\n* the value in `colors` is a object with `open` and `close` properties whose\n values are escape codes from\n [ansi-styles](https://github.com/chalk/ansi-styles) for the color value in\n `theme` (for example, `'cyan'`)\n\nSome properties in `config` are derived from `min` in `options`:\n\n* `spacingInner` and `spacingOuter` are **newline** if `min` is `false`\n* `spacingInner` is **space** and `spacingOuter` is **empty string** if `min` is\n `true`\n\n### Example of serialize and test\n\nThis plugin is a pattern you can apply to serialize composite data types. Of\ncourse, `pretty-format` does not need a plugin to serialize arrays :)\n\n```js\n// We reused more code when we factored out a function for child items\n// that is independent of depth, name, and enclosing punctuation (see below).\nconst SEPARATOR = ',';\nfunction serializeItems(items, config, indentation, depth, refs, printer) {\n if (items.length === 0) {\n return '';\n }\n const indentationItems = indentation + config.indent;\n return (\n config.spacingOuter +\n items\n .map(\n item =>\n indentationItems +\n printer(item, config, indentationItems, depth, refs), // callback\n )\n .join(SEPARATOR + config.spacingInner) +\n (config.min ? '' : SEPARATOR) + // following the last item\n config.spacingOuter +\n indentation\n );\n}\n\nconst plugin = {\n test(val) {\n return Array.isArray(val);\n },\n serialize(array, config, indentation, depth, refs, printer) {\n const name = array.constructor.name;\n return ++depth > config.maxDepth\n ? '[' + name + ']'\n : (config.min ? '' : name + ' ') +\n '[' +\n serializeItems(array, config, indentation, depth, refs, printer) +\n ']';\n },\n};\n```\n\n```js\nconst val = {\n filter: 'completed',\n items: [\n {\n text: 'Write test',\n completed: true,\n },\n {\n text: 'Write serialize',\n completed: true,\n },\n ],\n};\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n plugins: [plugin],\n }),\n);\n/*\nObject {\n \"filter\": \"completed\",\n \"items\": Array [\n Object {\n \"completed\": true,\n \"text\": \"Write test\",\n },\n Object {\n \"completed\": true,\n \"text\": \"Write serialize\",\n },\n ],\n}\n*/\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n indent: 4,\n plugins: [plugin],\n }),\n);\n/*\nObject {\n \"filter\": \"completed\",\n \"items\": Array [\n Object {\n \"completed\": true,\n \"text\": \"Write test\",\n },\n Object {\n \"completed\": true,\n \"text\": \"Write serialize\",\n },\n ],\n}\n*/\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n maxDepth: 1,\n plugins: [plugin],\n }),\n);\n/*\nObject {\n \"filter\": \"completed\",\n \"items\": [Array],\n}\n*/\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n min: true,\n plugins: [plugin],\n }),\n);\n/*\n{\"filter\": \"completed\", \"items\": [{\"completed\": true, \"text\": \"Write test\"}, {\"completed\": true, \"text\": \"Write serialize\"}]}\n*/\n```\n\n### print\n\nThe **original** interface is adequate for plugins:\n\n* that **do not** depend on options other than `highlight` or `min`\n* that **do not** depend on `depth` or `refs` in recursive traversal, and\n* if values either\n * do **not** require indentation, or\n * do **not** occur as children of JavaScript data structures (for example,\n array)\n\nWrite `print` to return a string, given the arguments:\n\n* `val` which “passed the test”\n* current `printer(valChild)` callback function: serialize children\n* current `indenter(lines)` callback function: indent lines at the next level\n* unchanging `config` object: derived from `options`\n* unchanging `colors` object: derived from `options`\n\nThe 3 properties of `config` are `min` in `options` and:\n\n* `spacing` and `edgeSpacing` are **newline** if `min` is `false`\n* `spacing` is **space** and `edgeSpacing` is **empty string** if `min` is\n `true`\n\nEach property of `colors` corresponds to a property of `theme` in `options`:\n\n* the key is the same (for example, `tag`)\n* the value in `colors` is a object with `open` and `close` properties whose\n values are escape codes from\n [ansi-styles](https://github.com/chalk/ansi-styles) for the color value in\n `theme` (for example, `'cyan'`)\n\n### Example of print and test\n\nThis plugin prints functions with the **number of named arguments** excluding\nrest argument.\n\n```js\nconst plugin = {\n print(val) {\n return `[Function ${val.name || 'anonymous'} ${val.length}]`;\n },\n test(val) {\n return typeof val === 'function';\n },\n};\n```\n\n```js\nconst val = {\n onClick(event) {},\n render() {},\n};\n\nprettyFormat(val, {\n plugins: [plugin],\n});\n/*\nObject {\n \"onClick\": [Function onClick 1],\n \"render\": [Function render 0],\n}\n*/\n\nprettyFormat(val);\n/*\nObject {\n \"onClick\": [Function onClick],\n \"render\": [Function render],\n}\n*/\n```\n\nThis plugin **ignores** the `printFunctionName` option. That limitation of the\noriginal `print` interface is a reason to use the improved `serialize`\ninterface, described above.\n\n```js\nprettyFormat(val, {\n plugins: [pluginOld],\n printFunctionName: false,\n});\n/*\nObject {\n \"onClick\": [Function onClick 1],\n \"render\": [Function render 0],\n}\n*/\n\nprettyFormat(val, {\n printFunctionName: false,\n});\n/*\nObject {\n \"onClick\": [Function],\n \"render\": [Function],\n}\n*/\n```\n","_id":"pretty-format@23.0.0-alpha.4","dist":{"shasum":"50990fdbbdfe353da0c1046d965f3c5c9b98866e","tarball":"http://localhost:4545/npm/registry/pretty-format/pretty-format-23.0.0-alpha.4.tgz","fileCount":23,"unpackedSize":430490,"integrity":"sha512-pLE0Zli83OyhZXOfG6MyJ0AzyNVkN6p7/491eR1J9b9/6xr1u4ICcz+5grHZkp6v0+A/IVz3a5RiCDO5b8PsAA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDvak5wIM7dQnFhSO0BlW4M9DqTji6WM58YD4T17UW4xwIge07uStss0J6qQuGuzqWEwTBCvennREUEg/3vaHK/01Y="}]},"maintainers":[{"email":"aaron@abramov.io","name":"aaronabramov"},{"email":"christoph.pojer@gmail.com","name":"cpojer"},{"email":"opensource+npm@fb.com","name":"fb"},{"email":"jean@lauliac.com","name":"jeanlauliac"},{"email":"mjesun@hotmail.com","name":"mjesun"}],"_npmUser":{"name":"mjesun","email":"mjesun@hotmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pretty-format_23.0.0-alpha.4_1522067501793_0.4253621525737654"},"_hasShrinkwrap":false},"23.0.0-alpha.5":{"name":"pretty-format","version":"23.0.0-alpha.5","repository":{"type":"git","url":"https://github.com/facebook/jest.git"},"license":"MIT","description":"Stringify any JavaScript value.","main":"build/index.js","browser":"build-es5/index.js","author":{"name":"James Kyle","email":"me@thejameskyle.com"},"dependencies":{"ansi-regex":"^3.0.0","ansi-styles":"^3.2.0"},"readmeFilename":"README.md","readme":"# pretty-format\n\n> Stringify any JavaScript value.\n\n* Supports all built-in JavaScript types\n * primitive types: `Boolean`, `null`, `Number`, `String`, `Symbol`,\n `undefined`\n * other non-collection types: `Date`, `Error`, `Function`, `RegExp`\n * collection types:\n * `arguments`, `Array`, `ArrayBuffer`, `DataView`, `Float32Array`,\n `Float64Array`, `Int8Array`, `Int16Array`, `Int32Array`, `Uint8Array`,\n `Uint8ClampedArray`, `Uint16Array`, `Uint32Array`,\n * `Map`, `Set`, `WeakMap`, `WeakSet`\n * `Object`\n* [Blazingly fast](https://gist.github.com/thejameskyle/2b04ffe4941aafa8f970de077843a8fd)\n * similar performance to `JSON.stringify` in v8\n * significantly faster than `util.format` in Node.js\n* Serialize application-specific data types with built-in or user-defined\n plugins\n\n## Installation\n\n```sh\n$ yarn add pretty-format\n```\n\n## Usage\n\n```js\nconst prettyFormat = require('pretty-format'); // CommonJS\n```\n\n```js\nimport prettyFormat from 'pretty-format'; // ES2015 modules\n```\n\n```js\nconst val = {object: {}};\nval.circularReference = val;\nval[Symbol('foo')] = 'foo';\nval.map = new Map([['prop', 'value']]);\nval.array = [-0, Infinity, NaN];\n\nconsole.log(prettyFormat(val));\n/*\nObject {\n \"array\": Array [\n -0,\n Infinity,\n NaN,\n ],\n \"circularReference\": [Circular],\n \"map\": Map {\n \"prop\" => \"value\",\n },\n \"object\": Object {},\n Symbol(foo): \"foo\",\n}\n*/\n```\n\n## Usage with options\n\n```js\nfunction onClick() {}\n\nconsole.log(prettyFormat(onClick));\n/*\n[Function onClick]\n*/\n\nconst options = {\n printFunctionName: false,\n};\nconsole.log(prettyFormat(onClick, options));\n/*\n[Function]\n*/\n```\n\n| key | type | default | description |\n| :------------------ | :-------- | :--------- | :------------------------------------------------------ |\n| `callToJSON` | `boolean` | `true` | call `toJSON` method (if it exists) on objects |\n| `escapeRegex` | `boolean` | `false` | escape special characters in regular expressions |\n| `highlight` | `boolean` | `false` | highlight syntax with colors in terminal (some plugins) |\n| `indent` | `number` | `2` | spaces in each level of indentation |\n| `maxDepth` | `number` | `Infinity` | levels to print in arrays, objects, elements, and so on |\n| `min` | `boolean` | `false` | minimize added space: no indentation nor line breaks |\n| `plugins` | `array` | `[]` | plugins to serialize application-specific data types |\n| `printFunctionName` | `boolean` | `true` | include or omit the name of a function |\n| `theme` | `object` | | colors to highlight syntax in terminal |\n\nProperty values of `theme` are from\n[ansi-styles colors](https://github.com/chalk/ansi-styles#colors)\n\n```js\nconst DEFAULT_THEME = {\n comment: 'gray',\n content: 'reset',\n prop: 'yellow',\n tag: 'cyan',\n value: 'green',\n};\n```\n\n## Usage with plugins\n\nThe `pretty-format` package provides some built-in plugins, including:\n\n* `ReactElement` for elements from `react`\n* `ReactTestComponent` for test objects from `react-test-renderer`\n\n```js\n// CommonJS\nconst prettyFormat = require('pretty-format');\nconst ReactElement = prettyFormat.plugins.ReactElement;\nconst ReactTestComponent = prettyFormat.plugins.ReactTestComponent;\n\nconst React = require('react');\nconst renderer = require('react-test-renderer');\n```\n\n```js\n// ES2015 modules and destructuring assignment\nimport prettyFormat from 'pretty-format';\nconst {ReactElement, ReactTestComponent} = prettyFormat.plugins;\n\nimport React from 'react';\nimport renderer from 'react-test-renderer';\n```\n\n```js\nconst onClick = () => {};\nconst element = React.createElement('button', {onClick}, 'Hello World');\n\nconst formatted1 = prettyFormat(element, {\n plugins: [ReactElement],\n printFunctionName: false,\n});\nconst formatted2 = prettyFormat(renderer.create(element).toJSON(), {\n plugins: [ReactTestComponent],\n printFunctionName: false,\n});\n/*\n\n*/\n```\n\n## Usage in Jest\n\nFor snapshot tests, Jest uses `pretty-format` with options that include some of\nits built-in plugins. For this purpose, plugins are also known as **snapshot\nserializers**.\n\nTo serialize application-specific data types, you can add modules to\n`devDependencies` of a project, and then:\n\nIn an **individual** test file, you can add a module as follows. It precedes any\nmodules from Jest configuration.\n\n```js\nimport serializer from 'my-serializer-module';\nexpect.addSnapshotSerializer(serializer);\n\n// tests which have `expect(value).toMatchSnapshot()` assertions\n```\n\nFor **all** test files, you can specify modules in Jest configuration. They\nprecede built-in plugins for React, HTML, and Immutable.js data types. For\nexample, in a `package.json` file:\n\n```json\n{\n \"jest\": {\n \"snapshotSerializers\": [\"my-serializer-module\"]\n }\n}\n```\n\n## Writing plugins\n\nA plugin is a JavaScript object.\n\nIf `options` has a `plugins` array: for the first plugin whose `test(val)`\nmethod returns a truthy value, then `prettyFormat(val, options)` returns the\nresult from either:\n\n* `serialize(val, …)` method of the **improved** interface (available in\n **version 21** or later)\n* `print(val, …)` method of the **original** interface (if plugin does not have\n `serialize` method)\n\n### test\n\nWrite `test` so it can receive `val` argument of any type. To serialize\n**objects** which have certain properties, then a guarded expression like\n`val != null && …` or more concise `val && …` prevents the following errors:\n\n* `TypeError: Cannot read property 'whatever' of null`\n* `TypeError: Cannot read property 'whatever' of undefined`\n\nFor example, `test` method of built-in `ReactElement` plugin:\n\n```js\nconst elementSymbol = Symbol.for('react.element');\nconst test = val => val && val.$$typeof === elementSymbol;\n```\n\nPay attention to efficiency in `test` because `pretty-format` calls it often.\n\n### serialize\n\nThe **improved** interface is available in **version 21** or later.\n\nWrite `serialize` to return a string, given the arguments:\n\n* `val` which “passed the test”\n* unchanging `config` object: derived from `options`\n* current `indentation` string: concatenate to `indent` from `config`\n* current `depth` number: compare to `maxDepth` from `config`\n* current `refs` array: find circular references in objects\n* `printer` callback function: serialize children\n\n### config\n\n| key | type | description |\n| :------------------ | :-------- | :------------------------------------------------------ |\n| `callToJSON` | `boolean` | call `toJSON` method (if it exists) on objects |\n| `colors` | `Object` | escape codes for colors to highlight syntax |\n| `escapeRegex` | `boolean` | escape special characters in regular expressions |\n| `indent` | `string` | spaces in each level of indentation |\n| `maxDepth` | `number` | levels to print in arrays, objects, elements, and so on |\n| `min` | `boolean` | minimize added space: no indentation nor line breaks |\n| `plugins` | `array` | plugins to serialize application-specific data types |\n| `printFunctionName` | `boolean` | include or omit the name of a function |\n| `spacingInner` | `strong` | spacing to separate items in a list |\n| `spacingOuter` | `strong` | spacing to enclose a list of items |\n\nEach property of `colors` in `config` corresponds to a property of `theme` in\n`options`:\n\n* the key is the same (for example, `tag`)\n* the value in `colors` is a object with `open` and `close` properties whose\n values are escape codes from\n [ansi-styles](https://github.com/chalk/ansi-styles) for the color value in\n `theme` (for example, `'cyan'`)\n\nSome properties in `config` are derived from `min` in `options`:\n\n* `spacingInner` and `spacingOuter` are **newline** if `min` is `false`\n* `spacingInner` is **space** and `spacingOuter` is **empty string** if `min` is\n `true`\n\n### Example of serialize and test\n\nThis plugin is a pattern you can apply to serialize composite data types. Of\ncourse, `pretty-format` does not need a plugin to serialize arrays :)\n\n```js\n// We reused more code when we factored out a function for child items\n// that is independent of depth, name, and enclosing punctuation (see below).\nconst SEPARATOR = ',';\nfunction serializeItems(items, config, indentation, depth, refs, printer) {\n if (items.length === 0) {\n return '';\n }\n const indentationItems = indentation + config.indent;\n return (\n config.spacingOuter +\n items\n .map(\n item =>\n indentationItems +\n printer(item, config, indentationItems, depth, refs), // callback\n )\n .join(SEPARATOR + config.spacingInner) +\n (config.min ? '' : SEPARATOR) + // following the last item\n config.spacingOuter +\n indentation\n );\n}\n\nconst plugin = {\n test(val) {\n return Array.isArray(val);\n },\n serialize(array, config, indentation, depth, refs, printer) {\n const name = array.constructor.name;\n return ++depth > config.maxDepth\n ? '[' + name + ']'\n : (config.min ? '' : name + ' ') +\n '[' +\n serializeItems(array, config, indentation, depth, refs, printer) +\n ']';\n },\n};\n```\n\n```js\nconst val = {\n filter: 'completed',\n items: [\n {\n text: 'Write test',\n completed: true,\n },\n {\n text: 'Write serialize',\n completed: true,\n },\n ],\n};\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n plugins: [plugin],\n }),\n);\n/*\nObject {\n \"filter\": \"completed\",\n \"items\": Array [\n Object {\n \"completed\": true,\n \"text\": \"Write test\",\n },\n Object {\n \"completed\": true,\n \"text\": \"Write serialize\",\n },\n ],\n}\n*/\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n indent: 4,\n plugins: [plugin],\n }),\n);\n/*\nObject {\n \"filter\": \"completed\",\n \"items\": Array [\n Object {\n \"completed\": true,\n \"text\": \"Write test\",\n },\n Object {\n \"completed\": true,\n \"text\": \"Write serialize\",\n },\n ],\n}\n*/\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n maxDepth: 1,\n plugins: [plugin],\n }),\n);\n/*\nObject {\n \"filter\": \"completed\",\n \"items\": [Array],\n}\n*/\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n min: true,\n plugins: [plugin],\n }),\n);\n/*\n{\"filter\": \"completed\", \"items\": [{\"completed\": true, \"text\": \"Write test\"}, {\"completed\": true, \"text\": \"Write serialize\"}]}\n*/\n```\n\n### print\n\nThe **original** interface is adequate for plugins:\n\n* that **do not** depend on options other than `highlight` or `min`\n* that **do not** depend on `depth` or `refs` in recursive traversal, and\n* if values either\n * do **not** require indentation, or\n * do **not** occur as children of JavaScript data structures (for example,\n array)\n\nWrite `print` to return a string, given the arguments:\n\n* `val` which “passed the test”\n* current `printer(valChild)` callback function: serialize children\n* current `indenter(lines)` callback function: indent lines at the next level\n* unchanging `config` object: derived from `options`\n* unchanging `colors` object: derived from `options`\n\nThe 3 properties of `config` are `min` in `options` and:\n\n* `spacing` and `edgeSpacing` are **newline** if `min` is `false`\n* `spacing` is **space** and `edgeSpacing` is **empty string** if `min` is\n `true`\n\nEach property of `colors` corresponds to a property of `theme` in `options`:\n\n* the key is the same (for example, `tag`)\n* the value in `colors` is a object with `open` and `close` properties whose\n values are escape codes from\n [ansi-styles](https://github.com/chalk/ansi-styles) for the color value in\n `theme` (for example, `'cyan'`)\n\n### Example of print and test\n\nThis plugin prints functions with the **number of named arguments** excluding\nrest argument.\n\n```js\nconst plugin = {\n print(val) {\n return `[Function ${val.name || 'anonymous'} ${val.length}]`;\n },\n test(val) {\n return typeof val === 'function';\n },\n};\n```\n\n```js\nconst val = {\n onClick(event) {},\n render() {},\n};\n\nprettyFormat(val, {\n plugins: [plugin],\n});\n/*\nObject {\n \"onClick\": [Function onClick 1],\n \"render\": [Function render 0],\n}\n*/\n\nprettyFormat(val);\n/*\nObject {\n \"onClick\": [Function onClick],\n \"render\": [Function render],\n}\n*/\n```\n\nThis plugin **ignores** the `printFunctionName` option. That limitation of the\noriginal `print` interface is a reason to use the improved `serialize`\ninterface, described above.\n\n```js\nprettyFormat(val, {\n plugins: [pluginOld],\n printFunctionName: false,\n});\n/*\nObject {\n \"onClick\": [Function onClick 1],\n \"render\": [Function render 0],\n}\n*/\n\nprettyFormat(val, {\n printFunctionName: false,\n});\n/*\nObject {\n \"onClick\": [Function],\n \"render\": [Function],\n}\n*/\n```\n","_id":"pretty-format@23.0.0-alpha.5","dist":{"shasum":"49441032994ce2b1cfa74531c1c9d9a36fe59e90","tarball":"http://localhost:4545/npm/registry/pretty-format/pretty-format-23.0.0-alpha.5.tgz","fileCount":23,"unpackedSize":430762,"integrity":"sha512-F9gMQ7CurizcjuDminsbeqCLzGmi4/YKaTMfgcv8bNRKDv/Y18N7c+UVToSS/SJ3jwfBU5Dgze5o13yajhhhWw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICK93Rks7NgBKqtZ/dn74PfJbkcOtLGOacpruGShpuf7AiAGJJWercND8+qsVSUsDYAzovjUfBbnnxEcbWowWu1fqg=="}]},"maintainers":[{"email":"aaron@abramov.io","name":"aaronabramov"},{"email":"christoph.pojer@gmail.com","name":"cpojer"},{"email":"opensource+npm@fb.com","name":"fb"},{"email":"jean@lauliac.com","name":"jeanlauliac"},{"email":"mjesun@hotmail.com","name":"mjesun"}],"_npmUser":{"name":"mjesun","email":"mjesun@hotmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pretty-format_23.0.0-alpha.5_1523387900663_0.46189603391715317"},"_hasShrinkwrap":false},"23.0.0-alpha.5r":{"name":"pretty-format","version":"23.0.0-alpha.5r","repository":{"type":"git","url":"https://github.com/facebook/jest.git"},"license":"MIT","description":"Stringify any JavaScript value.","main":"build/index.js","browser":"build-es5/index.js","author":{"name":"James Kyle","email":"me@thejameskyle.com"},"dependencies":{"ansi-regex":"^3.0.0","ansi-styles":"^3.2.0"},"readmeFilename":"README.md","readme":"# pretty-format\n\n> Stringify any JavaScript value.\n\n* Supports all built-in JavaScript types\n * primitive types: `Boolean`, `null`, `Number`, `String`, `Symbol`,\n `undefined`\n * other non-collection types: `Date`, `Error`, `Function`, `RegExp`\n * collection types:\n * `arguments`, `Array`, `ArrayBuffer`, `DataView`, `Float32Array`,\n `Float64Array`, `Int8Array`, `Int16Array`, `Int32Array`, `Uint8Array`,\n `Uint8ClampedArray`, `Uint16Array`, `Uint32Array`,\n * `Map`, `Set`, `WeakMap`, `WeakSet`\n * `Object`\n* [Blazingly fast](https://gist.github.com/thejameskyle/2b04ffe4941aafa8f970de077843a8fd)\n * similar performance to `JSON.stringify` in v8\n * significantly faster than `util.format` in Node.js\n* Serialize application-specific data types with built-in or user-defined\n plugins\n\n## Installation\n\n```sh\n$ yarn add pretty-format\n```\n\n## Usage\n\n```js\nconst prettyFormat = require('pretty-format'); // CommonJS\n```\n\n```js\nimport prettyFormat from 'pretty-format'; // ES2015 modules\n```\n\n```js\nconst val = {object: {}};\nval.circularReference = val;\nval[Symbol('foo')] = 'foo';\nval.map = new Map([['prop', 'value']]);\nval.array = [-0, Infinity, NaN];\n\nconsole.log(prettyFormat(val));\n/*\nObject {\n \"array\": Array [\n -0,\n Infinity,\n NaN,\n ],\n \"circularReference\": [Circular],\n \"map\": Map {\n \"prop\" => \"value\",\n },\n \"object\": Object {},\n Symbol(foo): \"foo\",\n}\n*/\n```\n\n## Usage with options\n\n```js\nfunction onClick() {}\n\nconsole.log(prettyFormat(onClick));\n/*\n[Function onClick]\n*/\n\nconst options = {\n printFunctionName: false,\n};\nconsole.log(prettyFormat(onClick, options));\n/*\n[Function]\n*/\n```\n\n| key | type | default | description |\n| :------------------ | :-------- | :--------- | :------------------------------------------------------ |\n| `callToJSON` | `boolean` | `true` | call `toJSON` method (if it exists) on objects |\n| `escapeRegex` | `boolean` | `false` | escape special characters in regular expressions |\n| `highlight` | `boolean` | `false` | highlight syntax with colors in terminal (some plugins) |\n| `indent` | `number` | `2` | spaces in each level of indentation |\n| `maxDepth` | `number` | `Infinity` | levels to print in arrays, objects, elements, and so on |\n| `min` | `boolean` | `false` | minimize added space: no indentation nor line breaks |\n| `plugins` | `array` | `[]` | plugins to serialize application-specific data types |\n| `printFunctionName` | `boolean` | `true` | include or omit the name of a function |\n| `theme` | `object` | | colors to highlight syntax in terminal |\n\nProperty values of `theme` are from\n[ansi-styles colors](https://github.com/chalk/ansi-styles#colors)\n\n```js\nconst DEFAULT_THEME = {\n comment: 'gray',\n content: 'reset',\n prop: 'yellow',\n tag: 'cyan',\n value: 'green',\n};\n```\n\n## Usage with plugins\n\nThe `pretty-format` package provides some built-in plugins, including:\n\n* `ReactElement` for elements from `react`\n* `ReactTestComponent` for test objects from `react-test-renderer`\n\n```js\n// CommonJS\nconst prettyFormat = require('pretty-format');\nconst ReactElement = prettyFormat.plugins.ReactElement;\nconst ReactTestComponent = prettyFormat.plugins.ReactTestComponent;\n\nconst React = require('react');\nconst renderer = require('react-test-renderer');\n```\n\n```js\n// ES2015 modules and destructuring assignment\nimport prettyFormat from 'pretty-format';\nconst {ReactElement, ReactTestComponent} = prettyFormat.plugins;\n\nimport React from 'react';\nimport renderer from 'react-test-renderer';\n```\n\n```js\nconst onClick = () => {};\nconst element = React.createElement('button', {onClick}, 'Hello World');\n\nconst formatted1 = prettyFormat(element, {\n plugins: [ReactElement],\n printFunctionName: false,\n});\nconst formatted2 = prettyFormat(renderer.create(element).toJSON(), {\n plugins: [ReactTestComponent],\n printFunctionName: false,\n});\n/*\n\n*/\n```\n\n## Usage in Jest\n\nFor snapshot tests, Jest uses `pretty-format` with options that include some of\nits built-in plugins. For this purpose, plugins are also known as **snapshot\nserializers**.\n\nTo serialize application-specific data types, you can add modules to\n`devDependencies` of a project, and then:\n\nIn an **individual** test file, you can add a module as follows. It precedes any\nmodules from Jest configuration.\n\n```js\nimport serializer from 'my-serializer-module';\nexpect.addSnapshotSerializer(serializer);\n\n// tests which have `expect(value).toMatchSnapshot()` assertions\n```\n\nFor **all** test files, you can specify modules in Jest configuration. They\nprecede built-in plugins for React, HTML, and Immutable.js data types. For\nexample, in a `package.json` file:\n\n```json\n{\n \"jest\": {\n \"snapshotSerializers\": [\"my-serializer-module\"]\n }\n}\n```\n\n## Writing plugins\n\nA plugin is a JavaScript object.\n\nIf `options` has a `plugins` array: for the first plugin whose `test(val)`\nmethod returns a truthy value, then `prettyFormat(val, options)` returns the\nresult from either:\n\n* `serialize(val, …)` method of the **improved** interface (available in\n **version 21** or later)\n* `print(val, …)` method of the **original** interface (if plugin does not have\n `serialize` method)\n\n### test\n\nWrite `test` so it can receive `val` argument of any type. To serialize\n**objects** which have certain properties, then a guarded expression like\n`val != null && …` or more concise `val && …` prevents the following errors:\n\n* `TypeError: Cannot read property 'whatever' of null`\n* `TypeError: Cannot read property 'whatever' of undefined`\n\nFor example, `test` method of built-in `ReactElement` plugin:\n\n```js\nconst elementSymbol = Symbol.for('react.element');\nconst test = val => val && val.$$typeof === elementSymbol;\n```\n\nPay attention to efficiency in `test` because `pretty-format` calls it often.\n\n### serialize\n\nThe **improved** interface is available in **version 21** or later.\n\nWrite `serialize` to return a string, given the arguments:\n\n* `val` which “passed the test”\n* unchanging `config` object: derived from `options`\n* current `indentation` string: concatenate to `indent` from `config`\n* current `depth` number: compare to `maxDepth` from `config`\n* current `refs` array: find circular references in objects\n* `printer` callback function: serialize children\n\n### config\n\n| key | type | description |\n| :------------------ | :-------- | :------------------------------------------------------ |\n| `callToJSON` | `boolean` | call `toJSON` method (if it exists) on objects |\n| `colors` | `Object` | escape codes for colors to highlight syntax |\n| `escapeRegex` | `boolean` | escape special characters in regular expressions |\n| `indent` | `string` | spaces in each level of indentation |\n| `maxDepth` | `number` | levels to print in arrays, objects, elements, and so on |\n| `min` | `boolean` | minimize added space: no indentation nor line breaks |\n| `plugins` | `array` | plugins to serialize application-specific data types |\n| `printFunctionName` | `boolean` | include or omit the name of a function |\n| `spacingInner` | `strong` | spacing to separate items in a list |\n| `spacingOuter` | `strong` | spacing to enclose a list of items |\n\nEach property of `colors` in `config` corresponds to a property of `theme` in\n`options`:\n\n* the key is the same (for example, `tag`)\n* the value in `colors` is a object with `open` and `close` properties whose\n values are escape codes from\n [ansi-styles](https://github.com/chalk/ansi-styles) for the color value in\n `theme` (for example, `'cyan'`)\n\nSome properties in `config` are derived from `min` in `options`:\n\n* `spacingInner` and `spacingOuter` are **newline** if `min` is `false`\n* `spacingInner` is **space** and `spacingOuter` is **empty string** if `min` is\n `true`\n\n### Example of serialize and test\n\nThis plugin is a pattern you can apply to serialize composite data types. Of\ncourse, `pretty-format` does not need a plugin to serialize arrays :)\n\n```js\n// We reused more code when we factored out a function for child items\n// that is independent of depth, name, and enclosing punctuation (see below).\nconst SEPARATOR = ',';\nfunction serializeItems(items, config, indentation, depth, refs, printer) {\n if (items.length === 0) {\n return '';\n }\n const indentationItems = indentation + config.indent;\n return (\n config.spacingOuter +\n items\n .map(\n item =>\n indentationItems +\n printer(item, config, indentationItems, depth, refs), // callback\n )\n .join(SEPARATOR + config.spacingInner) +\n (config.min ? '' : SEPARATOR) + // following the last item\n config.spacingOuter +\n indentation\n );\n}\n\nconst plugin = {\n test(val) {\n return Array.isArray(val);\n },\n serialize(array, config, indentation, depth, refs, printer) {\n const name = array.constructor.name;\n return ++depth > config.maxDepth\n ? '[' + name + ']'\n : (config.min ? '' : name + ' ') +\n '[' +\n serializeItems(array, config, indentation, depth, refs, printer) +\n ']';\n },\n};\n```\n\n```js\nconst val = {\n filter: 'completed',\n items: [\n {\n text: 'Write test',\n completed: true,\n },\n {\n text: 'Write serialize',\n completed: true,\n },\n ],\n};\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n plugins: [plugin],\n }),\n);\n/*\nObject {\n \"filter\": \"completed\",\n \"items\": Array [\n Object {\n \"completed\": true,\n \"text\": \"Write test\",\n },\n Object {\n \"completed\": true,\n \"text\": \"Write serialize\",\n },\n ],\n}\n*/\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n indent: 4,\n plugins: [plugin],\n }),\n);\n/*\nObject {\n \"filter\": \"completed\",\n \"items\": Array [\n Object {\n \"completed\": true,\n \"text\": \"Write test\",\n },\n Object {\n \"completed\": true,\n \"text\": \"Write serialize\",\n },\n ],\n}\n*/\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n maxDepth: 1,\n plugins: [plugin],\n }),\n);\n/*\nObject {\n \"filter\": \"completed\",\n \"items\": [Array],\n}\n*/\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n min: true,\n plugins: [plugin],\n }),\n);\n/*\n{\"filter\": \"completed\", \"items\": [{\"completed\": true, \"text\": \"Write test\"}, {\"completed\": true, \"text\": \"Write serialize\"}]}\n*/\n```\n\n### print\n\nThe **original** interface is adequate for plugins:\n\n* that **do not** depend on options other than `highlight` or `min`\n* that **do not** depend on `depth` or `refs` in recursive traversal, and\n* if values either\n * do **not** require indentation, or\n * do **not** occur as children of JavaScript data structures (for example,\n array)\n\nWrite `print` to return a string, given the arguments:\n\n* `val` which “passed the test”\n* current `printer(valChild)` callback function: serialize children\n* current `indenter(lines)` callback function: indent lines at the next level\n* unchanging `config` object: derived from `options`\n* unchanging `colors` object: derived from `options`\n\nThe 3 properties of `config` are `min` in `options` and:\n\n* `spacing` and `edgeSpacing` are **newline** if `min` is `false`\n* `spacing` is **space** and `edgeSpacing` is **empty string** if `min` is\n `true`\n\nEach property of `colors` corresponds to a property of `theme` in `options`:\n\n* the key is the same (for example, `tag`)\n* the value in `colors` is a object with `open` and `close` properties whose\n values are escape codes from\n [ansi-styles](https://github.com/chalk/ansi-styles) for the color value in\n `theme` (for example, `'cyan'`)\n\n### Example of print and test\n\nThis plugin prints functions with the **number of named arguments** excluding\nrest argument.\n\n```js\nconst plugin = {\n print(val) {\n return `[Function ${val.name || 'anonymous'} ${val.length}]`;\n },\n test(val) {\n return typeof val === 'function';\n },\n};\n```\n\n```js\nconst val = {\n onClick(event) {},\n render() {},\n};\n\nprettyFormat(val, {\n plugins: [plugin],\n});\n/*\nObject {\n \"onClick\": [Function onClick 1],\n \"render\": [Function render 0],\n}\n*/\n\nprettyFormat(val);\n/*\nObject {\n \"onClick\": [Function onClick],\n \"render\": [Function render],\n}\n*/\n```\n\nThis plugin **ignores** the `printFunctionName` option. That limitation of the\noriginal `print` interface is a reason to use the improved `serialize`\ninterface, described above.\n\n```js\nprettyFormat(val, {\n plugins: [pluginOld],\n printFunctionName: false,\n});\n/*\nObject {\n \"onClick\": [Function onClick 1],\n \"render\": [Function render 0],\n}\n*/\n\nprettyFormat(val, {\n printFunctionName: false,\n});\n/*\nObject {\n \"onClick\": [Function],\n \"render\": [Function],\n}\n*/\n```\n","_id":"pretty-format@23.0.0-alpha.5r","dist":{"shasum":"094d001344ba1857b19c6a943949b879f833202b","tarball":"http://localhost:4545/npm/registry/pretty-format/pretty-format-23.0.0-alpha.5r.tgz","fileCount":23,"unpackedSize":430763,"integrity":"sha512-nbUKjxi6W7/xuIsDaVRPd3hP81D7SOBYw2IWS89mtUoI/9J0KwKNwybhakiLibMyKcFB5wl9sqokiOt5xVZS/w==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICOfGQpBM2YPjF/de8M4rN7875YqKilUW/lS2/KJCJ46AiEAoF9fYREx5maulMancRqTje/YcHA/aOhW9VKHGWpHe3s="}]},"maintainers":[{"email":"aaron@abramov.io","name":"aaronabramov"},{"email":"christoph.pojer@gmail.com","name":"cpojer"},{"email":"opensource+npm@fb.com","name":"fb"},{"email":"jean@lauliac.com","name":"jeanlauliac"},{"email":"mjesun@hotmail.com","name":"mjesun"}],"_npmUser":{"name":"mjesun","email":"mjesun@hotmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pretty-format_23.0.0-alpha.5r_1523425969823_0.716644474951514"},"_hasShrinkwrap":false},"23.0.0-alpha.6r":{"name":"pretty-format","version":"23.0.0-alpha.6r","repository":{"type":"git","url":"https://github.com/facebook/jest.git"},"license":"MIT","description":"Stringify any JavaScript value.","main":"build/index.js","browser":"build-es5/index.js","author":{"name":"James Kyle","email":"me@thejameskyle.com"},"dependencies":{"ansi-regex":"^3.0.0","ansi-styles":"^3.2.0"},"readmeFilename":"README.md","readme":"# pretty-format\n\n> Stringify any JavaScript value.\n\n* Supports all built-in JavaScript types\n * primitive types: `Boolean`, `null`, `Number`, `String`, `Symbol`,\n `undefined`\n * other non-collection types: `Date`, `Error`, `Function`, `RegExp`\n * collection types:\n * `arguments`, `Array`, `ArrayBuffer`, `DataView`, `Float32Array`,\n `Float64Array`, `Int8Array`, `Int16Array`, `Int32Array`, `Uint8Array`,\n `Uint8ClampedArray`, `Uint16Array`, `Uint32Array`,\n * `Map`, `Set`, `WeakMap`, `WeakSet`\n * `Object`\n* [Blazingly fast](https://gist.github.com/thejameskyle/2b04ffe4941aafa8f970de077843a8fd)\n * similar performance to `JSON.stringify` in v8\n * significantly faster than `util.format` in Node.js\n* Serialize application-specific data types with built-in or user-defined\n plugins\n\n## Installation\n\n```sh\n$ yarn add pretty-format\n```\n\n## Usage\n\n```js\nconst prettyFormat = require('pretty-format'); // CommonJS\n```\n\n```js\nimport prettyFormat from 'pretty-format'; // ES2015 modules\n```\n\n```js\nconst val = {object: {}};\nval.circularReference = val;\nval[Symbol('foo')] = 'foo';\nval.map = new Map([['prop', 'value']]);\nval.array = [-0, Infinity, NaN];\n\nconsole.log(prettyFormat(val));\n/*\nObject {\n \"array\": Array [\n -0,\n Infinity,\n NaN,\n ],\n \"circularReference\": [Circular],\n \"map\": Map {\n \"prop\" => \"value\",\n },\n \"object\": Object {},\n Symbol(foo): \"foo\",\n}\n*/\n```\n\n## Usage with options\n\n```js\nfunction onClick() {}\n\nconsole.log(prettyFormat(onClick));\n/*\n[Function onClick]\n*/\n\nconst options = {\n printFunctionName: false,\n};\nconsole.log(prettyFormat(onClick, options));\n/*\n[Function]\n*/\n```\n\n| key | type | default | description |\n| :------------------ | :-------- | :--------- | :------------------------------------------------------ |\n| `callToJSON` | `boolean` | `true` | call `toJSON` method (if it exists) on objects |\n| `escapeRegex` | `boolean` | `false` | escape special characters in regular expressions |\n| `highlight` | `boolean` | `false` | highlight syntax with colors in terminal (some plugins) |\n| `indent` | `number` | `2` | spaces in each level of indentation |\n| `maxDepth` | `number` | `Infinity` | levels to print in arrays, objects, elements, and so on |\n| `min` | `boolean` | `false` | minimize added space: no indentation nor line breaks |\n| `plugins` | `array` | `[]` | plugins to serialize application-specific data types |\n| `printFunctionName` | `boolean` | `true` | include or omit the name of a function |\n| `theme` | `object` | | colors to highlight syntax in terminal |\n\nProperty values of `theme` are from\n[ansi-styles colors](https://github.com/chalk/ansi-styles#colors)\n\n```js\nconst DEFAULT_THEME = {\n comment: 'gray',\n content: 'reset',\n prop: 'yellow',\n tag: 'cyan',\n value: 'green',\n};\n```\n\n## Usage with plugins\n\nThe `pretty-format` package provides some built-in plugins, including:\n\n* `ReactElement` for elements from `react`\n* `ReactTestComponent` for test objects from `react-test-renderer`\n\n```js\n// CommonJS\nconst prettyFormat = require('pretty-format');\nconst ReactElement = prettyFormat.plugins.ReactElement;\nconst ReactTestComponent = prettyFormat.plugins.ReactTestComponent;\n\nconst React = require('react');\nconst renderer = require('react-test-renderer');\n```\n\n```js\n// ES2015 modules and destructuring assignment\nimport prettyFormat from 'pretty-format';\nconst {ReactElement, ReactTestComponent} = prettyFormat.plugins;\n\nimport React from 'react';\nimport renderer from 'react-test-renderer';\n```\n\n```js\nconst onClick = () => {};\nconst element = React.createElement('button', {onClick}, 'Hello World');\n\nconst formatted1 = prettyFormat(element, {\n plugins: [ReactElement],\n printFunctionName: false,\n});\nconst formatted2 = prettyFormat(renderer.create(element).toJSON(), {\n plugins: [ReactTestComponent],\n printFunctionName: false,\n});\n/*\n\n*/\n```\n\n## Usage in Jest\n\nFor snapshot tests, Jest uses `pretty-format` with options that include some of\nits built-in plugins. For this purpose, plugins are also known as **snapshot\nserializers**.\n\nTo serialize application-specific data types, you can add modules to\n`devDependencies` of a project, and then:\n\nIn an **individual** test file, you can add a module as follows. It precedes any\nmodules from Jest configuration.\n\n```js\nimport serializer from 'my-serializer-module';\nexpect.addSnapshotSerializer(serializer);\n\n// tests which have `expect(value).toMatchSnapshot()` assertions\n```\n\nFor **all** test files, you can specify modules in Jest configuration. They\nprecede built-in plugins for React, HTML, and Immutable.js data types. For\nexample, in a `package.json` file:\n\n```json\n{\n \"jest\": {\n \"snapshotSerializers\": [\"my-serializer-module\"]\n }\n}\n```\n\n## Writing plugins\n\nA plugin is a JavaScript object.\n\nIf `options` has a `plugins` array: for the first plugin whose `test(val)`\nmethod returns a truthy value, then `prettyFormat(val, options)` returns the\nresult from either:\n\n* `serialize(val, …)` method of the **improved** interface (available in\n **version 21** or later)\n* `print(val, …)` method of the **original** interface (if plugin does not have\n `serialize` method)\n\n### test\n\nWrite `test` so it can receive `val` argument of any type. To serialize\n**objects** which have certain properties, then a guarded expression like\n`val != null && …` or more concise `val && …` prevents the following errors:\n\n* `TypeError: Cannot read property 'whatever' of null`\n* `TypeError: Cannot read property 'whatever' of undefined`\n\nFor example, `test` method of built-in `ReactElement` plugin:\n\n```js\nconst elementSymbol = Symbol.for('react.element');\nconst test = val => val && val.$$typeof === elementSymbol;\n```\n\nPay attention to efficiency in `test` because `pretty-format` calls it often.\n\n### serialize\n\nThe **improved** interface is available in **version 21** or later.\n\nWrite `serialize` to return a string, given the arguments:\n\n* `val` which “passed the test”\n* unchanging `config` object: derived from `options`\n* current `indentation` string: concatenate to `indent` from `config`\n* current `depth` number: compare to `maxDepth` from `config`\n* current `refs` array: find circular references in objects\n* `printer` callback function: serialize children\n\n### config\n\n| key | type | description |\n| :------------------ | :-------- | :------------------------------------------------------ |\n| `callToJSON` | `boolean` | call `toJSON` method (if it exists) on objects |\n| `colors` | `Object` | escape codes for colors to highlight syntax |\n| `escapeRegex` | `boolean` | escape special characters in regular expressions |\n| `indent` | `string` | spaces in each level of indentation |\n| `maxDepth` | `number` | levels to print in arrays, objects, elements, and so on |\n| `min` | `boolean` | minimize added space: no indentation nor line breaks |\n| `plugins` | `array` | plugins to serialize application-specific data types |\n| `printFunctionName` | `boolean` | include or omit the name of a function |\n| `spacingInner` | `strong` | spacing to separate items in a list |\n| `spacingOuter` | `strong` | spacing to enclose a list of items |\n\nEach property of `colors` in `config` corresponds to a property of `theme` in\n`options`:\n\n* the key is the same (for example, `tag`)\n* the value in `colors` is a object with `open` and `close` properties whose\n values are escape codes from\n [ansi-styles](https://github.com/chalk/ansi-styles) for the color value in\n `theme` (for example, `'cyan'`)\n\nSome properties in `config` are derived from `min` in `options`:\n\n* `spacingInner` and `spacingOuter` are **newline** if `min` is `false`\n* `spacingInner` is **space** and `spacingOuter` is **empty string** if `min` is\n `true`\n\n### Example of serialize and test\n\nThis plugin is a pattern you can apply to serialize composite data types. Of\ncourse, `pretty-format` does not need a plugin to serialize arrays :)\n\n```js\n// We reused more code when we factored out a function for child items\n// that is independent of depth, name, and enclosing punctuation (see below).\nconst SEPARATOR = ',';\nfunction serializeItems(items, config, indentation, depth, refs, printer) {\n if (items.length === 0) {\n return '';\n }\n const indentationItems = indentation + config.indent;\n return (\n config.spacingOuter +\n items\n .map(\n item =>\n indentationItems +\n printer(item, config, indentationItems, depth, refs), // callback\n )\n .join(SEPARATOR + config.spacingInner) +\n (config.min ? '' : SEPARATOR) + // following the last item\n config.spacingOuter +\n indentation\n );\n}\n\nconst plugin = {\n test(val) {\n return Array.isArray(val);\n },\n serialize(array, config, indentation, depth, refs, printer) {\n const name = array.constructor.name;\n return ++depth > config.maxDepth\n ? '[' + name + ']'\n : (config.min ? '' : name + ' ') +\n '[' +\n serializeItems(array, config, indentation, depth, refs, printer) +\n ']';\n },\n};\n```\n\n```js\nconst val = {\n filter: 'completed',\n items: [\n {\n text: 'Write test',\n completed: true,\n },\n {\n text: 'Write serialize',\n completed: true,\n },\n ],\n};\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n plugins: [plugin],\n }),\n);\n/*\nObject {\n \"filter\": \"completed\",\n \"items\": Array [\n Object {\n \"completed\": true,\n \"text\": \"Write test\",\n },\n Object {\n \"completed\": true,\n \"text\": \"Write serialize\",\n },\n ],\n}\n*/\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n indent: 4,\n plugins: [plugin],\n }),\n);\n/*\nObject {\n \"filter\": \"completed\",\n \"items\": Array [\n Object {\n \"completed\": true,\n \"text\": \"Write test\",\n },\n Object {\n \"completed\": true,\n \"text\": \"Write serialize\",\n },\n ],\n}\n*/\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n maxDepth: 1,\n plugins: [plugin],\n }),\n);\n/*\nObject {\n \"filter\": \"completed\",\n \"items\": [Array],\n}\n*/\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n min: true,\n plugins: [plugin],\n }),\n);\n/*\n{\"filter\": \"completed\", \"items\": [{\"completed\": true, \"text\": \"Write test\"}, {\"completed\": true, \"text\": \"Write serialize\"}]}\n*/\n```\n\n### print\n\nThe **original** interface is adequate for plugins:\n\n* that **do not** depend on options other than `highlight` or `min`\n* that **do not** depend on `depth` or `refs` in recursive traversal, and\n* if values either\n * do **not** require indentation, or\n * do **not** occur as children of JavaScript data structures (for example,\n array)\n\nWrite `print` to return a string, given the arguments:\n\n* `val` which “passed the test”\n* current `printer(valChild)` callback function: serialize children\n* current `indenter(lines)` callback function: indent lines at the next level\n* unchanging `config` object: derived from `options`\n* unchanging `colors` object: derived from `options`\n\nThe 3 properties of `config` are `min` in `options` and:\n\n* `spacing` and `edgeSpacing` are **newline** if `min` is `false`\n* `spacing` is **space** and `edgeSpacing` is **empty string** if `min` is\n `true`\n\nEach property of `colors` corresponds to a property of `theme` in `options`:\n\n* the key is the same (for example, `tag`)\n* the value in `colors` is a object with `open` and `close` properties whose\n values are escape codes from\n [ansi-styles](https://github.com/chalk/ansi-styles) for the color value in\n `theme` (for example, `'cyan'`)\n\n### Example of print and test\n\nThis plugin prints functions with the **number of named arguments** excluding\nrest argument.\n\n```js\nconst plugin = {\n print(val) {\n return `[Function ${val.name || 'anonymous'} ${val.length}]`;\n },\n test(val) {\n return typeof val === 'function';\n },\n};\n```\n\n```js\nconst val = {\n onClick(event) {},\n render() {},\n};\n\nprettyFormat(val, {\n plugins: [plugin],\n});\n/*\nObject {\n \"onClick\": [Function onClick 1],\n \"render\": [Function render 0],\n}\n*/\n\nprettyFormat(val);\n/*\nObject {\n \"onClick\": [Function onClick],\n \"render\": [Function render],\n}\n*/\n```\n\nThis plugin **ignores** the `printFunctionName` option. That limitation of the\noriginal `print` interface is a reason to use the improved `serialize`\ninterface, described above.\n\n```js\nprettyFormat(val, {\n plugins: [pluginOld],\n printFunctionName: false,\n});\n/*\nObject {\n \"onClick\": [Function onClick 1],\n \"render\": [Function render 0],\n}\n*/\n\nprettyFormat(val, {\n printFunctionName: false,\n});\n/*\nObject {\n \"onClick\": [Function],\n \"render\": [Function],\n}\n*/\n```\n","_id":"pretty-format@23.0.0-alpha.6r","dist":{"shasum":"a50d8381a231f8ae231a8255d7e3de7a6c0d2fe5","tarball":"http://localhost:4545/npm/registry/pretty-format/pretty-format-23.0.0-alpha.6r.tgz","fileCount":23,"unpackedSize":430763,"integrity":"sha512-+qgVrXuk0Tsj4VTX+lJp2b2hqMMRfRGxevgrtAn2eiZBH5C5PEtWn3wJ/LxXPKdxy0Pavq1+t6LKblyGnRNbqw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCoPdRV2ltvnFqnDY1N/G3MXiFhbr8QGx4GM0e+szZPFgIhAN9N6RYDzjxka5ZG73mFasSsJwh0nLO6CbjcN7Ns9GLT"}]},"maintainers":[{"email":"aaron@abramov.io","name":"aaronabramov"},{"email":"christoph.pojer@gmail.com","name":"cpojer"},{"email":"opensource+npm@fb.com","name":"fb"},{"email":"jean@lauliac.com","name":"jeanlauliac"},{"email":"mjesun@hotmail.com","name":"mjesun"}],"_npmUser":{"name":"mjesun","email":"mjesun@hotmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pretty-format_23.0.0-alpha.6r_1523516494617_0.22010912614011202"},"_hasShrinkwrap":false},"23.0.0-alpha.7":{"name":"pretty-format","version":"23.0.0-alpha.7","repository":{"type":"git","url":"https://github.com/facebook/jest.git"},"license":"MIT","description":"Stringify any JavaScript value.","main":"build/index.js","browser":"build-es5/index.js","author":{"name":"James Kyle","email":"me@thejameskyle.com"},"dependencies":{"ansi-regex":"^3.0.0","ansi-styles":"^3.2.0"},"readmeFilename":"README.md","readme":"# pretty-format\n\n> Stringify any JavaScript value.\n\n* Supports all built-in JavaScript types\n * primitive types: `Boolean`, `null`, `Number`, `String`, `Symbol`,\n `undefined`\n * other non-collection types: `Date`, `Error`, `Function`, `RegExp`\n * collection types:\n * `arguments`, `Array`, `ArrayBuffer`, `DataView`, `Float32Array`,\n `Float64Array`, `Int8Array`, `Int16Array`, `Int32Array`, `Uint8Array`,\n `Uint8ClampedArray`, `Uint16Array`, `Uint32Array`,\n * `Map`, `Set`, `WeakMap`, `WeakSet`\n * `Object`\n* [Blazingly fast](https://gist.github.com/thejameskyle/2b04ffe4941aafa8f970de077843a8fd)\n * similar performance to `JSON.stringify` in v8\n * significantly faster than `util.format` in Node.js\n* Serialize application-specific data types with built-in or user-defined\n plugins\n\n## Installation\n\n```sh\n$ yarn add pretty-format\n```\n\n## Usage\n\n```js\nconst prettyFormat = require('pretty-format'); // CommonJS\n```\n\n```js\nimport prettyFormat from 'pretty-format'; // ES2015 modules\n```\n\n```js\nconst val = {object: {}};\nval.circularReference = val;\nval[Symbol('foo')] = 'foo';\nval.map = new Map([['prop', 'value']]);\nval.array = [-0, Infinity, NaN];\n\nconsole.log(prettyFormat(val));\n/*\nObject {\n \"array\": Array [\n -0,\n Infinity,\n NaN,\n ],\n \"circularReference\": [Circular],\n \"map\": Map {\n \"prop\" => \"value\",\n },\n \"object\": Object {},\n Symbol(foo): \"foo\",\n}\n*/\n```\n\n## Usage with options\n\n```js\nfunction onClick() {}\n\nconsole.log(prettyFormat(onClick));\n/*\n[Function onClick]\n*/\n\nconst options = {\n printFunctionName: false,\n};\nconsole.log(prettyFormat(onClick, options));\n/*\n[Function]\n*/\n```\n\n| key | type | default | description |\n| :------------------ | :-------- | :--------- | :------------------------------------------------------ |\n| `callToJSON` | `boolean` | `true` | call `toJSON` method (if it exists) on objects |\n| `escapeRegex` | `boolean` | `false` | escape special characters in regular expressions |\n| `highlight` | `boolean` | `false` | highlight syntax with colors in terminal (some plugins) |\n| `indent` | `number` | `2` | spaces in each level of indentation |\n| `maxDepth` | `number` | `Infinity` | levels to print in arrays, objects, elements, and so on |\n| `min` | `boolean` | `false` | minimize added space: no indentation nor line breaks |\n| `plugins` | `array` | `[]` | plugins to serialize application-specific data types |\n| `printFunctionName` | `boolean` | `true` | include or omit the name of a function |\n| `theme` | `object` | | colors to highlight syntax in terminal |\n\nProperty values of `theme` are from\n[ansi-styles colors](https://github.com/chalk/ansi-styles#colors)\n\n```js\nconst DEFAULT_THEME = {\n comment: 'gray',\n content: 'reset',\n prop: 'yellow',\n tag: 'cyan',\n value: 'green',\n};\n```\n\n## Usage with plugins\n\nThe `pretty-format` package provides some built-in plugins, including:\n\n* `ReactElement` for elements from `react`\n* `ReactTestComponent` for test objects from `react-test-renderer`\n\n```js\n// CommonJS\nconst prettyFormat = require('pretty-format');\nconst ReactElement = prettyFormat.plugins.ReactElement;\nconst ReactTestComponent = prettyFormat.plugins.ReactTestComponent;\n\nconst React = require('react');\nconst renderer = require('react-test-renderer');\n```\n\n```js\n// ES2015 modules and destructuring assignment\nimport prettyFormat from 'pretty-format';\nconst {ReactElement, ReactTestComponent} = prettyFormat.plugins;\n\nimport React from 'react';\nimport renderer from 'react-test-renderer';\n```\n\n```js\nconst onClick = () => {};\nconst element = React.createElement('button', {onClick}, 'Hello World');\n\nconst formatted1 = prettyFormat(element, {\n plugins: [ReactElement],\n printFunctionName: false,\n});\nconst formatted2 = prettyFormat(renderer.create(element).toJSON(), {\n plugins: [ReactTestComponent],\n printFunctionName: false,\n});\n/*\n\n*/\n```\n\n## Usage in Jest\n\nFor snapshot tests, Jest uses `pretty-format` with options that include some of\nits built-in plugins. For this purpose, plugins are also known as **snapshot\nserializers**.\n\nTo serialize application-specific data types, you can add modules to\n`devDependencies` of a project, and then:\n\nIn an **individual** test file, you can add a module as follows. It precedes any\nmodules from Jest configuration.\n\n```js\nimport serializer from 'my-serializer-module';\nexpect.addSnapshotSerializer(serializer);\n\n// tests which have `expect(value).toMatchSnapshot()` assertions\n```\n\nFor **all** test files, you can specify modules in Jest configuration. They\nprecede built-in plugins for React, HTML, and Immutable.js data types. For\nexample, in a `package.json` file:\n\n```json\n{\n \"jest\": {\n \"snapshotSerializers\": [\"my-serializer-module\"]\n }\n}\n```\n\n## Writing plugins\n\nA plugin is a JavaScript object.\n\nIf `options` has a `plugins` array: for the first plugin whose `test(val)`\nmethod returns a truthy value, then `prettyFormat(val, options)` returns the\nresult from either:\n\n* `serialize(val, …)` method of the **improved** interface (available in\n **version 21** or later)\n* `print(val, …)` method of the **original** interface (if plugin does not have\n `serialize` method)\n\n### test\n\nWrite `test` so it can receive `val` argument of any type. To serialize\n**objects** which have certain properties, then a guarded expression like\n`val != null && …` or more concise `val && …` prevents the following errors:\n\n* `TypeError: Cannot read property 'whatever' of null`\n* `TypeError: Cannot read property 'whatever' of undefined`\n\nFor example, `test` method of built-in `ReactElement` plugin:\n\n```js\nconst elementSymbol = Symbol.for('react.element');\nconst test = val => val && val.$$typeof === elementSymbol;\n```\n\nPay attention to efficiency in `test` because `pretty-format` calls it often.\n\n### serialize\n\nThe **improved** interface is available in **version 21** or later.\n\nWrite `serialize` to return a string, given the arguments:\n\n* `val` which “passed the test”\n* unchanging `config` object: derived from `options`\n* current `indentation` string: concatenate to `indent` from `config`\n* current `depth` number: compare to `maxDepth` from `config`\n* current `refs` array: find circular references in objects\n* `printer` callback function: serialize children\n\n### config\n\n| key | type | description |\n| :------------------ | :-------- | :------------------------------------------------------ |\n| `callToJSON` | `boolean` | call `toJSON` method (if it exists) on objects |\n| `colors` | `Object` | escape codes for colors to highlight syntax |\n| `escapeRegex` | `boolean` | escape special characters in regular expressions |\n| `indent` | `string` | spaces in each level of indentation |\n| `maxDepth` | `number` | levels to print in arrays, objects, elements, and so on |\n| `min` | `boolean` | minimize added space: no indentation nor line breaks |\n| `plugins` | `array` | plugins to serialize application-specific data types |\n| `printFunctionName` | `boolean` | include or omit the name of a function |\n| `spacingInner` | `strong` | spacing to separate items in a list |\n| `spacingOuter` | `strong` | spacing to enclose a list of items |\n\nEach property of `colors` in `config` corresponds to a property of `theme` in\n`options`:\n\n* the key is the same (for example, `tag`)\n* the value in `colors` is a object with `open` and `close` properties whose\n values are escape codes from\n [ansi-styles](https://github.com/chalk/ansi-styles) for the color value in\n `theme` (for example, `'cyan'`)\n\nSome properties in `config` are derived from `min` in `options`:\n\n* `spacingInner` and `spacingOuter` are **newline** if `min` is `false`\n* `spacingInner` is **space** and `spacingOuter` is **empty string** if `min` is\n `true`\n\n### Example of serialize and test\n\nThis plugin is a pattern you can apply to serialize composite data types. Of\ncourse, `pretty-format` does not need a plugin to serialize arrays :)\n\n```js\n// We reused more code when we factored out a function for child items\n// that is independent of depth, name, and enclosing punctuation (see below).\nconst SEPARATOR = ',';\nfunction serializeItems(items, config, indentation, depth, refs, printer) {\n if (items.length === 0) {\n return '';\n }\n const indentationItems = indentation + config.indent;\n return (\n config.spacingOuter +\n items\n .map(\n item =>\n indentationItems +\n printer(item, config, indentationItems, depth, refs), // callback\n )\n .join(SEPARATOR + config.spacingInner) +\n (config.min ? '' : SEPARATOR) + // following the last item\n config.spacingOuter +\n indentation\n );\n}\n\nconst plugin = {\n test(val) {\n return Array.isArray(val);\n },\n serialize(array, config, indentation, depth, refs, printer) {\n const name = array.constructor.name;\n return ++depth > config.maxDepth\n ? '[' + name + ']'\n : (config.min ? '' : name + ' ') +\n '[' +\n serializeItems(array, config, indentation, depth, refs, printer) +\n ']';\n },\n};\n```\n\n```js\nconst val = {\n filter: 'completed',\n items: [\n {\n text: 'Write test',\n completed: true,\n },\n {\n text: 'Write serialize',\n completed: true,\n },\n ],\n};\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n plugins: [plugin],\n }),\n);\n/*\nObject {\n \"filter\": \"completed\",\n \"items\": Array [\n Object {\n \"completed\": true,\n \"text\": \"Write test\",\n },\n Object {\n \"completed\": true,\n \"text\": \"Write serialize\",\n },\n ],\n}\n*/\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n indent: 4,\n plugins: [plugin],\n }),\n);\n/*\nObject {\n \"filter\": \"completed\",\n \"items\": Array [\n Object {\n \"completed\": true,\n \"text\": \"Write test\",\n },\n Object {\n \"completed\": true,\n \"text\": \"Write serialize\",\n },\n ],\n}\n*/\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n maxDepth: 1,\n plugins: [plugin],\n }),\n);\n/*\nObject {\n \"filter\": \"completed\",\n \"items\": [Array],\n}\n*/\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n min: true,\n plugins: [plugin],\n }),\n);\n/*\n{\"filter\": \"completed\", \"items\": [{\"completed\": true, \"text\": \"Write test\"}, {\"completed\": true, \"text\": \"Write serialize\"}]}\n*/\n```\n\n### print\n\nThe **original** interface is adequate for plugins:\n\n* that **do not** depend on options other than `highlight` or `min`\n* that **do not** depend on `depth` or `refs` in recursive traversal, and\n* if values either\n * do **not** require indentation, or\n * do **not** occur as children of JavaScript data structures (for example,\n array)\n\nWrite `print` to return a string, given the arguments:\n\n* `val` which “passed the test”\n* current `printer(valChild)` callback function: serialize children\n* current `indenter(lines)` callback function: indent lines at the next level\n* unchanging `config` object: derived from `options`\n* unchanging `colors` object: derived from `options`\n\nThe 3 properties of `config` are `min` in `options` and:\n\n* `spacing` and `edgeSpacing` are **newline** if `min` is `false`\n* `spacing` is **space** and `edgeSpacing` is **empty string** if `min` is\n `true`\n\nEach property of `colors` corresponds to a property of `theme` in `options`:\n\n* the key is the same (for example, `tag`)\n* the value in `colors` is a object with `open` and `close` properties whose\n values are escape codes from\n [ansi-styles](https://github.com/chalk/ansi-styles) for the color value in\n `theme` (for example, `'cyan'`)\n\n### Example of print and test\n\nThis plugin prints functions with the **number of named arguments** excluding\nrest argument.\n\n```js\nconst plugin = {\n print(val) {\n return `[Function ${val.name || 'anonymous'} ${val.length}]`;\n },\n test(val) {\n return typeof val === 'function';\n },\n};\n```\n\n```js\nconst val = {\n onClick(event) {},\n render() {},\n};\n\nprettyFormat(val, {\n plugins: [plugin],\n});\n/*\nObject {\n \"onClick\": [Function onClick 1],\n \"render\": [Function render 0],\n}\n*/\n\nprettyFormat(val);\n/*\nObject {\n \"onClick\": [Function onClick],\n \"render\": [Function render],\n}\n*/\n```\n\nThis plugin **ignores** the `printFunctionName` option. That limitation of the\noriginal `print` interface is a reason to use the improved `serialize`\ninterface, described above.\n\n```js\nprettyFormat(val, {\n plugins: [pluginOld],\n printFunctionName: false,\n});\n/*\nObject {\n \"onClick\": [Function onClick 1],\n \"render\": [Function render 0],\n}\n*/\n\nprettyFormat(val, {\n printFunctionName: false,\n});\n/*\nObject {\n \"onClick\": [Function],\n \"render\": [Function],\n}\n*/\n```\n","_id":"pretty-format@23.0.0-alpha.7","dist":{"shasum":"d4a28747c40adf084100315e12c1eb49f122081d","tarball":"http://localhost:4545/npm/registry/pretty-format/pretty-format-23.0.0-alpha.7.tgz","fileCount":23,"unpackedSize":430762,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJa1kMYCRA9TVsSAnZWagAAoPIP/1gGtxGhqkXnYZwq0Wdv\nT7spY8WVnGBL5RlZS3re8StH7AfkgJMJ0fklouC7c3qSO01KqN3xPkzBan89\nX9+lbxaxqyWs6nv+qPnwfRvdTC9xgukkz2CDVZc17WhpGCIRmusGRBFEqU3z\nvmFXSh46brq1KIgJIjMECKiHvtEhe3jcUTfLiOe/ZIvwxtvGqwtS/Z7sv/qs\nMGTeuLyNZNBzJp6tS/ozeAiUYYSJY0lwZwY7p2f3xInM2zB0xRR4LYBYDYH+\nRJ2lJkfAV1Tph3vxacnOOYoHE278MdVaXIKygv2DZpUE5pIsP8fC+ubArqZd\n8la+zowFGFHGA/VYh/4JzgPX/N7KAuCl9470sfHGEpVxlJz560kuQJTuQ93F\nuAcgAQbsNfplmix6REvfziO8U3O0KStH8q90cQ4mmDKBJj+OZFgVw7fDRhv/\nNFaQ6/dDHl60O30DVJd9AGGYGj1bH5ylpRYIivxwNkxqiOaxl6I6LiDv1o3z\nspL3dJXDsfO2mLIP1Ni3M/zR+oeK0yGqafjYCQKfN8AP4P6uopCFl58EkKew\niy46A3h91zEiPKnaeAynoPJKJe7X/5HYjQJLeM+fiMYhguycqj1ELe3njmG0\nahNE64Gxz9tiuUlkmw3mnza0M/lJ5XV/7tZEflbtWhKVSSgK4tCQXYNv2vu5\n4LOj\r\n=gTH4\r\n-----END PGP SIGNATURE-----\r\n","integrity":"sha512-6WVJin16ZcEQU9pw8tGQLQ6W7P9RZ5hJplOUCLfqk67IXXiA3aWHLcKTQdAP/41Pf4jQSk81OpfIEASVxIhoAw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGXQFtm8mjtRzlI4P1Q3PNhaQbLloPdWq7Qio6PkyKVBAiBX1qyo3G0GkvJD3KwQWuv7tabeC19imBT/6FJyKBOQ0Q=="}]},"maintainers":[{"email":"aaron@abramov.io","name":"aaronabramov"},{"email":"christoph.pojer@gmail.com","name":"cpojer"},{"email":"opensource+npm@fb.com","name":"fb"},{"email":"jean@lauliac.com","name":"jeanlauliac"},{"email":"mjesun@hotmail.com","name":"mjesun"}],"_npmUser":{"name":"mjesun","email":"mjesun@hotmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pretty-format_23.0.0-alpha.7_1523991319820_0.6475940960465933"},"_hasShrinkwrap":false},"23.0.0-beta.0":{"name":"pretty-format","version":"23.0.0-beta.0","repository":{"type":"git","url":"https://github.com/facebook/jest.git"},"license":"MIT","description":"Stringify any JavaScript value.","main":"build/index.js","browser":"build-es5/index.js","author":{"name":"James Kyle","email":"me@thejameskyle.com"},"dependencies":{"ansi-regex":"^3.0.0","ansi-styles":"^3.2.0"},"readmeFilename":"README.md","readme":"# pretty-format\n\n> Stringify any JavaScript value.\n\n* Supports all built-in JavaScript types\n * primitive types: `Boolean`, `null`, `Number`, `String`, `Symbol`,\n `undefined`\n * other non-collection types: `Date`, `Error`, `Function`, `RegExp`\n * collection types:\n * `arguments`, `Array`, `ArrayBuffer`, `DataView`, `Float32Array`,\n `Float64Array`, `Int8Array`, `Int16Array`, `Int32Array`, `Uint8Array`,\n `Uint8ClampedArray`, `Uint16Array`, `Uint32Array`,\n * `Map`, `Set`, `WeakMap`, `WeakSet`\n * `Object`\n* [Blazingly fast](https://gist.github.com/thejameskyle/2b04ffe4941aafa8f970de077843a8fd)\n * similar performance to `JSON.stringify` in v8\n * significantly faster than `util.format` in Node.js\n* Serialize application-specific data types with built-in or user-defined\n plugins\n\n## Installation\n\n```sh\n$ yarn add pretty-format\n```\n\n## Usage\n\n```js\nconst prettyFormat = require('pretty-format'); // CommonJS\n```\n\n```js\nimport prettyFormat from 'pretty-format'; // ES2015 modules\n```\n\n```js\nconst val = {object: {}};\nval.circularReference = val;\nval[Symbol('foo')] = 'foo';\nval.map = new Map([['prop', 'value']]);\nval.array = [-0, Infinity, NaN];\n\nconsole.log(prettyFormat(val));\n/*\nObject {\n \"array\": Array [\n -0,\n Infinity,\n NaN,\n ],\n \"circularReference\": [Circular],\n \"map\": Map {\n \"prop\" => \"value\",\n },\n \"object\": Object {},\n Symbol(foo): \"foo\",\n}\n*/\n```\n\n## Usage with options\n\n```js\nfunction onClick() {}\n\nconsole.log(prettyFormat(onClick));\n/*\n[Function onClick]\n*/\n\nconst options = {\n printFunctionName: false,\n};\nconsole.log(prettyFormat(onClick, options));\n/*\n[Function]\n*/\n```\n\n| key | type | default | description |\n| :------------------ | :-------- | :--------- | :------------------------------------------------------ |\n| `callToJSON` | `boolean` | `true` | call `toJSON` method (if it exists) on objects |\n| `escapeRegex` | `boolean` | `false` | escape special characters in regular expressions |\n| `highlight` | `boolean` | `false` | highlight syntax with colors in terminal (some plugins) |\n| `indent` | `number` | `2` | spaces in each level of indentation |\n| `maxDepth` | `number` | `Infinity` | levels to print in arrays, objects, elements, and so on |\n| `min` | `boolean` | `false` | minimize added space: no indentation nor line breaks |\n| `plugins` | `array` | `[]` | plugins to serialize application-specific data types |\n| `printFunctionName` | `boolean` | `true` | include or omit the name of a function |\n| `theme` | `object` | | colors to highlight syntax in terminal |\n\nProperty values of `theme` are from\n[ansi-styles colors](https://github.com/chalk/ansi-styles#colors)\n\n```js\nconst DEFAULT_THEME = {\n comment: 'gray',\n content: 'reset',\n prop: 'yellow',\n tag: 'cyan',\n value: 'green',\n};\n```\n\n## Usage with plugins\n\nThe `pretty-format` package provides some built-in plugins, including:\n\n* `ReactElement` for elements from `react`\n* `ReactTestComponent` for test objects from `react-test-renderer`\n\n```js\n// CommonJS\nconst prettyFormat = require('pretty-format');\nconst ReactElement = prettyFormat.plugins.ReactElement;\nconst ReactTestComponent = prettyFormat.plugins.ReactTestComponent;\n\nconst React = require('react');\nconst renderer = require('react-test-renderer');\n```\n\n```js\n// ES2015 modules and destructuring assignment\nimport prettyFormat from 'pretty-format';\nconst {ReactElement, ReactTestComponent} = prettyFormat.plugins;\n\nimport React from 'react';\nimport renderer from 'react-test-renderer';\n```\n\n```js\nconst onClick = () => {};\nconst element = React.createElement('button', {onClick}, 'Hello World');\n\nconst formatted1 = prettyFormat(element, {\n plugins: [ReactElement],\n printFunctionName: false,\n});\nconst formatted2 = prettyFormat(renderer.create(element).toJSON(), {\n plugins: [ReactTestComponent],\n printFunctionName: false,\n});\n/*\n\n*/\n```\n\n## Usage in Jest\n\nFor snapshot tests, Jest uses `pretty-format` with options that include some of\nits built-in plugins. For this purpose, plugins are also known as **snapshot\nserializers**.\n\nTo serialize application-specific data types, you can add modules to\n`devDependencies` of a project, and then:\n\nIn an **individual** test file, you can add a module as follows. It precedes any\nmodules from Jest configuration.\n\n```js\nimport serializer from 'my-serializer-module';\nexpect.addSnapshotSerializer(serializer);\n\n// tests which have `expect(value).toMatchSnapshot()` assertions\n```\n\nFor **all** test files, you can specify modules in Jest configuration. They\nprecede built-in plugins for React, HTML, and Immutable.js data types. For\nexample, in a `package.json` file:\n\n```json\n{\n \"jest\": {\n \"snapshotSerializers\": [\"my-serializer-module\"]\n }\n}\n```\n\n## Writing plugins\n\nA plugin is a JavaScript object.\n\nIf `options` has a `plugins` array: for the first plugin whose `test(val)`\nmethod returns a truthy value, then `prettyFormat(val, options)` returns the\nresult from either:\n\n* `serialize(val, …)` method of the **improved** interface (available in\n **version 21** or later)\n* `print(val, …)` method of the **original** interface (if plugin does not have\n `serialize` method)\n\n### test\n\nWrite `test` so it can receive `val` argument of any type. To serialize\n**objects** which have certain properties, then a guarded expression like\n`val != null && …` or more concise `val && …` prevents the following errors:\n\n* `TypeError: Cannot read property 'whatever' of null`\n* `TypeError: Cannot read property 'whatever' of undefined`\n\nFor example, `test` method of built-in `ReactElement` plugin:\n\n```js\nconst elementSymbol = Symbol.for('react.element');\nconst test = val => val && val.$$typeof === elementSymbol;\n```\n\nPay attention to efficiency in `test` because `pretty-format` calls it often.\n\n### serialize\n\nThe **improved** interface is available in **version 21** or later.\n\nWrite `serialize` to return a string, given the arguments:\n\n* `val` which “passed the test”\n* unchanging `config` object: derived from `options`\n* current `indentation` string: concatenate to `indent` from `config`\n* current `depth` number: compare to `maxDepth` from `config`\n* current `refs` array: find circular references in objects\n* `printer` callback function: serialize children\n\n### config\n\n| key | type | description |\n| :------------------ | :-------- | :------------------------------------------------------ |\n| `callToJSON` | `boolean` | call `toJSON` method (if it exists) on objects |\n| `colors` | `Object` | escape codes for colors to highlight syntax |\n| `escapeRegex` | `boolean` | escape special characters in regular expressions |\n| `indent` | `string` | spaces in each level of indentation |\n| `maxDepth` | `number` | levels to print in arrays, objects, elements, and so on |\n| `min` | `boolean` | minimize added space: no indentation nor line breaks |\n| `plugins` | `array` | plugins to serialize application-specific data types |\n| `printFunctionName` | `boolean` | include or omit the name of a function |\n| `spacingInner` | `strong` | spacing to separate items in a list |\n| `spacingOuter` | `strong` | spacing to enclose a list of items |\n\nEach property of `colors` in `config` corresponds to a property of `theme` in\n`options`:\n\n* the key is the same (for example, `tag`)\n* the value in `colors` is a object with `open` and `close` properties whose\n values are escape codes from\n [ansi-styles](https://github.com/chalk/ansi-styles) for the color value in\n `theme` (for example, `'cyan'`)\n\nSome properties in `config` are derived from `min` in `options`:\n\n* `spacingInner` and `spacingOuter` are **newline** if `min` is `false`\n* `spacingInner` is **space** and `spacingOuter` is **empty string** if `min` is\n `true`\n\n### Example of serialize and test\n\nThis plugin is a pattern you can apply to serialize composite data types. Of\ncourse, `pretty-format` does not need a plugin to serialize arrays :)\n\n```js\n// We reused more code when we factored out a function for child items\n// that is independent of depth, name, and enclosing punctuation (see below).\nconst SEPARATOR = ',';\nfunction serializeItems(items, config, indentation, depth, refs, printer) {\n if (items.length === 0) {\n return '';\n }\n const indentationItems = indentation + config.indent;\n return (\n config.spacingOuter +\n items\n .map(\n item =>\n indentationItems +\n printer(item, config, indentationItems, depth, refs), // callback\n )\n .join(SEPARATOR + config.spacingInner) +\n (config.min ? '' : SEPARATOR) + // following the last item\n config.spacingOuter +\n indentation\n );\n}\n\nconst plugin = {\n test(val) {\n return Array.isArray(val);\n },\n serialize(array, config, indentation, depth, refs, printer) {\n const name = array.constructor.name;\n return ++depth > config.maxDepth\n ? '[' + name + ']'\n : (config.min ? '' : name + ' ') +\n '[' +\n serializeItems(array, config, indentation, depth, refs, printer) +\n ']';\n },\n};\n```\n\n```js\nconst val = {\n filter: 'completed',\n items: [\n {\n text: 'Write test',\n completed: true,\n },\n {\n text: 'Write serialize',\n completed: true,\n },\n ],\n};\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n plugins: [plugin],\n }),\n);\n/*\nObject {\n \"filter\": \"completed\",\n \"items\": Array [\n Object {\n \"completed\": true,\n \"text\": \"Write test\",\n },\n Object {\n \"completed\": true,\n \"text\": \"Write serialize\",\n },\n ],\n}\n*/\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n indent: 4,\n plugins: [plugin],\n }),\n);\n/*\nObject {\n \"filter\": \"completed\",\n \"items\": Array [\n Object {\n \"completed\": true,\n \"text\": \"Write test\",\n },\n Object {\n \"completed\": true,\n \"text\": \"Write serialize\",\n },\n ],\n}\n*/\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n maxDepth: 1,\n plugins: [plugin],\n }),\n);\n/*\nObject {\n \"filter\": \"completed\",\n \"items\": [Array],\n}\n*/\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n min: true,\n plugins: [plugin],\n }),\n);\n/*\n{\"filter\": \"completed\", \"items\": [{\"completed\": true, \"text\": \"Write test\"}, {\"completed\": true, \"text\": \"Write serialize\"}]}\n*/\n```\n\n### print\n\nThe **original** interface is adequate for plugins:\n\n* that **do not** depend on options other than `highlight` or `min`\n* that **do not** depend on `depth` or `refs` in recursive traversal, and\n* if values either\n * do **not** require indentation, or\n * do **not** occur as children of JavaScript data structures (for example,\n array)\n\nWrite `print` to return a string, given the arguments:\n\n* `val` which “passed the test”\n* current `printer(valChild)` callback function: serialize children\n* current `indenter(lines)` callback function: indent lines at the next level\n* unchanging `config` object: derived from `options`\n* unchanging `colors` object: derived from `options`\n\nThe 3 properties of `config` are `min` in `options` and:\n\n* `spacing` and `edgeSpacing` are **newline** if `min` is `false`\n* `spacing` is **space** and `edgeSpacing` is **empty string** if `min` is\n `true`\n\nEach property of `colors` corresponds to a property of `theme` in `options`:\n\n* the key is the same (for example, `tag`)\n* the value in `colors` is a object with `open` and `close` properties whose\n values are escape codes from\n [ansi-styles](https://github.com/chalk/ansi-styles) for the color value in\n `theme` (for example, `'cyan'`)\n\n### Example of print and test\n\nThis plugin prints functions with the **number of named arguments** excluding\nrest argument.\n\n```js\nconst plugin = {\n print(val) {\n return `[Function ${val.name || 'anonymous'} ${val.length}]`;\n },\n test(val) {\n return typeof val === 'function';\n },\n};\n```\n\n```js\nconst val = {\n onClick(event) {},\n render() {},\n};\n\nprettyFormat(val, {\n plugins: [plugin],\n});\n/*\nObject {\n \"onClick\": [Function onClick 1],\n \"render\": [Function render 0],\n}\n*/\n\nprettyFormat(val);\n/*\nObject {\n \"onClick\": [Function onClick],\n \"render\": [Function render],\n}\n*/\n```\n\nThis plugin **ignores** the `printFunctionName` option. That limitation of the\noriginal `print` interface is a reason to use the improved `serialize`\ninterface, described above.\n\n```js\nprettyFormat(val, {\n plugins: [pluginOld],\n printFunctionName: false,\n});\n/*\nObject {\n \"onClick\": [Function onClick 1],\n \"render\": [Function render 0],\n}\n*/\n\nprettyFormat(val, {\n printFunctionName: false,\n});\n/*\nObject {\n \"onClick\": [Function],\n \"render\": [Function],\n}\n*/\n```\n","_id":"pretty-format@23.0.0-beta.0","dist":{"shasum":"9a61b677f3b61e16001d288aeb51a15d6c9c83b2","tarball":"http://localhost:4545/npm/registry/pretty-format/pretty-format-23.0.0-beta.0.tgz","fileCount":23,"unpackedSize":430761,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJa2bynCRA9TVsSAnZWagAA7XkP/2E+HrecAWlGe+Le9dT+\nyKFS4Z0InIuigdnF2F5mGtIWZz8sxzDlrFu+wRo4iQvU5A8Enwm4VX1wtjQV\nWW4DjPicPWwtuJXMFBDMYie0tKEj2I65+HFi+6Z5fjxug9IP7S76J/xKMF2o\n7hRL7Qx4zxcambG1oXsjonYBOPbrQ/YfIPmRsyEyW4lbOnq6ETs0nvUzXj7G\nyJhtRXd1JEVZooDYfnj9TMvxm7vAq2fB+m1dc8oahoYXgaGDCjN3NVQROC0k\nt+sWDPawcXtb6jFcXfh9mwEIwW9T+582u7ofS1nWfL8Jj5+XpAasI9RpPZ2S\n8HMgfh93gNK1WRuG3FCgy+ptp3B4DrTE5vWcZfxEikI8+UJtzwrO8itu5SQE\n6/AmmZP6UfLOvP+aRNnV6m67Ravwvrf5QmY3Q0gqGot5IvQ13z2daMVI1cM8\nJ4jhp1w3Dw8K+nwZV2rHl38ZyyiAqpKy/YTUFmNIgSVT/2mfRkDkysw59GZl\n6mkxLjauToYHKzoPMiQdgcuQhd/SXyXgBG6UvOXgZ2ynjsnqZsJ8KYl6luBu\ndVq4I8ocQftGZauJWP9kg6INm6anx/4wpzc8vRZudl8sARiLob0x/2NUvJU0\niblTuq9Y41nC9tYRZWHfUl2WrTUlEpMUTK/toTmuvzuw+WnbQwOxlseRYi2B\nU9tB\r\n=Suzf\r\n-----END PGP SIGNATURE-----\r\n","integrity":"sha512-7Ycxqn+lnAh7tImNfzb9vriac3mgZ8pf5P7wAdRxYk6eZRlisP9G7+Ikl0EgU4uZVMhTCwc8b80M4UHUw5J6cA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIH+95M7ozEo/jemsDvDnRKuWTXvF+JWGbRLq17lpq6MSAiEA9wE0TN8blXOXWUIpK/pQvsTNfOJNDRUBtJpwmNqEyUQ="}]},"maintainers":[{"email":"aaron@abramov.io","name":"aaronabramov"},{"email":"christoph.pojer@gmail.com","name":"cpojer"},{"email":"opensource+npm@fb.com","name":"fb"},{"email":"jean@lauliac.com","name":"jeanlauliac"},{"email":"mjesun@hotmail.com","name":"mjesun"}],"_npmUser":{"name":"mjesun","email":"mjesun@hotmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pretty-format_23.0.0-beta.0_1524219047082_0.4477683770943728"},"_hasShrinkwrap":false},"23.0.0-beta.1":{"name":"pretty-format","version":"23.0.0-beta.1","repository":{"type":"git","url":"https://github.com/facebook/jest.git"},"license":"MIT","description":"Stringify any JavaScript value.","main":"build/index.js","browser":"build-es5/index.js","author":{"name":"James Kyle","email":"me@thejameskyle.com"},"dependencies":{"ansi-regex":"^3.0.0","ansi-styles":"^3.2.0"},"readmeFilename":"README.md","readme":"# pretty-format\n\n> Stringify any JavaScript value.\n\n* Supports all built-in JavaScript types\n * primitive types: `Boolean`, `null`, `Number`, `String`, `Symbol`,\n `undefined`\n * other non-collection types: `Date`, `Error`, `Function`, `RegExp`\n * collection types:\n * `arguments`, `Array`, `ArrayBuffer`, `DataView`, `Float32Array`,\n `Float64Array`, `Int8Array`, `Int16Array`, `Int32Array`, `Uint8Array`,\n `Uint8ClampedArray`, `Uint16Array`, `Uint32Array`,\n * `Map`, `Set`, `WeakMap`, `WeakSet`\n * `Object`\n* [Blazingly fast](https://gist.github.com/thejameskyle/2b04ffe4941aafa8f970de077843a8fd)\n * similar performance to `JSON.stringify` in v8\n * significantly faster than `util.format` in Node.js\n* Serialize application-specific data types with built-in or user-defined\n plugins\n\n## Installation\n\n```sh\n$ yarn add pretty-format\n```\n\n## Usage\n\n```js\nconst prettyFormat = require('pretty-format'); // CommonJS\n```\n\n```js\nimport prettyFormat from 'pretty-format'; // ES2015 modules\n```\n\n```js\nconst val = {object: {}};\nval.circularReference = val;\nval[Symbol('foo')] = 'foo';\nval.map = new Map([['prop', 'value']]);\nval.array = [-0, Infinity, NaN];\n\nconsole.log(prettyFormat(val));\n/*\nObject {\n \"array\": Array [\n -0,\n Infinity,\n NaN,\n ],\n \"circularReference\": [Circular],\n \"map\": Map {\n \"prop\" => \"value\",\n },\n \"object\": Object {},\n Symbol(foo): \"foo\",\n}\n*/\n```\n\n## Usage with options\n\n```js\nfunction onClick() {}\n\nconsole.log(prettyFormat(onClick));\n/*\n[Function onClick]\n*/\n\nconst options = {\n printFunctionName: false,\n};\nconsole.log(prettyFormat(onClick, options));\n/*\n[Function]\n*/\n```\n\n| key | type | default | description |\n| :------------------ | :-------- | :--------- | :------------------------------------------------------ |\n| `callToJSON` | `boolean` | `true` | call `toJSON` method (if it exists) on objects |\n| `escapeRegex` | `boolean` | `false` | escape special characters in regular expressions |\n| `highlight` | `boolean` | `false` | highlight syntax with colors in terminal (some plugins) |\n| `indent` | `number` | `2` | spaces in each level of indentation |\n| `maxDepth` | `number` | `Infinity` | levels to print in arrays, objects, elements, and so on |\n| `min` | `boolean` | `false` | minimize added space: no indentation nor line breaks |\n| `plugins` | `array` | `[]` | plugins to serialize application-specific data types |\n| `printFunctionName` | `boolean` | `true` | include or omit the name of a function |\n| `theme` | `object` | | colors to highlight syntax in terminal |\n\nProperty values of `theme` are from\n[ansi-styles colors](https://github.com/chalk/ansi-styles#colors)\n\n```js\nconst DEFAULT_THEME = {\n comment: 'gray',\n content: 'reset',\n prop: 'yellow',\n tag: 'cyan',\n value: 'green',\n};\n```\n\n## Usage with plugins\n\nThe `pretty-format` package provides some built-in plugins, including:\n\n* `ReactElement` for elements from `react`\n* `ReactTestComponent` for test objects from `react-test-renderer`\n\n```js\n// CommonJS\nconst prettyFormat = require('pretty-format');\nconst ReactElement = prettyFormat.plugins.ReactElement;\nconst ReactTestComponent = prettyFormat.plugins.ReactTestComponent;\n\nconst React = require('react');\nconst renderer = require('react-test-renderer');\n```\n\n```js\n// ES2015 modules and destructuring assignment\nimport prettyFormat from 'pretty-format';\nconst {ReactElement, ReactTestComponent} = prettyFormat.plugins;\n\nimport React from 'react';\nimport renderer from 'react-test-renderer';\n```\n\n```js\nconst onClick = () => {};\nconst element = React.createElement('button', {onClick}, 'Hello World');\n\nconst formatted1 = prettyFormat(element, {\n plugins: [ReactElement],\n printFunctionName: false,\n});\nconst formatted2 = prettyFormat(renderer.create(element).toJSON(), {\n plugins: [ReactTestComponent],\n printFunctionName: false,\n});\n/*\n\n*/\n```\n\n## Usage in Jest\n\nFor snapshot tests, Jest uses `pretty-format` with options that include some of\nits built-in plugins. For this purpose, plugins are also known as **snapshot\nserializers**.\n\nTo serialize application-specific data types, you can add modules to\n`devDependencies` of a project, and then:\n\nIn an **individual** test file, you can add a module as follows. It precedes any\nmodules from Jest configuration.\n\n```js\nimport serializer from 'my-serializer-module';\nexpect.addSnapshotSerializer(serializer);\n\n// tests which have `expect(value).toMatchSnapshot()` assertions\n```\n\nFor **all** test files, you can specify modules in Jest configuration. They\nprecede built-in plugins for React, HTML, and Immutable.js data types. For\nexample, in a `package.json` file:\n\n```json\n{\n \"jest\": {\n \"snapshotSerializers\": [\"my-serializer-module\"]\n }\n}\n```\n\n## Writing plugins\n\nA plugin is a JavaScript object.\n\nIf `options` has a `plugins` array: for the first plugin whose `test(val)`\nmethod returns a truthy value, then `prettyFormat(val, options)` returns the\nresult from either:\n\n* `serialize(val, …)` method of the **improved** interface (available in\n **version 21** or later)\n* `print(val, …)` method of the **original** interface (if plugin does not have\n `serialize` method)\n\n### test\n\nWrite `test` so it can receive `val` argument of any type. To serialize\n**objects** which have certain properties, then a guarded expression like\n`val != null && …` or more concise `val && …` prevents the following errors:\n\n* `TypeError: Cannot read property 'whatever' of null`\n* `TypeError: Cannot read property 'whatever' of undefined`\n\nFor example, `test` method of built-in `ReactElement` plugin:\n\n```js\nconst elementSymbol = Symbol.for('react.element');\nconst test = val => val && val.$$typeof === elementSymbol;\n```\n\nPay attention to efficiency in `test` because `pretty-format` calls it often.\n\n### serialize\n\nThe **improved** interface is available in **version 21** or later.\n\nWrite `serialize` to return a string, given the arguments:\n\n* `val` which “passed the test”\n* unchanging `config` object: derived from `options`\n* current `indentation` string: concatenate to `indent` from `config`\n* current `depth` number: compare to `maxDepth` from `config`\n* current `refs` array: find circular references in objects\n* `printer` callback function: serialize children\n\n### config\n\n| key | type | description |\n| :------------------ | :-------- | :------------------------------------------------------ |\n| `callToJSON` | `boolean` | call `toJSON` method (if it exists) on objects |\n| `colors` | `Object` | escape codes for colors to highlight syntax |\n| `escapeRegex` | `boolean` | escape special characters in regular expressions |\n| `indent` | `string` | spaces in each level of indentation |\n| `maxDepth` | `number` | levels to print in arrays, objects, elements, and so on |\n| `min` | `boolean` | minimize added space: no indentation nor line breaks |\n| `plugins` | `array` | plugins to serialize application-specific data types |\n| `printFunctionName` | `boolean` | include or omit the name of a function |\n| `spacingInner` | `strong` | spacing to separate items in a list |\n| `spacingOuter` | `strong` | spacing to enclose a list of items |\n\nEach property of `colors` in `config` corresponds to a property of `theme` in\n`options`:\n\n* the key is the same (for example, `tag`)\n* the value in `colors` is a object with `open` and `close` properties whose\n values are escape codes from\n [ansi-styles](https://github.com/chalk/ansi-styles) for the color value in\n `theme` (for example, `'cyan'`)\n\nSome properties in `config` are derived from `min` in `options`:\n\n* `spacingInner` and `spacingOuter` are **newline** if `min` is `false`\n* `spacingInner` is **space** and `spacingOuter` is **empty string** if `min` is\n `true`\n\n### Example of serialize and test\n\nThis plugin is a pattern you can apply to serialize composite data types. Of\ncourse, `pretty-format` does not need a plugin to serialize arrays :)\n\n```js\n// We reused more code when we factored out a function for child items\n// that is independent of depth, name, and enclosing punctuation (see below).\nconst SEPARATOR = ',';\nfunction serializeItems(items, config, indentation, depth, refs, printer) {\n if (items.length === 0) {\n return '';\n }\n const indentationItems = indentation + config.indent;\n return (\n config.spacingOuter +\n items\n .map(\n item =>\n indentationItems +\n printer(item, config, indentationItems, depth, refs), // callback\n )\n .join(SEPARATOR + config.spacingInner) +\n (config.min ? '' : SEPARATOR) + // following the last item\n config.spacingOuter +\n indentation\n );\n}\n\nconst plugin = {\n test(val) {\n return Array.isArray(val);\n },\n serialize(array, config, indentation, depth, refs, printer) {\n const name = array.constructor.name;\n return ++depth > config.maxDepth\n ? '[' + name + ']'\n : (config.min ? '' : name + ' ') +\n '[' +\n serializeItems(array, config, indentation, depth, refs, printer) +\n ']';\n },\n};\n```\n\n```js\nconst val = {\n filter: 'completed',\n items: [\n {\n text: 'Write test',\n completed: true,\n },\n {\n text: 'Write serialize',\n completed: true,\n },\n ],\n};\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n plugins: [plugin],\n }),\n);\n/*\nObject {\n \"filter\": \"completed\",\n \"items\": Array [\n Object {\n \"completed\": true,\n \"text\": \"Write test\",\n },\n Object {\n \"completed\": true,\n \"text\": \"Write serialize\",\n },\n ],\n}\n*/\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n indent: 4,\n plugins: [plugin],\n }),\n);\n/*\nObject {\n \"filter\": \"completed\",\n \"items\": Array [\n Object {\n \"completed\": true,\n \"text\": \"Write test\",\n },\n Object {\n \"completed\": true,\n \"text\": \"Write serialize\",\n },\n ],\n}\n*/\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n maxDepth: 1,\n plugins: [plugin],\n }),\n);\n/*\nObject {\n \"filter\": \"completed\",\n \"items\": [Array],\n}\n*/\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n min: true,\n plugins: [plugin],\n }),\n);\n/*\n{\"filter\": \"completed\", \"items\": [{\"completed\": true, \"text\": \"Write test\"}, {\"completed\": true, \"text\": \"Write serialize\"}]}\n*/\n```\n\n### print\n\nThe **original** interface is adequate for plugins:\n\n* that **do not** depend on options other than `highlight` or `min`\n* that **do not** depend on `depth` or `refs` in recursive traversal, and\n* if values either\n * do **not** require indentation, or\n * do **not** occur as children of JavaScript data structures (for example,\n array)\n\nWrite `print` to return a string, given the arguments:\n\n* `val` which “passed the test”\n* current `printer(valChild)` callback function: serialize children\n* current `indenter(lines)` callback function: indent lines at the next level\n* unchanging `config` object: derived from `options`\n* unchanging `colors` object: derived from `options`\n\nThe 3 properties of `config` are `min` in `options` and:\n\n* `spacing` and `edgeSpacing` are **newline** if `min` is `false`\n* `spacing` is **space** and `edgeSpacing` is **empty string** if `min` is\n `true`\n\nEach property of `colors` corresponds to a property of `theme` in `options`:\n\n* the key is the same (for example, `tag`)\n* the value in `colors` is a object with `open` and `close` properties whose\n values are escape codes from\n [ansi-styles](https://github.com/chalk/ansi-styles) for the color value in\n `theme` (for example, `'cyan'`)\n\n### Example of print and test\n\nThis plugin prints functions with the **number of named arguments** excluding\nrest argument.\n\n```js\nconst plugin = {\n print(val) {\n return `[Function ${val.name || 'anonymous'} ${val.length}]`;\n },\n test(val) {\n return typeof val === 'function';\n },\n};\n```\n\n```js\nconst val = {\n onClick(event) {},\n render() {},\n};\n\nprettyFormat(val, {\n plugins: [plugin],\n});\n/*\nObject {\n \"onClick\": [Function onClick 1],\n \"render\": [Function render 0],\n}\n*/\n\nprettyFormat(val);\n/*\nObject {\n \"onClick\": [Function onClick],\n \"render\": [Function render],\n}\n*/\n```\n\nThis plugin **ignores** the `printFunctionName` option. That limitation of the\noriginal `print` interface is a reason to use the improved `serialize`\ninterface, described above.\n\n```js\nprettyFormat(val, {\n plugins: [pluginOld],\n printFunctionName: false,\n});\n/*\nObject {\n \"onClick\": [Function onClick 1],\n \"render\": [Function render 0],\n}\n*/\n\nprettyFormat(val, {\n printFunctionName: false,\n});\n/*\nObject {\n \"onClick\": [Function],\n \"render\": [Function],\n}\n*/\n```\n","_id":"pretty-format@23.0.0-beta.1","dist":{"shasum":"f71c105088a74509cf8a8df49612abaf00b017a4","tarball":"http://localhost:4545/npm/registry/pretty-format/pretty-format-23.0.0-beta.1.tgz","fileCount":23,"unpackedSize":430761,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJa21xZCRA9TVsSAnZWagAAmSMQAJzRYkBOP8uz2KDASqul\nSAlD8q5ori+cvPFVmMA8kKszoTdZspxpUW8aj6EaamKqum8U/Gqykigh2p91\n9RY+AqHTN0TJm9EzGAr93kSSsEjnLhsimJLeFg4kXLdR3pUPT4jX6ejyfwTo\nQ7sIJFpBIINKeG6vpE+U5hnb49dhFnHKrzHQvMpdJxEcJO6UlAfkzQYBphd/\nCVzv7ECFAhOrsdTU1pt+eT1uhIuUWRANKRohAaPf8N3t45auPjn2KY2fcOow\nb+GppWYx5CwxcnptiuE8mRh+p5BZg650C6Lc15Mgp/t9loPiGREmadInE1t0\nnoICUGyNFENw1hlxmd0VrAtYRIxaJxHHXc6kQo1Jf8C6JMEGq9eMbAYFicuL\nxzkpyF/oLChM+JoOa3PQF6NyRGUgLSKYDJpNng7ssGp2fmezg31Px0sy+C0L\n152CQwOlxg3JSSbNg7rzM+WDIrP7MaxtPTmyNxevq+AAHca3oCkSQD5i2cbU\n2b+k5v3GIhjJUo15jkvsvWeEk87D9ls9O0Somd+upm2A0Xc7WMK4l7HJTAwC\nX1Wpoi5kwEK+eU+wOTQ5VEF4hczdL0RyplSSCD7RkT2OaFWWPIpE6/AbVtQU\nzLqKlavOGruO9NC/bTOQCGuDBU0hxZoEidd3gYtGJGnYbjAcvEcG4F+7GboY\nOB48\r\n=wVW6\r\n-----END PGP SIGNATURE-----\r\n","integrity":"sha512-YCFu9EMnxX+9JdssqmXiPj0jfjXoWJLilRHCfIFQwoG7ropfYbzlyY7z+gP6L6Mtmwk7rErXgP/0XtQY/auxXg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDH7nhvQa8MLJpyDnnMZ5p618rg9nVvDTbyiwowKfiWRQIhALw5PHW4W+L1ji7di+eW7b+2PCrbe2bxOc2VOI32mrb5"}]},"maintainers":[{"email":"aaron@abramov.io","name":"aaronabramov"},{"email":"christoph.pojer@gmail.com","name":"cpojer"},{"email":"opensource+npm@fb.com","name":"fb"},{"email":"jean@lauliac.com","name":"jeanlauliac"},{"email":"mjesun@hotmail.com","name":"mjesun"}],"_npmUser":{"name":"mjesun","email":"mjesun@hotmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pretty-format_23.0.0-beta.1_1524325464570_0.7195881897469456"},"_hasShrinkwrap":false},"23.0.0-beta.2":{"name":"pretty-format","version":"23.0.0-beta.2","repository":{"type":"git","url":"https://github.com/facebook/jest.git"},"license":"MIT","description":"Stringify any JavaScript value.","main":"build/index.js","browser":"build-es5/index.js","author":{"name":"James Kyle","email":"me@thejameskyle.com"},"dependencies":{"ansi-regex":"^3.0.0","ansi-styles":"^3.2.0"},"readmeFilename":"README.md","readme":"# pretty-format\n\n> Stringify any JavaScript value.\n\n* Supports all built-in JavaScript types\n * primitive types: `Boolean`, `null`, `Number`, `String`, `Symbol`,\n `undefined`\n * other non-collection types: `Date`, `Error`, `Function`, `RegExp`\n * collection types:\n * `arguments`, `Array`, `ArrayBuffer`, `DataView`, `Float32Array`,\n `Float64Array`, `Int8Array`, `Int16Array`, `Int32Array`, `Uint8Array`,\n `Uint8ClampedArray`, `Uint16Array`, `Uint32Array`,\n * `Map`, `Set`, `WeakMap`, `WeakSet`\n * `Object`\n* [Blazingly fast](https://gist.github.com/thejameskyle/2b04ffe4941aafa8f970de077843a8fd)\n * similar performance to `JSON.stringify` in v8\n * significantly faster than `util.format` in Node.js\n* Serialize application-specific data types with built-in or user-defined\n plugins\n\n## Installation\n\n```sh\n$ yarn add pretty-format\n```\n\n## Usage\n\n```js\nconst prettyFormat = require('pretty-format'); // CommonJS\n```\n\n```js\nimport prettyFormat from 'pretty-format'; // ES2015 modules\n```\n\n```js\nconst val = {object: {}};\nval.circularReference = val;\nval[Symbol('foo')] = 'foo';\nval.map = new Map([['prop', 'value']]);\nval.array = [-0, Infinity, NaN];\n\nconsole.log(prettyFormat(val));\n/*\nObject {\n \"array\": Array [\n -0,\n Infinity,\n NaN,\n ],\n \"circularReference\": [Circular],\n \"map\": Map {\n \"prop\" => \"value\",\n },\n \"object\": Object {},\n Symbol(foo): \"foo\",\n}\n*/\n```\n\n## Usage with options\n\n```js\nfunction onClick() {}\n\nconsole.log(prettyFormat(onClick));\n/*\n[Function onClick]\n*/\n\nconst options = {\n printFunctionName: false,\n};\nconsole.log(prettyFormat(onClick, options));\n/*\n[Function]\n*/\n```\n\n| key | type | default | description |\n| :------------------ | :-------- | :--------- | :------------------------------------------------------ |\n| `callToJSON` | `boolean` | `true` | call `toJSON` method (if it exists) on objects |\n| `escapeRegex` | `boolean` | `false` | escape special characters in regular expressions |\n| `highlight` | `boolean` | `false` | highlight syntax with colors in terminal (some plugins) |\n| `indent` | `number` | `2` | spaces in each level of indentation |\n| `maxDepth` | `number` | `Infinity` | levels to print in arrays, objects, elements, and so on |\n| `min` | `boolean` | `false` | minimize added space: no indentation nor line breaks |\n| `plugins` | `array` | `[]` | plugins to serialize application-specific data types |\n| `printFunctionName` | `boolean` | `true` | include or omit the name of a function |\n| `theme` | `object` | | colors to highlight syntax in terminal |\n\nProperty values of `theme` are from\n[ansi-styles colors](https://github.com/chalk/ansi-styles#colors)\n\n```js\nconst DEFAULT_THEME = {\n comment: 'gray',\n content: 'reset',\n prop: 'yellow',\n tag: 'cyan',\n value: 'green',\n};\n```\n\n## Usage with plugins\n\nThe `pretty-format` package provides some built-in plugins, including:\n\n* `ReactElement` for elements from `react`\n* `ReactTestComponent` for test objects from `react-test-renderer`\n\n```js\n// CommonJS\nconst prettyFormat = require('pretty-format');\nconst ReactElement = prettyFormat.plugins.ReactElement;\nconst ReactTestComponent = prettyFormat.plugins.ReactTestComponent;\n\nconst React = require('react');\nconst renderer = require('react-test-renderer');\n```\n\n```js\n// ES2015 modules and destructuring assignment\nimport prettyFormat from 'pretty-format';\nconst {ReactElement, ReactTestComponent} = prettyFormat.plugins;\n\nimport React from 'react';\nimport renderer from 'react-test-renderer';\n```\n\n```js\nconst onClick = () => {};\nconst element = React.createElement('button', {onClick}, 'Hello World');\n\nconst formatted1 = prettyFormat(element, {\n plugins: [ReactElement],\n printFunctionName: false,\n});\nconst formatted2 = prettyFormat(renderer.create(element).toJSON(), {\n plugins: [ReactTestComponent],\n printFunctionName: false,\n});\n/*\n\n*/\n```\n\n## Usage in Jest\n\nFor snapshot tests, Jest uses `pretty-format` with options that include some of\nits built-in plugins. For this purpose, plugins are also known as **snapshot\nserializers**.\n\nTo serialize application-specific data types, you can add modules to\n`devDependencies` of a project, and then:\n\nIn an **individual** test file, you can add a module as follows. It precedes any\nmodules from Jest configuration.\n\n```js\nimport serializer from 'my-serializer-module';\nexpect.addSnapshotSerializer(serializer);\n\n// tests which have `expect(value).toMatchSnapshot()` assertions\n```\n\nFor **all** test files, you can specify modules in Jest configuration. They\nprecede built-in plugins for React, HTML, and Immutable.js data types. For\nexample, in a `package.json` file:\n\n```json\n{\n \"jest\": {\n \"snapshotSerializers\": [\"my-serializer-module\"]\n }\n}\n```\n\n## Writing plugins\n\nA plugin is a JavaScript object.\n\nIf `options` has a `plugins` array: for the first plugin whose `test(val)`\nmethod returns a truthy value, then `prettyFormat(val, options)` returns the\nresult from either:\n\n* `serialize(val, …)` method of the **improved** interface (available in\n **version 21** or later)\n* `print(val, …)` method of the **original** interface (if plugin does not have\n `serialize` method)\n\n### test\n\nWrite `test` so it can receive `val` argument of any type. To serialize\n**objects** which have certain properties, then a guarded expression like\n`val != null && …` or more concise `val && …` prevents the following errors:\n\n* `TypeError: Cannot read property 'whatever' of null`\n* `TypeError: Cannot read property 'whatever' of undefined`\n\nFor example, `test` method of built-in `ReactElement` plugin:\n\n```js\nconst elementSymbol = Symbol.for('react.element');\nconst test = val => val && val.$$typeof === elementSymbol;\n```\n\nPay attention to efficiency in `test` because `pretty-format` calls it often.\n\n### serialize\n\nThe **improved** interface is available in **version 21** or later.\n\nWrite `serialize` to return a string, given the arguments:\n\n* `val` which “passed the test”\n* unchanging `config` object: derived from `options`\n* current `indentation` string: concatenate to `indent` from `config`\n* current `depth` number: compare to `maxDepth` from `config`\n* current `refs` array: find circular references in objects\n* `printer` callback function: serialize children\n\n### config\n\n| key | type | description |\n| :------------------ | :-------- | :------------------------------------------------------ |\n| `callToJSON` | `boolean` | call `toJSON` method (if it exists) on objects |\n| `colors` | `Object` | escape codes for colors to highlight syntax |\n| `escapeRegex` | `boolean` | escape special characters in regular expressions |\n| `indent` | `string` | spaces in each level of indentation |\n| `maxDepth` | `number` | levels to print in arrays, objects, elements, and so on |\n| `min` | `boolean` | minimize added space: no indentation nor line breaks |\n| `plugins` | `array` | plugins to serialize application-specific data types |\n| `printFunctionName` | `boolean` | include or omit the name of a function |\n| `spacingInner` | `strong` | spacing to separate items in a list |\n| `spacingOuter` | `strong` | spacing to enclose a list of items |\n\nEach property of `colors` in `config` corresponds to a property of `theme` in\n`options`:\n\n* the key is the same (for example, `tag`)\n* the value in `colors` is a object with `open` and `close` properties whose\n values are escape codes from\n [ansi-styles](https://github.com/chalk/ansi-styles) for the color value in\n `theme` (for example, `'cyan'`)\n\nSome properties in `config` are derived from `min` in `options`:\n\n* `spacingInner` and `spacingOuter` are **newline** if `min` is `false`\n* `spacingInner` is **space** and `spacingOuter` is **empty string** if `min` is\n `true`\n\n### Example of serialize and test\n\nThis plugin is a pattern you can apply to serialize composite data types. Of\ncourse, `pretty-format` does not need a plugin to serialize arrays :)\n\n```js\n// We reused more code when we factored out a function for child items\n// that is independent of depth, name, and enclosing punctuation (see below).\nconst SEPARATOR = ',';\nfunction serializeItems(items, config, indentation, depth, refs, printer) {\n if (items.length === 0) {\n return '';\n }\n const indentationItems = indentation + config.indent;\n return (\n config.spacingOuter +\n items\n .map(\n item =>\n indentationItems +\n printer(item, config, indentationItems, depth, refs), // callback\n )\n .join(SEPARATOR + config.spacingInner) +\n (config.min ? '' : SEPARATOR) + // following the last item\n config.spacingOuter +\n indentation\n );\n}\n\nconst plugin = {\n test(val) {\n return Array.isArray(val);\n },\n serialize(array, config, indentation, depth, refs, printer) {\n const name = array.constructor.name;\n return ++depth > config.maxDepth\n ? '[' + name + ']'\n : (config.min ? '' : name + ' ') +\n '[' +\n serializeItems(array, config, indentation, depth, refs, printer) +\n ']';\n },\n};\n```\n\n```js\nconst val = {\n filter: 'completed',\n items: [\n {\n text: 'Write test',\n completed: true,\n },\n {\n text: 'Write serialize',\n completed: true,\n },\n ],\n};\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n plugins: [plugin],\n }),\n);\n/*\nObject {\n \"filter\": \"completed\",\n \"items\": Array [\n Object {\n \"completed\": true,\n \"text\": \"Write test\",\n },\n Object {\n \"completed\": true,\n \"text\": \"Write serialize\",\n },\n ],\n}\n*/\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n indent: 4,\n plugins: [plugin],\n }),\n);\n/*\nObject {\n \"filter\": \"completed\",\n \"items\": Array [\n Object {\n \"completed\": true,\n \"text\": \"Write test\",\n },\n Object {\n \"completed\": true,\n \"text\": \"Write serialize\",\n },\n ],\n}\n*/\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n maxDepth: 1,\n plugins: [plugin],\n }),\n);\n/*\nObject {\n \"filter\": \"completed\",\n \"items\": [Array],\n}\n*/\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n min: true,\n plugins: [plugin],\n }),\n);\n/*\n{\"filter\": \"completed\", \"items\": [{\"completed\": true, \"text\": \"Write test\"}, {\"completed\": true, \"text\": \"Write serialize\"}]}\n*/\n```\n\n### print\n\nThe **original** interface is adequate for plugins:\n\n* that **do not** depend on options other than `highlight` or `min`\n* that **do not** depend on `depth` or `refs` in recursive traversal, and\n* if values either\n * do **not** require indentation, or\n * do **not** occur as children of JavaScript data structures (for example,\n array)\n\nWrite `print` to return a string, given the arguments:\n\n* `val` which “passed the test”\n* current `printer(valChild)` callback function: serialize children\n* current `indenter(lines)` callback function: indent lines at the next level\n* unchanging `config` object: derived from `options`\n* unchanging `colors` object: derived from `options`\n\nThe 3 properties of `config` are `min` in `options` and:\n\n* `spacing` and `edgeSpacing` are **newline** if `min` is `false`\n* `spacing` is **space** and `edgeSpacing` is **empty string** if `min` is\n `true`\n\nEach property of `colors` corresponds to a property of `theme` in `options`:\n\n* the key is the same (for example, `tag`)\n* the value in `colors` is a object with `open` and `close` properties whose\n values are escape codes from\n [ansi-styles](https://github.com/chalk/ansi-styles) for the color value in\n `theme` (for example, `'cyan'`)\n\n### Example of print and test\n\nThis plugin prints functions with the **number of named arguments** excluding\nrest argument.\n\n```js\nconst plugin = {\n print(val) {\n return `[Function ${val.name || 'anonymous'} ${val.length}]`;\n },\n test(val) {\n return typeof val === 'function';\n },\n};\n```\n\n```js\nconst val = {\n onClick(event) {},\n render() {},\n};\n\nprettyFormat(val, {\n plugins: [plugin],\n});\n/*\nObject {\n \"onClick\": [Function onClick 1],\n \"render\": [Function render 0],\n}\n*/\n\nprettyFormat(val);\n/*\nObject {\n \"onClick\": [Function onClick],\n \"render\": [Function render],\n}\n*/\n```\n\nThis plugin **ignores** the `printFunctionName` option. That limitation of the\noriginal `print` interface is a reason to use the improved `serialize`\ninterface, described above.\n\n```js\nprettyFormat(val, {\n plugins: [pluginOld],\n printFunctionName: false,\n});\n/*\nObject {\n \"onClick\": [Function onClick 1],\n \"render\": [Function render 0],\n}\n*/\n\nprettyFormat(val, {\n printFunctionName: false,\n});\n/*\nObject {\n \"onClick\": [Function],\n \"render\": [Function],\n}\n*/\n```\n","_id":"pretty-format@23.0.0-beta.2","dist":{"shasum":"fe04b98bfb7ae8ec7a46615f36c36901b59de5a9","tarball":"http://localhost:4545/npm/registry/pretty-format/pretty-format-23.0.0-beta.2.tgz","fileCount":23,"unpackedSize":431340,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJa4kHyCRA9TVsSAnZWagAASOUP/i9yKW6fs3PyOCjaCzUP\nyCLh+46gg7/9KXJwxC7kgP/UPK341Cf1MlGZdWxcckBTah7qlptLsm/ubS+o\nHDmaWjO0APIN4iCx5YgVDZjvsOHBkV05/+LVeH10VNQ/u7V2z65WSxBq3PRO\nggukLHxsX0JVkebUKs2hp+GZ8XalCdvPTQYmxE+Gptl5Vr9N3jwhEqrr2Uj6\nVx90GF7Wz+fTpHSIlXeDJ9ydRgHVbzqKf9AbYVLPUR0/mCdLqvDqW6xhj0/D\n2kXRyHmZaLe35C8AtZH6ToJ8d0x4n8hx3x0QfCV2doMUpaKHb//4qQMA0vad\nddluiVkfOC89FKDTuq/OssH4jTwelE3zgYyOKQvSZF8kAwnePbJf87pZ8QKT\nAgZPmTzbU1J4yuZFCxCF6wWInZpRG3twwlXrtvhWsfa5d0MtywP/TAc8VeS+\nP+quXaVEs+4ekMQRR77FJewpkdZEYlcZ27CPsj++WECYaIhRrxIEjf0OksGN\n8Rc9fEnHUqJ8IJpGMHpY9E0KP3mdiowah7tFsdkdwQvtQnekI8Fk4UVfiWLD\nQiLNKlfLN50OcDaV7u7xqPXYnKNxGsAgvZKbtxXkbTBXigc6q137S53VPi6x\nZirTjAZUMtmxLopBNX3dvR/D0UWceFt79j2u8hiJeah4Zx8tZJ+7X0KUmu7A\ntY/y\r\n=fOfm\r\n-----END PGP SIGNATURE-----\r\n","integrity":"sha512-Nx2SZ0EifR9hoM8SrFPJWYnYa3zythw6r2F8Z/B/Kz4TLYlx6sfbR9HWyQ+HzyeHcExIcCdg2FG558T6jyXM/g==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDrn3niRS878Y09U9ms6tHo4qGqlOsmMEDij2GmTA+O0wIhAOWf782MfVaxrJ+dX2ubWnkFx1fefb7ErwAFCl+S8JLL"}]},"maintainers":[{"email":"aaron@abramov.io","name":"aaronabramov"},{"email":"christoph.pojer@gmail.com","name":"cpojer"},{"email":"opensource+npm@fb.com","name":"fb"},{"email":"jean@lauliac.com","name":"jeanlauliac"},{"email":"mjesun@hotmail.com","name":"mjesun"}],"_npmUser":{"name":"mjesun","email":"mjesun@hotmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pretty-format_23.0.0-beta.2_1524777457327_0.08931287476959171"},"_hasShrinkwrap":false},"23.0.0-alpha.3r":{"name":"pretty-format","version":"23.0.0-alpha.3r","repository":{"type":"git","url":"https://github.com/facebook/jest.git"},"license":"MIT","description":"Stringify any JavaScript value.","main":"build/index.js","browser":"build-es5/index.js","author":{"name":"James Kyle","email":"me@thejameskyle.com"},"dependencies":{"ansi-regex":"^3.0.0","ansi-styles":"^3.2.0"},"devDependencies":{"immutable":"^4.0.0-rc.9","react":"*","react-dom":"*","react-test-renderer":"*"},"readmeFilename":"README.md","readme":"# pretty-format\n\n> Stringify any JavaScript value.\n\n* Supports all built-in JavaScript types\n * primitive types: `Boolean`, `null`, `Number`, `String`, `Symbol`,\n `undefined`\n * other non-collection types: `Date`, `Error`, `Function`, `RegExp`\n * collection types:\n * `arguments`, `Array`, `ArrayBuffer`, `DataView`, `Float32Array`,\n `Float64Array`, `Int8Array`, `Int16Array`, `Int32Array`, `Uint8Array`,\n `Uint8ClampedArray`, `Uint16Array`, `Uint32Array`,\n * `Map`, `Set`, `WeakMap`, `WeakSet`\n * `Object`\n* [Blazingly fast](https://gist.github.com/thejameskyle/2b04ffe4941aafa8f970de077843a8fd)\n * similar performance to `JSON.stringify` in v8\n * significantly faster than `util.format` in Node.js\n* Serialize application-specific data types with built-in or user-defined\n plugins\n\n## Installation\n\n```sh\n$ yarn add pretty-format\n```\n\n## Usage\n\n```js\nconst prettyFormat = require('pretty-format'); // CommonJS\n```\n\n```js\nimport prettyFormat from 'pretty-format'; // ES2015 modules\n```\n\n```js\nconst val = {object: {}};\nval.circularReference = val;\nval[Symbol('foo')] = 'foo';\nval.map = new Map([['prop', 'value']]);\nval.array = [-0, Infinity, NaN];\n\nconsole.log(prettyFormat(val));\n/*\nObject {\n \"array\": Array [\n -0,\n Infinity,\n NaN,\n ],\n \"circularReference\": [Circular],\n \"map\": Map {\n \"prop\" => \"value\",\n },\n \"object\": Object {},\n Symbol(foo): \"foo\",\n}\n*/\n```\n\n## Usage with options\n\n```js\nfunction onClick() {}\n\nconsole.log(prettyFormat(onClick));\n/*\n[Function onClick]\n*/\n\nconst options = {\n printFunctionName: false,\n};\nconsole.log(prettyFormat(onClick, options));\n/*\n[Function]\n*/\n```\n\n| key | type | default | description |\n| :------------------ | :-------- | :--------- | :------------------------------------------------------ |\n| `callToJSON` | `boolean` | `true` | call `toJSON` method (if it exists) on objects |\n| `escapeRegex` | `boolean` | `false` | escape special characters in regular expressions |\n| `highlight` | `boolean` | `false` | highlight syntax with colors in terminal (some plugins) |\n| `indent` | `number` | `2` | spaces in each level of indentation |\n| `maxDepth` | `number` | `Infinity` | levels to print in arrays, objects, elements, and so on |\n| `min` | `boolean` | `false` | minimize added space: no indentation nor line breaks |\n| `plugins` | `array` | `[]` | plugins to serialize application-specific data types |\n| `printFunctionName` | `boolean` | `true` | include or omit the name of a function |\n| `theme` | `object` | | colors to highlight syntax in terminal |\n\nProperty values of `theme` are from\n[ansi-styles colors](https://github.com/chalk/ansi-styles#colors)\n\n```js\nconst DEFAULT_THEME = {\n comment: 'gray',\n content: 'reset',\n prop: 'yellow',\n tag: 'cyan',\n value: 'green',\n};\n```\n\n## Usage with plugins\n\nThe `pretty-format` package provides some built-in plugins, including:\n\n* `ReactElement` for elements from `react`\n* `ReactTestComponent` for test objects from `react-test-renderer`\n\n```js\n// CommonJS\nconst prettyFormat = require('pretty-format');\nconst ReactElement = prettyFormat.plugins.ReactElement;\nconst ReactTestComponent = prettyFormat.plugins.ReactTestComponent;\n\nconst React = require('react');\nconst renderer = require('react-test-renderer');\n```\n\n```js\n// ES2015 modules and destructuring assignment\nimport prettyFormat from 'pretty-format';\nconst {ReactElement, ReactTestComponent} = prettyFormat.plugins;\n\nimport React from 'react';\nimport renderer from 'react-test-renderer';\n```\n\n```js\nconst onClick = () => {};\nconst element = React.createElement('button', {onClick}, 'Hello World');\n\nconst formatted1 = prettyFormat(element, {\n plugins: [ReactElement],\n printFunctionName: false,\n});\nconst formatted2 = prettyFormat(renderer.create(element).toJSON(), {\n plugins: [ReactTestComponent],\n printFunctionName: false,\n});\n/*\n\n*/\n```\n\n## Usage in Jest\n\nFor snapshot tests, Jest uses `pretty-format` with options that include some of\nits built-in plugins. For this purpose, plugins are also known as **snapshot\nserializers**.\n\nTo serialize application-specific data types, you can add modules to\n`devDependencies` of a project, and then:\n\nIn an **individual** test file, you can add a module as follows. It precedes any\nmodules from Jest configuration.\n\n```js\nimport serializer from 'my-serializer-module';\nexpect.addSnapshotSerializer(serializer);\n\n// tests which have `expect(value).toMatchSnapshot()` assertions\n```\n\nFor **all** test files, you can specify modules in Jest configuration. They\nprecede built-in plugins for React, HTML, and Immutable.js data types. For\nexample, in a `package.json` file:\n\n```json\n{\n \"jest\": {\n \"snapshotSerializers\": [\"my-serializer-module\"]\n }\n}\n```\n\n## Writing plugins\n\nA plugin is a JavaScript object.\n\nIf `options` has a `plugins` array: for the first plugin whose `test(val)`\nmethod returns a truthy value, then `prettyFormat(val, options)` returns the\nresult from either:\n\n* `serialize(val, …)` method of the **improved** interface (available in\n **version 21** or later)\n* `print(val, …)` method of the **original** interface (if plugin does not have\n `serialize` method)\n\n### test\n\nWrite `test` so it can receive `val` argument of any type. To serialize\n**objects** which have certain properties, then a guarded expression like\n`val != null && …` or more concise `val && …` prevents the following errors:\n\n* `TypeError: Cannot read property 'whatever' of null`\n* `TypeError: Cannot read property 'whatever' of undefined`\n\nFor example, `test` method of built-in `ReactElement` plugin:\n\n```js\nconst elementSymbol = Symbol.for('react.element');\nconst test = val => val && val.$$typeof === elementSymbol;\n```\n\nPay attention to efficiency in `test` because `pretty-format` calls it often.\n\n### serialize\n\nThe **improved** interface is available in **version 21** or later.\n\nWrite `serialize` to return a string, given the arguments:\n\n* `val` which “passed the test”\n* unchanging `config` object: derived from `options`\n* current `indentation` string: concatenate to `indent` from `config`\n* current `depth` number: compare to `maxDepth` from `config`\n* current `refs` array: find circular references in objects\n* `printer` callback function: serialize children\n\n### config\n\n| key | type | description |\n| :------------------ | :-------- | :------------------------------------------------------ |\n| `callToJSON` | `boolean` | call `toJSON` method (if it exists) on objects |\n| `colors` | `Object` | escape codes for colors to highlight syntax |\n| `escapeRegex` | `boolean` | escape special characters in regular expressions |\n| `indent` | `string` | spaces in each level of indentation |\n| `maxDepth` | `number` | levels to print in arrays, objects, elements, and so on |\n| `min` | `boolean` | minimize added space: no indentation nor line breaks |\n| `plugins` | `array` | plugins to serialize application-specific data types |\n| `printFunctionName` | `boolean` | include or omit the name of a function |\n| `spacingInner` | `strong` | spacing to separate items in a list |\n| `spacingOuter` | `strong` | spacing to enclose a list of items |\n\nEach property of `colors` in `config` corresponds to a property of `theme` in\n`options`:\n\n* the key is the same (for example, `tag`)\n* the value in `colors` is a object with `open` and `close` properties whose\n values are escape codes from\n [ansi-styles](https://github.com/chalk/ansi-styles) for the color value in\n `theme` (for example, `'cyan'`)\n\nSome properties in `config` are derived from `min` in `options`:\n\n* `spacingInner` and `spacingOuter` are **newline** if `min` is `false`\n* `spacingInner` is **space** and `spacingOuter` is **empty string** if `min` is\n `true`\n\n### Example of serialize and test\n\nThis plugin is a pattern you can apply to serialize composite data types. Of\ncourse, `pretty-format` does not need a plugin to serialize arrays :)\n\n```js\n// We reused more code when we factored out a function for child items\n// that is independent of depth, name, and enclosing punctuation (see below).\nconst SEPARATOR = ',';\nfunction serializeItems(items, config, indentation, depth, refs, printer) {\n if (items.length === 0) {\n return '';\n }\n const indentationItems = indentation + config.indent;\n return (\n config.spacingOuter +\n items\n .map(\n item =>\n indentationItems +\n printer(item, config, indentationItems, depth, refs), // callback\n )\n .join(SEPARATOR + config.spacingInner) +\n (config.min ? '' : SEPARATOR) + // following the last item\n config.spacingOuter +\n indentation\n );\n}\n\nconst plugin = {\n test(val) {\n return Array.isArray(val);\n },\n serialize(array, config, indentation, depth, refs, printer) {\n const name = array.constructor.name;\n return ++depth > config.maxDepth\n ? '[' + name + ']'\n : (config.min ? '' : name + ' ') +\n '[' +\n serializeItems(array, config, indentation, depth, refs, printer) +\n ']';\n },\n};\n```\n\n```js\nconst val = {\n filter: 'completed',\n items: [\n {\n text: 'Write test',\n completed: true,\n },\n {\n text: 'Write serialize',\n completed: true,\n },\n ],\n};\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n plugins: [plugin],\n }),\n);\n/*\nObject {\n \"filter\": \"completed\",\n \"items\": Array [\n Object {\n \"completed\": true,\n \"text\": \"Write test\",\n },\n Object {\n \"completed\": true,\n \"text\": \"Write serialize\",\n },\n ],\n}\n*/\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n indent: 4,\n plugins: [plugin],\n }),\n);\n/*\nObject {\n \"filter\": \"completed\",\n \"items\": Array [\n Object {\n \"completed\": true,\n \"text\": \"Write test\",\n },\n Object {\n \"completed\": true,\n \"text\": \"Write serialize\",\n },\n ],\n}\n*/\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n maxDepth: 1,\n plugins: [plugin],\n }),\n);\n/*\nObject {\n \"filter\": \"completed\",\n \"items\": [Array],\n}\n*/\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n min: true,\n plugins: [plugin],\n }),\n);\n/*\n{\"filter\": \"completed\", \"items\": [{\"completed\": true, \"text\": \"Write test\"}, {\"completed\": true, \"text\": \"Write serialize\"}]}\n*/\n```\n\n### print\n\nThe **original** interface is adequate for plugins:\n\n* that **do not** depend on options other than `highlight` or `min`\n* that **do not** depend on `depth` or `refs` in recursive traversal, and\n* if values either\n * do **not** require indentation, or\n * do **not** occur as children of JavaScript data structures (for example,\n array)\n\nWrite `print` to return a string, given the arguments:\n\n* `val` which “passed the test”\n* current `printer(valChild)` callback function: serialize children\n* current `indenter(lines)` callback function: indent lines at the next level\n* unchanging `config` object: derived from `options`\n* unchanging `colors` object: derived from `options`\n\nThe 3 properties of `config` are `min` in `options` and:\n\n* `spacing` and `edgeSpacing` are **newline** if `min` is `false`\n* `spacing` is **space** and `edgeSpacing` is **empty string** if `min` is\n `true`\n\nEach property of `colors` corresponds to a property of `theme` in `options`:\n\n* the key is the same (for example, `tag`)\n* the value in `colors` is a object with `open` and `close` properties whose\n values are escape codes from\n [ansi-styles](https://github.com/chalk/ansi-styles) for the color value in\n `theme` (for example, `'cyan'`)\n\n### Example of print and test\n\nThis plugin prints functions with the **number of named arguments** excluding\nrest argument.\n\n```js\nconst plugin = {\n print(val) {\n return `[Function ${val.name || 'anonymous'} ${val.length}]`;\n },\n test(val) {\n return typeof val === 'function';\n },\n};\n```\n\n```js\nconst val = {\n onClick(event) {},\n render() {},\n};\n\nprettyFormat(val, {\n plugins: [plugin],\n});\n/*\nObject {\n \"onClick\": [Function onClick 1],\n \"render\": [Function render 0],\n}\n*/\n\nprettyFormat(val);\n/*\nObject {\n \"onClick\": [Function onClick],\n \"render\": [Function render],\n}\n*/\n```\n\nThis plugin **ignores** the `printFunctionName` option. That limitation of the\noriginal `print` interface is a reason to use the improved `serialize`\ninterface, described above.\n\n```js\nprettyFormat(val, {\n plugins: [pluginOld],\n printFunctionName: false,\n});\n/*\nObject {\n \"onClick\": [Function onClick 1],\n \"render\": [Function render 0],\n}\n*/\n\nprettyFormat(val, {\n printFunctionName: false,\n});\n/*\nObject {\n \"onClick\": [Function],\n \"render\": [Function],\n}\n*/\n```\n","_id":"pretty-format@23.0.0-alpha.3r","dist":{"shasum":"c32c5faf5cd5a88c2b286aefe061644df7e434ce","tarball":"http://localhost:4545/npm/registry/pretty-format/pretty-format-23.0.0-alpha.3r.tgz","fileCount":23,"unpackedSize":431479,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJa5xW1CRA9TVsSAnZWagAA01QP/jUGD8Ubf3M4dqFnp9KX\nU/s9YHJdtDFHQHZ6GynPJpzmAUhFnEDRWgyqgQf3r3417nUJ5V2A559vXtNI\nxaiaDS06mLjzt4iz9ZRNB+yFjxT4IZsXJpLxHMDhCsjI7L15wO4rigw7bSwi\nd+F9N5hcUvn/Zv6U89h9O8Rl2/Nz1yHHV7KFKw+KskR6cqyjFMYRkyeCYrCo\ny6N+8pophPxbEquafE2CkCeffCQlUvrdPODx+5BnSPPD1/w8FAP5rZpb+mEh\nKVP1wFPS43KIJDew5Q4TObnjiry5SvmzTyPSLsN9guQHReOTJ8zi3MN0HTUY\nne+TDlW718+KbRX5Y1KCA4oHCfnotTAQUpI5coCoFa7wivZ9XdCq2IZ7TWgH\nUL9PgFCn9KDDthQcsG1J2Nr9gejjDJw/abKc8Q91UUnWtcSUs2mHcsqXJAXu\ntciwnjweGGVt3QNQH5EjZOAzaF1HZiOYzK0W4ysy5/eVXxQX3lCKix4Q62nu\nWb1pbeUq3JXJ5JbMAillQQXSzMLrdCE2IuJntSfNA5obsWWwSbBsoajgqpmR\nTtbaJiT14jPWe3q9Uwgaeqagn4tc5fl53ISVw6EemQkdVNBx2SpTEkI2a/QF\nXPxi7hlyOuUmpk5tRq3TYWaiITi/EPDeLQ+UTBuKM6vXRPlruvMczaRNmXx8\n27dF\r\n=FTUG\r\n-----END PGP SIGNATURE-----\r\n","integrity":"sha512-KKH1MA8I4r2+nCE4N3z2mQ9CKe1346NVyBbuUMKZYoLVmSyYbDEGFrGY9Wswj0bDX3kq/XaOi5XSKSRfyT1dsw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGOQR9MNJrRjd7w6GpWdb5aNn8h+sId+jgjLgM4p3bLdAiAWx7TXkxhnSgyEioBxdFYZ45iZUeXVB0bzRcO/UKg/ww=="}]},"maintainers":[{"email":"aaron@abramov.io","name":"aaronabramov"},{"email":"christoph.pojer@gmail.com","name":"cpojer"},{"email":"opensource+npm@fb.com","name":"fb"},{"email":"jean@lauliac.com","name":"jeanlauliac"},{"email":"mjesun@hotmail.com","name":"mjesun"}],"_npmUser":{"name":"mjesun","email":"mjesun@hotmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pretty-format_23.0.0-alpha.3r_1525093812918_0.42840596561445365"},"_hasShrinkwrap":false},"23.0.0-beta.3r":{"name":"pretty-format","version":"23.0.0-beta.3r","repository":{"type":"git","url":"https://github.com/facebook/jest.git"},"license":"MIT","description":"Stringify any JavaScript value.","main":"build/index.js","browser":"build-es5/index.js","author":{"name":"James Kyle","email":"me@thejameskyle.com"},"dependencies":{"ansi-regex":"^3.0.0","ansi-styles":"^3.2.0"},"devDependencies":{"immutable":"^4.0.0-rc.9","react":"*","react-dom":"*","react-test-renderer":"*"},"readmeFilename":"README.md","readme":"# pretty-format\n\n> Stringify any JavaScript value.\n\n* Supports all built-in JavaScript types\n * primitive types: `Boolean`, `null`, `Number`, `String`, `Symbol`,\n `undefined`\n * other non-collection types: `Date`, `Error`, `Function`, `RegExp`\n * collection types:\n * `arguments`, `Array`, `ArrayBuffer`, `DataView`, `Float32Array`,\n `Float64Array`, `Int8Array`, `Int16Array`, `Int32Array`, `Uint8Array`,\n `Uint8ClampedArray`, `Uint16Array`, `Uint32Array`,\n * `Map`, `Set`, `WeakMap`, `WeakSet`\n * `Object`\n* [Blazingly fast](https://gist.github.com/thejameskyle/2b04ffe4941aafa8f970de077843a8fd)\n * similar performance to `JSON.stringify` in v8\n * significantly faster than `util.format` in Node.js\n* Serialize application-specific data types with built-in or user-defined\n plugins\n\n## Installation\n\n```sh\n$ yarn add pretty-format\n```\n\n## Usage\n\n```js\nconst prettyFormat = require('pretty-format'); // CommonJS\n```\n\n```js\nimport prettyFormat from 'pretty-format'; // ES2015 modules\n```\n\n```js\nconst val = {object: {}};\nval.circularReference = val;\nval[Symbol('foo')] = 'foo';\nval.map = new Map([['prop', 'value']]);\nval.array = [-0, Infinity, NaN];\n\nconsole.log(prettyFormat(val));\n/*\nObject {\n \"array\": Array [\n -0,\n Infinity,\n NaN,\n ],\n \"circularReference\": [Circular],\n \"map\": Map {\n \"prop\" => \"value\",\n },\n \"object\": Object {},\n Symbol(foo): \"foo\",\n}\n*/\n```\n\n## Usage with options\n\n```js\nfunction onClick() {}\n\nconsole.log(prettyFormat(onClick));\n/*\n[Function onClick]\n*/\n\nconst options = {\n printFunctionName: false,\n};\nconsole.log(prettyFormat(onClick, options));\n/*\n[Function]\n*/\n```\n\n| key | type | default | description |\n| :------------------ | :-------- | :--------- | :------------------------------------------------------ |\n| `callToJSON` | `boolean` | `true` | call `toJSON` method (if it exists) on objects |\n| `escapeRegex` | `boolean` | `false` | escape special characters in regular expressions |\n| `highlight` | `boolean` | `false` | highlight syntax with colors in terminal (some plugins) |\n| `indent` | `number` | `2` | spaces in each level of indentation |\n| `maxDepth` | `number` | `Infinity` | levels to print in arrays, objects, elements, and so on |\n| `min` | `boolean` | `false` | minimize added space: no indentation nor line breaks |\n| `plugins` | `array` | `[]` | plugins to serialize application-specific data types |\n| `printFunctionName` | `boolean` | `true` | include or omit the name of a function |\n| `theme` | `object` | | colors to highlight syntax in terminal |\n\nProperty values of `theme` are from\n[ansi-styles colors](https://github.com/chalk/ansi-styles#colors)\n\n```js\nconst DEFAULT_THEME = {\n comment: 'gray',\n content: 'reset',\n prop: 'yellow',\n tag: 'cyan',\n value: 'green',\n};\n```\n\n## Usage with plugins\n\nThe `pretty-format` package provides some built-in plugins, including:\n\n* `ReactElement` for elements from `react`\n* `ReactTestComponent` for test objects from `react-test-renderer`\n\n```js\n// CommonJS\nconst prettyFormat = require('pretty-format');\nconst ReactElement = prettyFormat.plugins.ReactElement;\nconst ReactTestComponent = prettyFormat.plugins.ReactTestComponent;\n\nconst React = require('react');\nconst renderer = require('react-test-renderer');\n```\n\n```js\n// ES2015 modules and destructuring assignment\nimport prettyFormat from 'pretty-format';\nconst {ReactElement, ReactTestComponent} = prettyFormat.plugins;\n\nimport React from 'react';\nimport renderer from 'react-test-renderer';\n```\n\n```js\nconst onClick = () => {};\nconst element = React.createElement('button', {onClick}, 'Hello World');\n\nconst formatted1 = prettyFormat(element, {\n plugins: [ReactElement],\n printFunctionName: false,\n});\nconst formatted2 = prettyFormat(renderer.create(element).toJSON(), {\n plugins: [ReactTestComponent],\n printFunctionName: false,\n});\n/*\n\n*/\n```\n\n## Usage in Jest\n\nFor snapshot tests, Jest uses `pretty-format` with options that include some of\nits built-in plugins. For this purpose, plugins are also known as **snapshot\nserializers**.\n\nTo serialize application-specific data types, you can add modules to\n`devDependencies` of a project, and then:\n\nIn an **individual** test file, you can add a module as follows. It precedes any\nmodules from Jest configuration.\n\n```js\nimport serializer from 'my-serializer-module';\nexpect.addSnapshotSerializer(serializer);\n\n// tests which have `expect(value).toMatchSnapshot()` assertions\n```\n\nFor **all** test files, you can specify modules in Jest configuration. They\nprecede built-in plugins for React, HTML, and Immutable.js data types. For\nexample, in a `package.json` file:\n\n```json\n{\n \"jest\": {\n \"snapshotSerializers\": [\"my-serializer-module\"]\n }\n}\n```\n\n## Writing plugins\n\nA plugin is a JavaScript object.\n\nIf `options` has a `plugins` array: for the first plugin whose `test(val)`\nmethod returns a truthy value, then `prettyFormat(val, options)` returns the\nresult from either:\n\n* `serialize(val, …)` method of the **improved** interface (available in\n **version 21** or later)\n* `print(val, …)` method of the **original** interface (if plugin does not have\n `serialize` method)\n\n### test\n\nWrite `test` so it can receive `val` argument of any type. To serialize\n**objects** which have certain properties, then a guarded expression like\n`val != null && …` or more concise `val && …` prevents the following errors:\n\n* `TypeError: Cannot read property 'whatever' of null`\n* `TypeError: Cannot read property 'whatever' of undefined`\n\nFor example, `test` method of built-in `ReactElement` plugin:\n\n```js\nconst elementSymbol = Symbol.for('react.element');\nconst test = val => val && val.$$typeof === elementSymbol;\n```\n\nPay attention to efficiency in `test` because `pretty-format` calls it often.\n\n### serialize\n\nThe **improved** interface is available in **version 21** or later.\n\nWrite `serialize` to return a string, given the arguments:\n\n* `val` which “passed the test”\n* unchanging `config` object: derived from `options`\n* current `indentation` string: concatenate to `indent` from `config`\n* current `depth` number: compare to `maxDepth` from `config`\n* current `refs` array: find circular references in objects\n* `printer` callback function: serialize children\n\n### config\n\n| key | type | description |\n| :------------------ | :-------- | :------------------------------------------------------ |\n| `callToJSON` | `boolean` | call `toJSON` method (if it exists) on objects |\n| `colors` | `Object` | escape codes for colors to highlight syntax |\n| `escapeRegex` | `boolean` | escape special characters in regular expressions |\n| `indent` | `string` | spaces in each level of indentation |\n| `maxDepth` | `number` | levels to print in arrays, objects, elements, and so on |\n| `min` | `boolean` | minimize added space: no indentation nor line breaks |\n| `plugins` | `array` | plugins to serialize application-specific data types |\n| `printFunctionName` | `boolean` | include or omit the name of a function |\n| `spacingInner` | `strong` | spacing to separate items in a list |\n| `spacingOuter` | `strong` | spacing to enclose a list of items |\n\nEach property of `colors` in `config` corresponds to a property of `theme` in\n`options`:\n\n* the key is the same (for example, `tag`)\n* the value in `colors` is a object with `open` and `close` properties whose\n values are escape codes from\n [ansi-styles](https://github.com/chalk/ansi-styles) for the color value in\n `theme` (for example, `'cyan'`)\n\nSome properties in `config` are derived from `min` in `options`:\n\n* `spacingInner` and `spacingOuter` are **newline** if `min` is `false`\n* `spacingInner` is **space** and `spacingOuter` is **empty string** if `min` is\n `true`\n\n### Example of serialize and test\n\nThis plugin is a pattern you can apply to serialize composite data types. Of\ncourse, `pretty-format` does not need a plugin to serialize arrays :)\n\n```js\n// We reused more code when we factored out a function for child items\n// that is independent of depth, name, and enclosing punctuation (see below).\nconst SEPARATOR = ',';\nfunction serializeItems(items, config, indentation, depth, refs, printer) {\n if (items.length === 0) {\n return '';\n }\n const indentationItems = indentation + config.indent;\n return (\n config.spacingOuter +\n items\n .map(\n item =>\n indentationItems +\n printer(item, config, indentationItems, depth, refs), // callback\n )\n .join(SEPARATOR + config.spacingInner) +\n (config.min ? '' : SEPARATOR) + // following the last item\n config.spacingOuter +\n indentation\n );\n}\n\nconst plugin = {\n test(val) {\n return Array.isArray(val);\n },\n serialize(array, config, indentation, depth, refs, printer) {\n const name = array.constructor.name;\n return ++depth > config.maxDepth\n ? '[' + name + ']'\n : (config.min ? '' : name + ' ') +\n '[' +\n serializeItems(array, config, indentation, depth, refs, printer) +\n ']';\n },\n};\n```\n\n```js\nconst val = {\n filter: 'completed',\n items: [\n {\n text: 'Write test',\n completed: true,\n },\n {\n text: 'Write serialize',\n completed: true,\n },\n ],\n};\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n plugins: [plugin],\n }),\n);\n/*\nObject {\n \"filter\": \"completed\",\n \"items\": Array [\n Object {\n \"completed\": true,\n \"text\": \"Write test\",\n },\n Object {\n \"completed\": true,\n \"text\": \"Write serialize\",\n },\n ],\n}\n*/\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n indent: 4,\n plugins: [plugin],\n }),\n);\n/*\nObject {\n \"filter\": \"completed\",\n \"items\": Array [\n Object {\n \"completed\": true,\n \"text\": \"Write test\",\n },\n Object {\n \"completed\": true,\n \"text\": \"Write serialize\",\n },\n ],\n}\n*/\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n maxDepth: 1,\n plugins: [plugin],\n }),\n);\n/*\nObject {\n \"filter\": \"completed\",\n \"items\": [Array],\n}\n*/\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n min: true,\n plugins: [plugin],\n }),\n);\n/*\n{\"filter\": \"completed\", \"items\": [{\"completed\": true, \"text\": \"Write test\"}, {\"completed\": true, \"text\": \"Write serialize\"}]}\n*/\n```\n\n### print\n\nThe **original** interface is adequate for plugins:\n\n* that **do not** depend on options other than `highlight` or `min`\n* that **do not** depend on `depth` or `refs` in recursive traversal, and\n* if values either\n * do **not** require indentation, or\n * do **not** occur as children of JavaScript data structures (for example,\n array)\n\nWrite `print` to return a string, given the arguments:\n\n* `val` which “passed the test”\n* current `printer(valChild)` callback function: serialize children\n* current `indenter(lines)` callback function: indent lines at the next level\n* unchanging `config` object: derived from `options`\n* unchanging `colors` object: derived from `options`\n\nThe 3 properties of `config` are `min` in `options` and:\n\n* `spacing` and `edgeSpacing` are **newline** if `min` is `false`\n* `spacing` is **space** and `edgeSpacing` is **empty string** if `min` is\n `true`\n\nEach property of `colors` corresponds to a property of `theme` in `options`:\n\n* the key is the same (for example, `tag`)\n* the value in `colors` is a object with `open` and `close` properties whose\n values are escape codes from\n [ansi-styles](https://github.com/chalk/ansi-styles) for the color value in\n `theme` (for example, `'cyan'`)\n\n### Example of print and test\n\nThis plugin prints functions with the **number of named arguments** excluding\nrest argument.\n\n```js\nconst plugin = {\n print(val) {\n return `[Function ${val.name || 'anonymous'} ${val.length}]`;\n },\n test(val) {\n return typeof val === 'function';\n },\n};\n```\n\n```js\nconst val = {\n onClick(event) {},\n render() {},\n};\n\nprettyFormat(val, {\n plugins: [plugin],\n});\n/*\nObject {\n \"onClick\": [Function onClick 1],\n \"render\": [Function render 0],\n}\n*/\n\nprettyFormat(val);\n/*\nObject {\n \"onClick\": [Function onClick],\n \"render\": [Function render],\n}\n*/\n```\n\nThis plugin **ignores** the `printFunctionName` option. That limitation of the\noriginal `print` interface is a reason to use the improved `serialize`\ninterface, described above.\n\n```js\nprettyFormat(val, {\n plugins: [pluginOld],\n printFunctionName: false,\n});\n/*\nObject {\n \"onClick\": [Function onClick 1],\n \"render\": [Function render 0],\n}\n*/\n\nprettyFormat(val, {\n printFunctionName: false,\n});\n/*\nObject {\n \"onClick\": [Function],\n \"render\": [Function],\n}\n*/\n```\n","_id":"pretty-format@23.0.0-beta.3r","dist":{"shasum":"983b39930da7536a3ad40753128f563d37321c88","tarball":"http://localhost:4545/npm/registry/pretty-format/pretty-format-23.0.0-beta.3r.tgz","fileCount":23,"unpackedSize":431478,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJa5xbQCRA9TVsSAnZWagAAiw0P/0MY+CRXH0DTdHDfpWlJ\nSo7sprWdlltZfK7Me1cHSbOd7LBNgiOtmRtr7SfyAA2/09DPs/fY2xRBvVN3\nIMMvlmG/tQYVbVUoTegetUWrhmKM01ga0wZQaVlYjCNh/D29fR6LMZLl+7Ke\nmnZvveX/S7wCt65kjw7JhQD6QouzJl2vCWyqKDe2yHPaNII8TR5iQMefiafl\nRyiDmEW1xeQrbzFPfFKQcFxkd8zeQpAMpLWirwd3qznPXY0zFJYl7EwMIch8\noOHFetvX5GSKMKeDstVR8TdaTEeg7cpAzgLIk8sF3iUj9zhFcSI9GpKJArSW\nQCvgXSZSkFanmCn6ZTdwNdcUanaOha2vYjb0WU50RX9gc9Bu89svdCj1j9fv\nL1Ove9ACjmypw948NmbkjM+wQQfjJt06gLNkS1Hfp5MqdPPI8MLcMQb26g9d\nWdYMxlX3owcbETv3fQa/eDV7RxFVNLLGTrvZqf0eXEdaukgw9rJ+ZmZaBxNA\n6bltNUeTnjHdHjtQj3aEvqz/J9y6+zaKPxVWN9yBHmHVWjyX8csxfucL4pMn\n4iudZ0FiyM+CMY8aG5/geULxVE/6mSXqz3ziRNP8gZWz2lUTXjGdL6nH4C9/\nfuy4DK/zr23b58AP6SYKA9jK9lmH52vltKDDnqIoxR29ptDtj6kCYCFUsczp\n3CGk\r\n=WGbF\r\n-----END PGP SIGNATURE-----\r\n","integrity":"sha512-hZhetlshhuUBdRwIJT6ohX/0JJv1cLyGUOvzL3uk0W0z/VfYDw+N596GJMT0qx/5752PnpkyIUZxd5Goak4iHw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIG9RI4f/5gHeJSccztIIL7b8StcE3aYvpRLaRqS6LfyxAiEApqkKU2LejApjqn5SIcB9jf7HahmUzwWpoc/EmFBBes0="}]},"maintainers":[{"email":"aaron@abramov.io","name":"aaronabramov"},{"email":"christoph.pojer@gmail.com","name":"cpojer"},{"email":"opensource+npm@fb.com","name":"fb"},{"email":"jean@lauliac.com","name":"jeanlauliac"},{"email":"mjesun@hotmail.com","name":"mjesun"}],"_npmUser":{"name":"mjesun","email":"mjesun@hotmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pretty-format_23.0.0-beta.3r_1525094095640_0.8607787653648153"},"_hasShrinkwrap":false},"23.0.0-charlie.0":{"name":"pretty-format","version":"23.0.0-charlie.0","repository":{"type":"git","url":"https://github.com/facebook/jest.git"},"license":"MIT","description":"Stringify any JavaScript value.","main":"build/index.js","browser":"build-es5/index.js","author":{"name":"James Kyle","email":"me@thejameskyle.com"},"dependencies":{"ansi-regex":"^3.0.0","ansi-styles":"^3.2.0"},"devDependencies":{"immutable":"^4.0.0-rc.9","react":"*","react-dom":"*","react-test-renderer":"*"},"readmeFilename":"README.md","readme":"# pretty-format\n\n> Stringify any JavaScript value.\n\n* Supports all built-in JavaScript types\n * primitive types: `Boolean`, `null`, `Number`, `String`, `Symbol`,\n `undefined`\n * other non-collection types: `Date`, `Error`, `Function`, `RegExp`\n * collection types:\n * `arguments`, `Array`, `ArrayBuffer`, `DataView`, `Float32Array`,\n `Float64Array`, `Int8Array`, `Int16Array`, `Int32Array`, `Uint8Array`,\n `Uint8ClampedArray`, `Uint16Array`, `Uint32Array`,\n * `Map`, `Set`, `WeakMap`, `WeakSet`\n * `Object`\n* [Blazingly fast](https://gist.github.com/thejameskyle/2b04ffe4941aafa8f970de077843a8fd)\n * similar performance to `JSON.stringify` in v8\n * significantly faster than `util.format` in Node.js\n* Serialize application-specific data types with built-in or user-defined\n plugins\n\n## Installation\n\n```sh\n$ yarn add pretty-format\n```\n\n## Usage\n\n```js\nconst prettyFormat = require('pretty-format'); // CommonJS\n```\n\n```js\nimport prettyFormat from 'pretty-format'; // ES2015 modules\n```\n\n```js\nconst val = {object: {}};\nval.circularReference = val;\nval[Symbol('foo')] = 'foo';\nval.map = new Map([['prop', 'value']]);\nval.array = [-0, Infinity, NaN];\n\nconsole.log(prettyFormat(val));\n/*\nObject {\n \"array\": Array [\n -0,\n Infinity,\n NaN,\n ],\n \"circularReference\": [Circular],\n \"map\": Map {\n \"prop\" => \"value\",\n },\n \"object\": Object {},\n Symbol(foo): \"foo\",\n}\n*/\n```\n\n## Usage with options\n\n```js\nfunction onClick() {}\n\nconsole.log(prettyFormat(onClick));\n/*\n[Function onClick]\n*/\n\nconst options = {\n printFunctionName: false,\n};\nconsole.log(prettyFormat(onClick, options));\n/*\n[Function]\n*/\n```\n\n| key | type | default | description |\n| :------------------ | :-------- | :--------- | :------------------------------------------------------ |\n| `callToJSON` | `boolean` | `true` | call `toJSON` method (if it exists) on objects |\n| `escapeRegex` | `boolean` | `false` | escape special characters in regular expressions |\n| `highlight` | `boolean` | `false` | highlight syntax with colors in terminal (some plugins) |\n| `indent` | `number` | `2` | spaces in each level of indentation |\n| `maxDepth` | `number` | `Infinity` | levels to print in arrays, objects, elements, and so on |\n| `min` | `boolean` | `false` | minimize added space: no indentation nor line breaks |\n| `plugins` | `array` | `[]` | plugins to serialize application-specific data types |\n| `printFunctionName` | `boolean` | `true` | include or omit the name of a function |\n| `theme` | `object` | | colors to highlight syntax in terminal |\n\nProperty values of `theme` are from\n[ansi-styles colors](https://github.com/chalk/ansi-styles#colors)\n\n```js\nconst DEFAULT_THEME = {\n comment: 'gray',\n content: 'reset',\n prop: 'yellow',\n tag: 'cyan',\n value: 'green',\n};\n```\n\n## Usage with plugins\n\nThe `pretty-format` package provides some built-in plugins, including:\n\n* `ReactElement` for elements from `react`\n* `ReactTestComponent` for test objects from `react-test-renderer`\n\n```js\n// CommonJS\nconst prettyFormat = require('pretty-format');\nconst ReactElement = prettyFormat.plugins.ReactElement;\nconst ReactTestComponent = prettyFormat.plugins.ReactTestComponent;\n\nconst React = require('react');\nconst renderer = require('react-test-renderer');\n```\n\n```js\n// ES2015 modules and destructuring assignment\nimport prettyFormat from 'pretty-format';\nconst {ReactElement, ReactTestComponent} = prettyFormat.plugins;\n\nimport React from 'react';\nimport renderer from 'react-test-renderer';\n```\n\n```js\nconst onClick = () => {};\nconst element = React.createElement('button', {onClick}, 'Hello World');\n\nconst formatted1 = prettyFormat(element, {\n plugins: [ReactElement],\n printFunctionName: false,\n});\nconst formatted2 = prettyFormat(renderer.create(element).toJSON(), {\n plugins: [ReactTestComponent],\n printFunctionName: false,\n});\n/*\n\n*/\n```\n\n## Usage in Jest\n\nFor snapshot tests, Jest uses `pretty-format` with options that include some of\nits built-in plugins. For this purpose, plugins are also known as **snapshot\nserializers**.\n\nTo serialize application-specific data types, you can add modules to\n`devDependencies` of a project, and then:\n\nIn an **individual** test file, you can add a module as follows. It precedes any\nmodules from Jest configuration.\n\n```js\nimport serializer from 'my-serializer-module';\nexpect.addSnapshotSerializer(serializer);\n\n// tests which have `expect(value).toMatchSnapshot()` assertions\n```\n\nFor **all** test files, you can specify modules in Jest configuration. They\nprecede built-in plugins for React, HTML, and Immutable.js data types. For\nexample, in a `package.json` file:\n\n```json\n{\n \"jest\": {\n \"snapshotSerializers\": [\"my-serializer-module\"]\n }\n}\n```\n\n## Writing plugins\n\nA plugin is a JavaScript object.\n\nIf `options` has a `plugins` array: for the first plugin whose `test(val)`\nmethod returns a truthy value, then `prettyFormat(val, options)` returns the\nresult from either:\n\n* `serialize(val, …)` method of the **improved** interface (available in\n **version 21** or later)\n* `print(val, …)` method of the **original** interface (if plugin does not have\n `serialize` method)\n\n### test\n\nWrite `test` so it can receive `val` argument of any type. To serialize\n**objects** which have certain properties, then a guarded expression like\n`val != null && …` or more concise `val && …` prevents the following errors:\n\n* `TypeError: Cannot read property 'whatever' of null`\n* `TypeError: Cannot read property 'whatever' of undefined`\n\nFor example, `test` method of built-in `ReactElement` plugin:\n\n```js\nconst elementSymbol = Symbol.for('react.element');\nconst test = val => val && val.$$typeof === elementSymbol;\n```\n\nPay attention to efficiency in `test` because `pretty-format` calls it often.\n\n### serialize\n\nThe **improved** interface is available in **version 21** or later.\n\nWrite `serialize` to return a string, given the arguments:\n\n* `val` which “passed the test”\n* unchanging `config` object: derived from `options`\n* current `indentation` string: concatenate to `indent` from `config`\n* current `depth` number: compare to `maxDepth` from `config`\n* current `refs` array: find circular references in objects\n* `printer` callback function: serialize children\n\n### config\n\n| key | type | description |\n| :------------------ | :-------- | :------------------------------------------------------ |\n| `callToJSON` | `boolean` | call `toJSON` method (if it exists) on objects |\n| `colors` | `Object` | escape codes for colors to highlight syntax |\n| `escapeRegex` | `boolean` | escape special characters in regular expressions |\n| `indent` | `string` | spaces in each level of indentation |\n| `maxDepth` | `number` | levels to print in arrays, objects, elements, and so on |\n| `min` | `boolean` | minimize added space: no indentation nor line breaks |\n| `plugins` | `array` | plugins to serialize application-specific data types |\n| `printFunctionName` | `boolean` | include or omit the name of a function |\n| `spacingInner` | `strong` | spacing to separate items in a list |\n| `spacingOuter` | `strong` | spacing to enclose a list of items |\n\nEach property of `colors` in `config` corresponds to a property of `theme` in\n`options`:\n\n* the key is the same (for example, `tag`)\n* the value in `colors` is a object with `open` and `close` properties whose\n values are escape codes from\n [ansi-styles](https://github.com/chalk/ansi-styles) for the color value in\n `theme` (for example, `'cyan'`)\n\nSome properties in `config` are derived from `min` in `options`:\n\n* `spacingInner` and `spacingOuter` are **newline** if `min` is `false`\n* `spacingInner` is **space** and `spacingOuter` is **empty string** if `min` is\n `true`\n\n### Example of serialize and test\n\nThis plugin is a pattern you can apply to serialize composite data types. Of\ncourse, `pretty-format` does not need a plugin to serialize arrays :)\n\n```js\n// We reused more code when we factored out a function for child items\n// that is independent of depth, name, and enclosing punctuation (see below).\nconst SEPARATOR = ',';\nfunction serializeItems(items, config, indentation, depth, refs, printer) {\n if (items.length === 0) {\n return '';\n }\n const indentationItems = indentation + config.indent;\n return (\n config.spacingOuter +\n items\n .map(\n item =>\n indentationItems +\n printer(item, config, indentationItems, depth, refs), // callback\n )\n .join(SEPARATOR + config.spacingInner) +\n (config.min ? '' : SEPARATOR) + // following the last item\n config.spacingOuter +\n indentation\n );\n}\n\nconst plugin = {\n test(val) {\n return Array.isArray(val);\n },\n serialize(array, config, indentation, depth, refs, printer) {\n const name = array.constructor.name;\n return ++depth > config.maxDepth\n ? '[' + name + ']'\n : (config.min ? '' : name + ' ') +\n '[' +\n serializeItems(array, config, indentation, depth, refs, printer) +\n ']';\n },\n};\n```\n\n```js\nconst val = {\n filter: 'completed',\n items: [\n {\n text: 'Write test',\n completed: true,\n },\n {\n text: 'Write serialize',\n completed: true,\n },\n ],\n};\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n plugins: [plugin],\n }),\n);\n/*\nObject {\n \"filter\": \"completed\",\n \"items\": Array [\n Object {\n \"completed\": true,\n \"text\": \"Write test\",\n },\n Object {\n \"completed\": true,\n \"text\": \"Write serialize\",\n },\n ],\n}\n*/\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n indent: 4,\n plugins: [plugin],\n }),\n);\n/*\nObject {\n \"filter\": \"completed\",\n \"items\": Array [\n Object {\n \"completed\": true,\n \"text\": \"Write test\",\n },\n Object {\n \"completed\": true,\n \"text\": \"Write serialize\",\n },\n ],\n}\n*/\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n maxDepth: 1,\n plugins: [plugin],\n }),\n);\n/*\nObject {\n \"filter\": \"completed\",\n \"items\": [Array],\n}\n*/\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n min: true,\n plugins: [plugin],\n }),\n);\n/*\n{\"filter\": \"completed\", \"items\": [{\"completed\": true, \"text\": \"Write test\"}, {\"completed\": true, \"text\": \"Write serialize\"}]}\n*/\n```\n\n### print\n\nThe **original** interface is adequate for plugins:\n\n* that **do not** depend on options other than `highlight` or `min`\n* that **do not** depend on `depth` or `refs` in recursive traversal, and\n* if values either\n * do **not** require indentation, or\n * do **not** occur as children of JavaScript data structures (for example,\n array)\n\nWrite `print` to return a string, given the arguments:\n\n* `val` which “passed the test”\n* current `printer(valChild)` callback function: serialize children\n* current `indenter(lines)` callback function: indent lines at the next level\n* unchanging `config` object: derived from `options`\n* unchanging `colors` object: derived from `options`\n\nThe 3 properties of `config` are `min` in `options` and:\n\n* `spacing` and `edgeSpacing` are **newline** if `min` is `false`\n* `spacing` is **space** and `edgeSpacing` is **empty string** if `min` is\n `true`\n\nEach property of `colors` corresponds to a property of `theme` in `options`:\n\n* the key is the same (for example, `tag`)\n* the value in `colors` is a object with `open` and `close` properties whose\n values are escape codes from\n [ansi-styles](https://github.com/chalk/ansi-styles) for the color value in\n `theme` (for example, `'cyan'`)\n\n### Example of print and test\n\nThis plugin prints functions with the **number of named arguments** excluding\nrest argument.\n\n```js\nconst plugin = {\n print(val) {\n return `[Function ${val.name || 'anonymous'} ${val.length}]`;\n },\n test(val) {\n return typeof val === 'function';\n },\n};\n```\n\n```js\nconst val = {\n onClick(event) {},\n render() {},\n};\n\nprettyFormat(val, {\n plugins: [plugin],\n});\n/*\nObject {\n \"onClick\": [Function onClick 1],\n \"render\": [Function render 0],\n}\n*/\n\nprettyFormat(val);\n/*\nObject {\n \"onClick\": [Function onClick],\n \"render\": [Function render],\n}\n*/\n```\n\nThis plugin **ignores** the `printFunctionName` option. That limitation of the\noriginal `print` interface is a reason to use the improved `serialize`\ninterface, described above.\n\n```js\nprettyFormat(val, {\n plugins: [pluginOld],\n printFunctionName: false,\n});\n/*\nObject {\n \"onClick\": [Function onClick 1],\n \"render\": [Function render 0],\n}\n*/\n\nprettyFormat(val, {\n printFunctionName: false,\n});\n/*\nObject {\n \"onClick\": [Function],\n \"render\": [Function],\n}\n*/\n```\n","_id":"pretty-format@23.0.0-charlie.0","dist":{"shasum":"4b3d1f9f7aa61db4aeab3a75a993c036b98c1477","tarball":"http://localhost:4545/npm/registry/pretty-format/pretty-format-23.0.0-charlie.0.tgz","fileCount":23,"unpackedSize":431480,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJa6ZlYCRA9TVsSAnZWagAATBEQAIYehDXX9KDlb5vzdszV\nHddP7Jp6s0BiXwZ8r2QLW1f5+27MNwfL2cuVW/1KD3ZaizVB/in1NHTvcSrM\nDj15BuzQcQcx4x9m1O79FpoItZGcu12UihUa1gcnylVOzGqeaG6iz8s+Vznu\nncJMRdQElmlZOXg0T2/BRsjvSnKfHkgyWjU3RZ6598pYCr9CM0ExC/sCMLrP\n40G+9VA4HgA80FFf1pWrG5FUpVujpfSSgFJN+XZKHJwEjU8e4KbkQFbhcpFk\nTGSy13dGhOprXzD/QwViUCb53tPKUEgOwNBd2GztzQrYl6e+hFc9kjdcXNb6\ng0zhpd1oAY9QtnKKGWWfybmeCdLFuSUDpBSog8OtCU2Ahn00joBSMbJV6pKw\nNJFTRUmDBhaC02VnXBmKHu5W/r6g1XW05jM0yNwScWnheIDhwXH/KmPr9WBT\nvf1GG17u0XO3AF6PODVOBPjsGFTuSi3KRey5r/yvNQiN+V8NNgmYVl6kLCLH\nRusaTgD0TdciZAm4mpL9mUkU/A7unssdbkhogOeUBAueBAFPObg8xEPaeXTP\nNEw3vZ3BpEqz2ErkzRVn2pibmGyWfir0PUsVgrfoXi4VrqxEh2IxeWWcUa8E\n3xgJ0ssurt2HxluJfHTIo6DJwJASz/7x1nwPE+MMvSLCBvfvVIM5pHTGs/v2\nrPAz\r\n=FHxm\r\n-----END PGP SIGNATURE-----\r\n","integrity":"sha512-myTmvtiM+AiTMqRppnY//JNV5gMK9lHaNRFfe6StA5G8OWXwMm0qNrmTHceXm0JtRuNLhzd7DTjbJS3BOrThaA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCQPzoshuMWAiPp2GGDP/vt9uKsGw8SAKobv5Q+VcxvmAIhAKonv32oDOTFBtwyM6F81bFEN5QEnmB7QMvDAo2Z4UJH"}]},"maintainers":[{"email":"aaron@abramov.io","name":"aaronabramov"},{"email":"christoph.pojer@gmail.com","name":"cpojer"},{"email":"opensource+npm@fb.com","name":"fb"},{"email":"jean@lauliac.com","name":"jeanlauliac"},{"email":"mjesun@hotmail.com","name":"mjesun"}],"_npmUser":{"name":"mjesun","email":"mjesun@hotmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pretty-format_23.0.0-charlie.0_1525258583633_0.7890023758873661"},"_hasShrinkwrap":false},"23.0.0-charlie.1":{"name":"pretty-format","version":"23.0.0-charlie.1","repository":{"type":"git","url":"https://github.com/facebook/jest.git"},"license":"MIT","description":"Stringify any JavaScript value.","main":"build/index.js","browser":"build-es5/index.js","author":{"name":"James Kyle","email":"me@thejameskyle.com"},"dependencies":{"ansi-regex":"^3.0.0","ansi-styles":"^3.2.0"},"devDependencies":{"immutable":"^4.0.0-rc.9","react":"*","react-dom":"*","react-test-renderer":"*"},"readmeFilename":"README.md","readme":"# pretty-format\n\n> Stringify any JavaScript value.\n\n* Supports all built-in JavaScript types\n * primitive types: `Boolean`, `null`, `Number`, `String`, `Symbol`,\n `undefined`\n * other non-collection types: `Date`, `Error`, `Function`, `RegExp`\n * collection types:\n * `arguments`, `Array`, `ArrayBuffer`, `DataView`, `Float32Array`,\n `Float64Array`, `Int8Array`, `Int16Array`, `Int32Array`, `Uint8Array`,\n `Uint8ClampedArray`, `Uint16Array`, `Uint32Array`,\n * `Map`, `Set`, `WeakMap`, `WeakSet`\n * `Object`\n* [Blazingly fast](https://gist.github.com/thejameskyle/2b04ffe4941aafa8f970de077843a8fd)\n * similar performance to `JSON.stringify` in v8\n * significantly faster than `util.format` in Node.js\n* Serialize application-specific data types with built-in or user-defined\n plugins\n\n## Installation\n\n```sh\n$ yarn add pretty-format\n```\n\n## Usage\n\n```js\nconst prettyFormat = require('pretty-format'); // CommonJS\n```\n\n```js\nimport prettyFormat from 'pretty-format'; // ES2015 modules\n```\n\n```js\nconst val = {object: {}};\nval.circularReference = val;\nval[Symbol('foo')] = 'foo';\nval.map = new Map([['prop', 'value']]);\nval.array = [-0, Infinity, NaN];\n\nconsole.log(prettyFormat(val));\n/*\nObject {\n \"array\": Array [\n -0,\n Infinity,\n NaN,\n ],\n \"circularReference\": [Circular],\n \"map\": Map {\n \"prop\" => \"value\",\n },\n \"object\": Object {},\n Symbol(foo): \"foo\",\n}\n*/\n```\n\n## Usage with options\n\n```js\nfunction onClick() {}\n\nconsole.log(prettyFormat(onClick));\n/*\n[Function onClick]\n*/\n\nconst options = {\n printFunctionName: false,\n};\nconsole.log(prettyFormat(onClick, options));\n/*\n[Function]\n*/\n```\n\n| key | type | default | description |\n| :------------------ | :-------- | :--------- | :------------------------------------------------------ |\n| `callToJSON` | `boolean` | `true` | call `toJSON` method (if it exists) on objects |\n| `escapeRegex` | `boolean` | `false` | escape special characters in regular expressions |\n| `highlight` | `boolean` | `false` | highlight syntax with colors in terminal (some plugins) |\n| `indent` | `number` | `2` | spaces in each level of indentation |\n| `maxDepth` | `number` | `Infinity` | levels to print in arrays, objects, elements, and so on |\n| `min` | `boolean` | `false` | minimize added space: no indentation nor line breaks |\n| `plugins` | `array` | `[]` | plugins to serialize application-specific data types |\n| `printFunctionName` | `boolean` | `true` | include or omit the name of a function |\n| `theme` | `object` | | colors to highlight syntax in terminal |\n\nProperty values of `theme` are from\n[ansi-styles colors](https://github.com/chalk/ansi-styles#colors)\n\n```js\nconst DEFAULT_THEME = {\n comment: 'gray',\n content: 'reset',\n prop: 'yellow',\n tag: 'cyan',\n value: 'green',\n};\n```\n\n## Usage with plugins\n\nThe `pretty-format` package provides some built-in plugins, including:\n\n* `ReactElement` for elements from `react`\n* `ReactTestComponent` for test objects from `react-test-renderer`\n\n```js\n// CommonJS\nconst prettyFormat = require('pretty-format');\nconst ReactElement = prettyFormat.plugins.ReactElement;\nconst ReactTestComponent = prettyFormat.plugins.ReactTestComponent;\n\nconst React = require('react');\nconst renderer = require('react-test-renderer');\n```\n\n```js\n// ES2015 modules and destructuring assignment\nimport prettyFormat from 'pretty-format';\nconst {ReactElement, ReactTestComponent} = prettyFormat.plugins;\n\nimport React from 'react';\nimport renderer from 'react-test-renderer';\n```\n\n```js\nconst onClick = () => {};\nconst element = React.createElement('button', {onClick}, 'Hello World');\n\nconst formatted1 = prettyFormat(element, {\n plugins: [ReactElement],\n printFunctionName: false,\n});\nconst formatted2 = prettyFormat(renderer.create(element).toJSON(), {\n plugins: [ReactTestComponent],\n printFunctionName: false,\n});\n/*\n\n*/\n```\n\n## Usage in Jest\n\nFor snapshot tests, Jest uses `pretty-format` with options that include some of\nits built-in plugins. For this purpose, plugins are also known as **snapshot\nserializers**.\n\nTo serialize application-specific data types, you can add modules to\n`devDependencies` of a project, and then:\n\nIn an **individual** test file, you can add a module as follows. It precedes any\nmodules from Jest configuration.\n\n```js\nimport serializer from 'my-serializer-module';\nexpect.addSnapshotSerializer(serializer);\n\n// tests which have `expect(value).toMatchSnapshot()` assertions\n```\n\nFor **all** test files, you can specify modules in Jest configuration. They\nprecede built-in plugins for React, HTML, and Immutable.js data types. For\nexample, in a `package.json` file:\n\n```json\n{\n \"jest\": {\n \"snapshotSerializers\": [\"my-serializer-module\"]\n }\n}\n```\n\n## Writing plugins\n\nA plugin is a JavaScript object.\n\nIf `options` has a `plugins` array: for the first plugin whose `test(val)`\nmethod returns a truthy value, then `prettyFormat(val, options)` returns the\nresult from either:\n\n* `serialize(val, …)` method of the **improved** interface (available in\n **version 21** or later)\n* `print(val, …)` method of the **original** interface (if plugin does not have\n `serialize` method)\n\n### test\n\nWrite `test` so it can receive `val` argument of any type. To serialize\n**objects** which have certain properties, then a guarded expression like\n`val != null && …` or more concise `val && …` prevents the following errors:\n\n* `TypeError: Cannot read property 'whatever' of null`\n* `TypeError: Cannot read property 'whatever' of undefined`\n\nFor example, `test` method of built-in `ReactElement` plugin:\n\n```js\nconst elementSymbol = Symbol.for('react.element');\nconst test = val => val && val.$$typeof === elementSymbol;\n```\n\nPay attention to efficiency in `test` because `pretty-format` calls it often.\n\n### serialize\n\nThe **improved** interface is available in **version 21** or later.\n\nWrite `serialize` to return a string, given the arguments:\n\n* `val` which “passed the test”\n* unchanging `config` object: derived from `options`\n* current `indentation` string: concatenate to `indent` from `config`\n* current `depth` number: compare to `maxDepth` from `config`\n* current `refs` array: find circular references in objects\n* `printer` callback function: serialize children\n\n### config\n\n| key | type | description |\n| :------------------ | :-------- | :------------------------------------------------------ |\n| `callToJSON` | `boolean` | call `toJSON` method (if it exists) on objects |\n| `colors` | `Object` | escape codes for colors to highlight syntax |\n| `escapeRegex` | `boolean` | escape special characters in regular expressions |\n| `indent` | `string` | spaces in each level of indentation |\n| `maxDepth` | `number` | levels to print in arrays, objects, elements, and so on |\n| `min` | `boolean` | minimize added space: no indentation nor line breaks |\n| `plugins` | `array` | plugins to serialize application-specific data types |\n| `printFunctionName` | `boolean` | include or omit the name of a function |\n| `spacingInner` | `strong` | spacing to separate items in a list |\n| `spacingOuter` | `strong` | spacing to enclose a list of items |\n\nEach property of `colors` in `config` corresponds to a property of `theme` in\n`options`:\n\n* the key is the same (for example, `tag`)\n* the value in `colors` is a object with `open` and `close` properties whose\n values are escape codes from\n [ansi-styles](https://github.com/chalk/ansi-styles) for the color value in\n `theme` (for example, `'cyan'`)\n\nSome properties in `config` are derived from `min` in `options`:\n\n* `spacingInner` and `spacingOuter` are **newline** if `min` is `false`\n* `spacingInner` is **space** and `spacingOuter` is **empty string** if `min` is\n `true`\n\n### Example of serialize and test\n\nThis plugin is a pattern you can apply to serialize composite data types. Of\ncourse, `pretty-format` does not need a plugin to serialize arrays :)\n\n```js\n// We reused more code when we factored out a function for child items\n// that is independent of depth, name, and enclosing punctuation (see below).\nconst SEPARATOR = ',';\nfunction serializeItems(items, config, indentation, depth, refs, printer) {\n if (items.length === 0) {\n return '';\n }\n const indentationItems = indentation + config.indent;\n return (\n config.spacingOuter +\n items\n .map(\n item =>\n indentationItems +\n printer(item, config, indentationItems, depth, refs), // callback\n )\n .join(SEPARATOR + config.spacingInner) +\n (config.min ? '' : SEPARATOR) + // following the last item\n config.spacingOuter +\n indentation\n );\n}\n\nconst plugin = {\n test(val) {\n return Array.isArray(val);\n },\n serialize(array, config, indentation, depth, refs, printer) {\n const name = array.constructor.name;\n return ++depth > config.maxDepth\n ? '[' + name + ']'\n : (config.min ? '' : name + ' ') +\n '[' +\n serializeItems(array, config, indentation, depth, refs, printer) +\n ']';\n },\n};\n```\n\n```js\nconst val = {\n filter: 'completed',\n items: [\n {\n text: 'Write test',\n completed: true,\n },\n {\n text: 'Write serialize',\n completed: true,\n },\n ],\n};\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n plugins: [plugin],\n }),\n);\n/*\nObject {\n \"filter\": \"completed\",\n \"items\": Array [\n Object {\n \"completed\": true,\n \"text\": \"Write test\",\n },\n Object {\n \"completed\": true,\n \"text\": \"Write serialize\",\n },\n ],\n}\n*/\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n indent: 4,\n plugins: [plugin],\n }),\n);\n/*\nObject {\n \"filter\": \"completed\",\n \"items\": Array [\n Object {\n \"completed\": true,\n \"text\": \"Write test\",\n },\n Object {\n \"completed\": true,\n \"text\": \"Write serialize\",\n },\n ],\n}\n*/\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n maxDepth: 1,\n plugins: [plugin],\n }),\n);\n/*\nObject {\n \"filter\": \"completed\",\n \"items\": [Array],\n}\n*/\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n min: true,\n plugins: [plugin],\n }),\n);\n/*\n{\"filter\": \"completed\", \"items\": [{\"completed\": true, \"text\": \"Write test\"}, {\"completed\": true, \"text\": \"Write serialize\"}]}\n*/\n```\n\n### print\n\nThe **original** interface is adequate for plugins:\n\n* that **do not** depend on options other than `highlight` or `min`\n* that **do not** depend on `depth` or `refs` in recursive traversal, and\n* if values either\n * do **not** require indentation, or\n * do **not** occur as children of JavaScript data structures (for example,\n array)\n\nWrite `print` to return a string, given the arguments:\n\n* `val` which “passed the test”\n* current `printer(valChild)` callback function: serialize children\n* current `indenter(lines)` callback function: indent lines at the next level\n* unchanging `config` object: derived from `options`\n* unchanging `colors` object: derived from `options`\n\nThe 3 properties of `config` are `min` in `options` and:\n\n* `spacing` and `edgeSpacing` are **newline** if `min` is `false`\n* `spacing` is **space** and `edgeSpacing` is **empty string** if `min` is\n `true`\n\nEach property of `colors` corresponds to a property of `theme` in `options`:\n\n* the key is the same (for example, `tag`)\n* the value in `colors` is a object with `open` and `close` properties whose\n values are escape codes from\n [ansi-styles](https://github.com/chalk/ansi-styles) for the color value in\n `theme` (for example, `'cyan'`)\n\n### Example of print and test\n\nThis plugin prints functions with the **number of named arguments** excluding\nrest argument.\n\n```js\nconst plugin = {\n print(val) {\n return `[Function ${val.name || 'anonymous'} ${val.length}]`;\n },\n test(val) {\n return typeof val === 'function';\n },\n};\n```\n\n```js\nconst val = {\n onClick(event) {},\n render() {},\n};\n\nprettyFormat(val, {\n plugins: [plugin],\n});\n/*\nObject {\n \"onClick\": [Function onClick 1],\n \"render\": [Function render 0],\n}\n*/\n\nprettyFormat(val);\n/*\nObject {\n \"onClick\": [Function onClick],\n \"render\": [Function render],\n}\n*/\n```\n\nThis plugin **ignores** the `printFunctionName` option. That limitation of the\noriginal `print` interface is a reason to use the improved `serialize`\ninterface, described above.\n\n```js\nprettyFormat(val, {\n plugins: [pluginOld],\n printFunctionName: false,\n});\n/*\nObject {\n \"onClick\": [Function onClick 1],\n \"render\": [Function render 0],\n}\n*/\n\nprettyFormat(val, {\n printFunctionName: false,\n});\n/*\nObject {\n \"onClick\": [Function],\n \"render\": [Function],\n}\n*/\n```\n","_id":"pretty-format@23.0.0-charlie.1","dist":{"shasum":"cb5fde20ad5f5d2e38197c5f07340e694233e986","tarball":"http://localhost:4545/npm/registry/pretty-format/pretty-format-23.0.0-charlie.1.tgz","fileCount":23,"unpackedSize":432122,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJa6vwoCRA9TVsSAnZWagAA7hYQAKUqxNH7ylXNjuLsO1uB\nUgnMLgeG1KHa7L4EyIAWtWoVUEQWqT+W/Wlqn5t/HSIobX51sNJnNxWhF+6u\nLA8FRgN5S0StZHIV+HjsE2m8ui5Zi2a9QGzpKvbYjqrs2PRrNX3Ykd2a92ex\nmsPSvXgUAh8bhpm+NuXmr0TjuBUWpUDZAtyTWLyJpqLTntVhRmifXMx9qSvP\n3PTgnOXhkH/XQ6hEqFZZ3noMx7Xv4htj9zItDtQWxT5EOMMZSunKz/nZeP+V\n7ccA5PU/2LamnFCUvY8NkiTbRHfC3PhwFaGW1EYgYhWpC9THZP2SBSZ/G1BZ\nSZf0uI52XPzbr/BKSknM7XEC1fpFwtfLp1YCPqPqCe8HNgfbGdbQRwknQjwa\nfjCJO93ORvGsAYCPPhOba7ZIkvZJ9BrD2bZPtV7uuGYkVQLrL8qG8YJkfbxQ\nIhW5hVbyozi7o8k/BQeP6oqFA4syH4HZ2xrFdp5iIte7wqqxBakINODsb17L\nDnjzvqQE5elYy+1xHbkZgF4NyUHAPq/u43ZUZ+lbo86dB+UGLfXLo4q+jrDB\n4E5CBS0P3je28FFhU+bAOz8sk8Qgxx0EC+EXOgJdK0LfBgp7+YZNtoVJbH3H\nSp5ApXBJBsY2HcIdK7wrdBB664UYcDx2Y4QBpwpASoxyC+PW3Mg46gFJg4yg\nLCCt\r\n=aEGb\r\n-----END PGP SIGNATURE-----\r\n","integrity":"sha512-YkSD2FV1j5ies61g6ecjPRV15Q8/hv9xiFhn0ioL1kpCnphvu/J+pZ7K0c0wN/UW2BLLzIqaoIIIFfAKNC2nJg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIC+cyWFtVsnNuviHvBRda/1uuZErYPXfhK5qh7e/fXfUAiByD011KQSDsQT1IdLoTtLWUBSForCzboFeoqQxKn4TVA=="}]},"maintainers":[{"email":"aaron@abramov.io","name":"aaronabramov"},{"email":"christoph.pojer@gmail.com","name":"cpojer"},{"email":"opensource+npm@fb.com","name":"fb"},{"email":"jean@lauliac.com","name":"jeanlauliac"},{"email":"mjesun@hotmail.com","name":"mjesun"}],"_npmUser":{"name":"mjesun","email":"mjesun@hotmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pretty-format_23.0.0-charlie.1_1525349415837_0.9022465978031704"},"_hasShrinkwrap":false},"23.0.0-charlie.2":{"name":"pretty-format","version":"23.0.0-charlie.2","repository":{"type":"git","url":"https://github.com/facebook/jest.git"},"license":"MIT","description":"Stringify any JavaScript value.","main":"build/index.js","browser":"build-es5/index.js","author":{"name":"James Kyle","email":"me@thejameskyle.com"},"dependencies":{"ansi-regex":"^3.0.0","ansi-styles":"^3.2.0"},"devDependencies":{"immutable":"^4.0.0-rc.9","react":"*","react-dom":"*","react-test-renderer":"*"},"readmeFilename":"README.md","readme":"# pretty-format\n\n> Stringify any JavaScript value.\n\n* Supports all built-in JavaScript types\n * primitive types: `Boolean`, `null`, `Number`, `String`, `Symbol`,\n `undefined`\n * other non-collection types: `Date`, `Error`, `Function`, `RegExp`\n * collection types:\n * `arguments`, `Array`, `ArrayBuffer`, `DataView`, `Float32Array`,\n `Float64Array`, `Int8Array`, `Int16Array`, `Int32Array`, `Uint8Array`,\n `Uint8ClampedArray`, `Uint16Array`, `Uint32Array`,\n * `Map`, `Set`, `WeakMap`, `WeakSet`\n * `Object`\n* [Blazingly fast](https://gist.github.com/thejameskyle/2b04ffe4941aafa8f970de077843a8fd)\n * similar performance to `JSON.stringify` in v8\n * significantly faster than `util.format` in Node.js\n* Serialize application-specific data types with built-in or user-defined\n plugins\n\n## Installation\n\n```sh\n$ yarn add pretty-format\n```\n\n## Usage\n\n```js\nconst prettyFormat = require('pretty-format'); // CommonJS\n```\n\n```js\nimport prettyFormat from 'pretty-format'; // ES2015 modules\n```\n\n```js\nconst val = {object: {}};\nval.circularReference = val;\nval[Symbol('foo')] = 'foo';\nval.map = new Map([['prop', 'value']]);\nval.array = [-0, Infinity, NaN];\n\nconsole.log(prettyFormat(val));\n/*\nObject {\n \"array\": Array [\n -0,\n Infinity,\n NaN,\n ],\n \"circularReference\": [Circular],\n \"map\": Map {\n \"prop\" => \"value\",\n },\n \"object\": Object {},\n Symbol(foo): \"foo\",\n}\n*/\n```\n\n## Usage with options\n\n```js\nfunction onClick() {}\n\nconsole.log(prettyFormat(onClick));\n/*\n[Function onClick]\n*/\n\nconst options = {\n printFunctionName: false,\n};\nconsole.log(prettyFormat(onClick, options));\n/*\n[Function]\n*/\n```\n\n| key | type | default | description |\n| :------------------ | :-------- | :--------- | :------------------------------------------------------ |\n| `callToJSON` | `boolean` | `true` | call `toJSON` method (if it exists) on objects |\n| `escapeRegex` | `boolean` | `false` | escape special characters in regular expressions |\n| `highlight` | `boolean` | `false` | highlight syntax with colors in terminal (some plugins) |\n| `indent` | `number` | `2` | spaces in each level of indentation |\n| `maxDepth` | `number` | `Infinity` | levels to print in arrays, objects, elements, and so on |\n| `min` | `boolean` | `false` | minimize added space: no indentation nor line breaks |\n| `plugins` | `array` | `[]` | plugins to serialize application-specific data types |\n| `printFunctionName` | `boolean` | `true` | include or omit the name of a function |\n| `theme` | `object` | | colors to highlight syntax in terminal |\n\nProperty values of `theme` are from\n[ansi-styles colors](https://github.com/chalk/ansi-styles#colors)\n\n```js\nconst DEFAULT_THEME = {\n comment: 'gray',\n content: 'reset',\n prop: 'yellow',\n tag: 'cyan',\n value: 'green',\n};\n```\n\n## Usage with plugins\n\nThe `pretty-format` package provides some built-in plugins, including:\n\n* `ReactElement` for elements from `react`\n* `ReactTestComponent` for test objects from `react-test-renderer`\n\n```js\n// CommonJS\nconst prettyFormat = require('pretty-format');\nconst ReactElement = prettyFormat.plugins.ReactElement;\nconst ReactTestComponent = prettyFormat.plugins.ReactTestComponent;\n\nconst React = require('react');\nconst renderer = require('react-test-renderer');\n```\n\n```js\n// ES2015 modules and destructuring assignment\nimport prettyFormat from 'pretty-format';\nconst {ReactElement, ReactTestComponent} = prettyFormat.plugins;\n\nimport React from 'react';\nimport renderer from 'react-test-renderer';\n```\n\n```js\nconst onClick = () => {};\nconst element = React.createElement('button', {onClick}, 'Hello World');\n\nconst formatted1 = prettyFormat(element, {\n plugins: [ReactElement],\n printFunctionName: false,\n});\nconst formatted2 = prettyFormat(renderer.create(element).toJSON(), {\n plugins: [ReactTestComponent],\n printFunctionName: false,\n});\n/*\n\n*/\n```\n\n## Usage in Jest\n\nFor snapshot tests, Jest uses `pretty-format` with options that include some of\nits built-in plugins. For this purpose, plugins are also known as **snapshot\nserializers**.\n\nTo serialize application-specific data types, you can add modules to\n`devDependencies` of a project, and then:\n\nIn an **individual** test file, you can add a module as follows. It precedes any\nmodules from Jest configuration.\n\n```js\nimport serializer from 'my-serializer-module';\nexpect.addSnapshotSerializer(serializer);\n\n// tests which have `expect(value).toMatchSnapshot()` assertions\n```\n\nFor **all** test files, you can specify modules in Jest configuration. They\nprecede built-in plugins for React, HTML, and Immutable.js data types. For\nexample, in a `package.json` file:\n\n```json\n{\n \"jest\": {\n \"snapshotSerializers\": [\"my-serializer-module\"]\n }\n}\n```\n\n## Writing plugins\n\nA plugin is a JavaScript object.\n\nIf `options` has a `plugins` array: for the first plugin whose `test(val)`\nmethod returns a truthy value, then `prettyFormat(val, options)` returns the\nresult from either:\n\n* `serialize(val, …)` method of the **improved** interface (available in\n **version 21** or later)\n* `print(val, …)` method of the **original** interface (if plugin does not have\n `serialize` method)\n\n### test\n\nWrite `test` so it can receive `val` argument of any type. To serialize\n**objects** which have certain properties, then a guarded expression like\n`val != null && …` or more concise `val && …` prevents the following errors:\n\n* `TypeError: Cannot read property 'whatever' of null`\n* `TypeError: Cannot read property 'whatever' of undefined`\n\nFor example, `test` method of built-in `ReactElement` plugin:\n\n```js\nconst elementSymbol = Symbol.for('react.element');\nconst test = val => val && val.$$typeof === elementSymbol;\n```\n\nPay attention to efficiency in `test` because `pretty-format` calls it often.\n\n### serialize\n\nThe **improved** interface is available in **version 21** or later.\n\nWrite `serialize` to return a string, given the arguments:\n\n* `val` which “passed the test”\n* unchanging `config` object: derived from `options`\n* current `indentation` string: concatenate to `indent` from `config`\n* current `depth` number: compare to `maxDepth` from `config`\n* current `refs` array: find circular references in objects\n* `printer` callback function: serialize children\n\n### config\n\n| key | type | description |\n| :------------------ | :-------- | :------------------------------------------------------ |\n| `callToJSON` | `boolean` | call `toJSON` method (if it exists) on objects |\n| `colors` | `Object` | escape codes for colors to highlight syntax |\n| `escapeRegex` | `boolean` | escape special characters in regular expressions |\n| `indent` | `string` | spaces in each level of indentation |\n| `maxDepth` | `number` | levels to print in arrays, objects, elements, and so on |\n| `min` | `boolean` | minimize added space: no indentation nor line breaks |\n| `plugins` | `array` | plugins to serialize application-specific data types |\n| `printFunctionName` | `boolean` | include or omit the name of a function |\n| `spacingInner` | `strong` | spacing to separate items in a list |\n| `spacingOuter` | `strong` | spacing to enclose a list of items |\n\nEach property of `colors` in `config` corresponds to a property of `theme` in\n`options`:\n\n* the key is the same (for example, `tag`)\n* the value in `colors` is a object with `open` and `close` properties whose\n values are escape codes from\n [ansi-styles](https://github.com/chalk/ansi-styles) for the color value in\n `theme` (for example, `'cyan'`)\n\nSome properties in `config` are derived from `min` in `options`:\n\n* `spacingInner` and `spacingOuter` are **newline** if `min` is `false`\n* `spacingInner` is **space** and `spacingOuter` is **empty string** if `min` is\n `true`\n\n### Example of serialize and test\n\nThis plugin is a pattern you can apply to serialize composite data types. Of\ncourse, `pretty-format` does not need a plugin to serialize arrays :)\n\n```js\n// We reused more code when we factored out a function for child items\n// that is independent of depth, name, and enclosing punctuation (see below).\nconst SEPARATOR = ',';\nfunction serializeItems(items, config, indentation, depth, refs, printer) {\n if (items.length === 0) {\n return '';\n }\n const indentationItems = indentation + config.indent;\n return (\n config.spacingOuter +\n items\n .map(\n item =>\n indentationItems +\n printer(item, config, indentationItems, depth, refs), // callback\n )\n .join(SEPARATOR + config.spacingInner) +\n (config.min ? '' : SEPARATOR) + // following the last item\n config.spacingOuter +\n indentation\n );\n}\n\nconst plugin = {\n test(val) {\n return Array.isArray(val);\n },\n serialize(array, config, indentation, depth, refs, printer) {\n const name = array.constructor.name;\n return ++depth > config.maxDepth\n ? '[' + name + ']'\n : (config.min ? '' : name + ' ') +\n '[' +\n serializeItems(array, config, indentation, depth, refs, printer) +\n ']';\n },\n};\n```\n\n```js\nconst val = {\n filter: 'completed',\n items: [\n {\n text: 'Write test',\n completed: true,\n },\n {\n text: 'Write serialize',\n completed: true,\n },\n ],\n};\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n plugins: [plugin],\n }),\n);\n/*\nObject {\n \"filter\": \"completed\",\n \"items\": Array [\n Object {\n \"completed\": true,\n \"text\": \"Write test\",\n },\n Object {\n \"completed\": true,\n \"text\": \"Write serialize\",\n },\n ],\n}\n*/\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n indent: 4,\n plugins: [plugin],\n }),\n);\n/*\nObject {\n \"filter\": \"completed\",\n \"items\": Array [\n Object {\n \"completed\": true,\n \"text\": \"Write test\",\n },\n Object {\n \"completed\": true,\n \"text\": \"Write serialize\",\n },\n ],\n}\n*/\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n maxDepth: 1,\n plugins: [plugin],\n }),\n);\n/*\nObject {\n \"filter\": \"completed\",\n \"items\": [Array],\n}\n*/\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n min: true,\n plugins: [plugin],\n }),\n);\n/*\n{\"filter\": \"completed\", \"items\": [{\"completed\": true, \"text\": \"Write test\"}, {\"completed\": true, \"text\": \"Write serialize\"}]}\n*/\n```\n\n### print\n\nThe **original** interface is adequate for plugins:\n\n* that **do not** depend on options other than `highlight` or `min`\n* that **do not** depend on `depth` or `refs` in recursive traversal, and\n* if values either\n * do **not** require indentation, or\n * do **not** occur as children of JavaScript data structures (for example,\n array)\n\nWrite `print` to return a string, given the arguments:\n\n* `val` which “passed the test”\n* current `printer(valChild)` callback function: serialize children\n* current `indenter(lines)` callback function: indent lines at the next level\n* unchanging `config` object: derived from `options`\n* unchanging `colors` object: derived from `options`\n\nThe 3 properties of `config` are `min` in `options` and:\n\n* `spacing` and `edgeSpacing` are **newline** if `min` is `false`\n* `spacing` is **space** and `edgeSpacing` is **empty string** if `min` is\n `true`\n\nEach property of `colors` corresponds to a property of `theme` in `options`:\n\n* the key is the same (for example, `tag`)\n* the value in `colors` is a object with `open` and `close` properties whose\n values are escape codes from\n [ansi-styles](https://github.com/chalk/ansi-styles) for the color value in\n `theme` (for example, `'cyan'`)\n\n### Example of print and test\n\nThis plugin prints functions with the **number of named arguments** excluding\nrest argument.\n\n```js\nconst plugin = {\n print(val) {\n return `[Function ${val.name || 'anonymous'} ${val.length}]`;\n },\n test(val) {\n return typeof val === 'function';\n },\n};\n```\n\n```js\nconst val = {\n onClick(event) {},\n render() {},\n};\n\nprettyFormat(val, {\n plugins: [plugin],\n});\n/*\nObject {\n \"onClick\": [Function onClick 1],\n \"render\": [Function render 0],\n}\n*/\n\nprettyFormat(val);\n/*\nObject {\n \"onClick\": [Function onClick],\n \"render\": [Function render],\n}\n*/\n```\n\nThis plugin **ignores** the `printFunctionName` option. That limitation of the\noriginal `print` interface is a reason to use the improved `serialize`\ninterface, described above.\n\n```js\nprettyFormat(val, {\n plugins: [pluginOld],\n printFunctionName: false,\n});\n/*\nObject {\n \"onClick\": [Function onClick 1],\n \"render\": [Function render 0],\n}\n*/\n\nprettyFormat(val, {\n printFunctionName: false,\n});\n/*\nObject {\n \"onClick\": [Function],\n \"render\": [Function],\n}\n*/\n```\n","_id":"pretty-format@23.0.0-charlie.2","dist":{"shasum":"ab87c9fd8ff445bd2ace394c84000201a041f217","tarball":"http://localhost:4545/npm/registry/pretty-format/pretty-format-23.0.0-charlie.2.tgz","fileCount":23,"unpackedSize":432720,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJa+q2fCRA9TVsSAnZWagAAjZMP/jg0tq3BOCSAwZsvuZFb\nech7cxKXfhHo1T3tySe4bh9Kdwtyc8spOPhTMi7RWatFzX+Aeithel5E7aru\nF9ClfRdUfYH0Fwyb4fDS47YO4lAiX/1ttJE7IoZ8CegBMrrlegwNi2FUgysO\nXOfVprQFnJPbinjvt4oemzmtfF9quZwdlBVPCT1Y44Q+7iVePXHsJTKdpspm\nzXsCgcLn19HiEHiimFmOusPimbEujXbxLbdbr2i61ONWGHXVdvLIf02k2ZEy\n0UtFkJjXnNCUwMDoZZ60ztw++kcUtG1mqjv0eIU8Nf7H+c8rn+3cLW4wM04I\nfTcEJE9ocXpXMaqHfRb6jeVJ4BwPpfuvPEh+eKXKbgtS1CeNQCaPn6iA89cJ\nMhpuW6tQO8d6y5tQxJSk9NN1FXOeTSVt3FBdOOaIdcQeaOSv3PjN4CBxk7pG\nJmB1ajCaamkKzrdj/DVr+jNK77v4C7S5xS5yDGu9lrM+iWNaki0Ut6Cc0Gnt\nS4ISgDo7p1/HttoTuDS8CYjlduc8/O4YYFx4vPdhjhJP6YReY82Bk7T53xST\nYtmI6q9rm0eiLp/mAvreyDXasatp9JYg9tyTVmcuQeQEozvZ9h3g58fJnMF6\nWLklPUsEreQQnT1EUtfQbkYjmJzGzSWM/iQxUHOrMZtvA2z63I+hRzUR1XbG\neTnl\r\n=uih0\r\n-----END PGP SIGNATURE-----\r\n","integrity":"sha512-rEamOtaAb9sqz3tXYFj1mtm7CaK0k8qdi+m2uVSAMreu5NEe0mpcBF75wYQmZ7kYREaYrxF5KmrxNLSjaY/LGw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIF4pV1uKEdsAhsIeKM1CceGCQ71EVIaQDegvfv23dq4RAiEAyA2U3Al6dlxHfoqvOvBU8Zuvg4CAnp+1AkHMmOL4Imc="}]},"maintainers":[{"email":"aaron@abramov.io","name":"aaronabramov"},{"email":"christoph.pojer@gmail.com","name":"cpojer"},{"email":"opensource+npm@fb.com","name":"fb"},{"email":"jean@lauliac.com","name":"jeanlauliac"},{"email":"mjesun@hotmail.com","name":"mjesun"}],"_npmUser":{"name":"mjesun","email":"mjesun@hotmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pretty-format_23.0.0-charlie.2_1526377887160_0.16335274965802293"},"_hasShrinkwrap":false},"23.0.0-charlie.3":{"name":"pretty-format","version":"23.0.0-charlie.3","repository":{"type":"git","url":"https://github.com/facebook/jest.git"},"license":"MIT","description":"Stringify any JavaScript value.","main":"build/index.js","browser":"build-es5/index.js","author":{"name":"James Kyle","email":"me@thejameskyle.com"},"dependencies":{"ansi-regex":"^3.0.0","ansi-styles":"^3.2.0"},"devDependencies":{"immutable":"^4.0.0-rc.9","react":"*","react-dom":"*","react-test-renderer":"*"},"readmeFilename":"README.md","readme":"# pretty-format\n\n> Stringify any JavaScript value.\n\n* Supports all built-in JavaScript types\n * primitive types: `Boolean`, `null`, `Number`, `String`, `Symbol`,\n `undefined`\n * other non-collection types: `Date`, `Error`, `Function`, `RegExp`\n * collection types:\n * `arguments`, `Array`, `ArrayBuffer`, `DataView`, `Float32Array`,\n `Float64Array`, `Int8Array`, `Int16Array`, `Int32Array`, `Uint8Array`,\n `Uint8ClampedArray`, `Uint16Array`, `Uint32Array`,\n * `Map`, `Set`, `WeakMap`, `WeakSet`\n * `Object`\n* [Blazingly fast](https://gist.github.com/thejameskyle/2b04ffe4941aafa8f970de077843a8fd)\n * similar performance to `JSON.stringify` in v8\n * significantly faster than `util.format` in Node.js\n* Serialize application-specific data types with built-in or user-defined\n plugins\n\n## Installation\n\n```sh\n$ yarn add pretty-format\n```\n\n## Usage\n\n```js\nconst prettyFormat = require('pretty-format'); // CommonJS\n```\n\n```js\nimport prettyFormat from 'pretty-format'; // ES2015 modules\n```\n\n```js\nconst val = {object: {}};\nval.circularReference = val;\nval[Symbol('foo')] = 'foo';\nval.map = new Map([['prop', 'value']]);\nval.array = [-0, Infinity, NaN];\n\nconsole.log(prettyFormat(val));\n/*\nObject {\n \"array\": Array [\n -0,\n Infinity,\n NaN,\n ],\n \"circularReference\": [Circular],\n \"map\": Map {\n \"prop\" => \"value\",\n },\n \"object\": Object {},\n Symbol(foo): \"foo\",\n}\n*/\n```\n\n## Usage with options\n\n```js\nfunction onClick() {}\n\nconsole.log(prettyFormat(onClick));\n/*\n[Function onClick]\n*/\n\nconst options = {\n printFunctionName: false,\n};\nconsole.log(prettyFormat(onClick, options));\n/*\n[Function]\n*/\n```\n\n| key | type | default | description |\n| :------------------ | :-------- | :--------- | :------------------------------------------------------ |\n| `callToJSON` | `boolean` | `true` | call `toJSON` method (if it exists) on objects |\n| `escapeRegex` | `boolean` | `false` | escape special characters in regular expressions |\n| `highlight` | `boolean` | `false` | highlight syntax with colors in terminal (some plugins) |\n| `indent` | `number` | `2` | spaces in each level of indentation |\n| `maxDepth` | `number` | `Infinity` | levels to print in arrays, objects, elements, and so on |\n| `min` | `boolean` | `false` | minimize added space: no indentation nor line breaks |\n| `plugins` | `array` | `[]` | plugins to serialize application-specific data types |\n| `printFunctionName` | `boolean` | `true` | include or omit the name of a function |\n| `theme` | `object` | | colors to highlight syntax in terminal |\n\nProperty values of `theme` are from\n[ansi-styles colors](https://github.com/chalk/ansi-styles#colors)\n\n```js\nconst DEFAULT_THEME = {\n comment: 'gray',\n content: 'reset',\n prop: 'yellow',\n tag: 'cyan',\n value: 'green',\n};\n```\n\n## Usage with plugins\n\nThe `pretty-format` package provides some built-in plugins, including:\n\n* `ReactElement` for elements from `react`\n* `ReactTestComponent` for test objects from `react-test-renderer`\n\n```js\n// CommonJS\nconst prettyFormat = require('pretty-format');\nconst ReactElement = prettyFormat.plugins.ReactElement;\nconst ReactTestComponent = prettyFormat.plugins.ReactTestComponent;\n\nconst React = require('react');\nconst renderer = require('react-test-renderer');\n```\n\n```js\n// ES2015 modules and destructuring assignment\nimport prettyFormat from 'pretty-format';\nconst {ReactElement, ReactTestComponent} = prettyFormat.plugins;\n\nimport React from 'react';\nimport renderer from 'react-test-renderer';\n```\n\n```js\nconst onClick = () => {};\nconst element = React.createElement('button', {onClick}, 'Hello World');\n\nconst formatted1 = prettyFormat(element, {\n plugins: [ReactElement],\n printFunctionName: false,\n});\nconst formatted2 = prettyFormat(renderer.create(element).toJSON(), {\n plugins: [ReactTestComponent],\n printFunctionName: false,\n});\n/*\n\n*/\n```\n\n## Usage in Jest\n\nFor snapshot tests, Jest uses `pretty-format` with options that include some of\nits built-in plugins. For this purpose, plugins are also known as **snapshot\nserializers**.\n\nTo serialize application-specific data types, you can add modules to\n`devDependencies` of a project, and then:\n\nIn an **individual** test file, you can add a module as follows. It precedes any\nmodules from Jest configuration.\n\n```js\nimport serializer from 'my-serializer-module';\nexpect.addSnapshotSerializer(serializer);\n\n// tests which have `expect(value).toMatchSnapshot()` assertions\n```\n\nFor **all** test files, you can specify modules in Jest configuration. They\nprecede built-in plugins for React, HTML, and Immutable.js data types. For\nexample, in a `package.json` file:\n\n```json\n{\n \"jest\": {\n \"snapshotSerializers\": [\"my-serializer-module\"]\n }\n}\n```\n\n## Writing plugins\n\nA plugin is a JavaScript object.\n\nIf `options` has a `plugins` array: for the first plugin whose `test(val)`\nmethod returns a truthy value, then `prettyFormat(val, options)` returns the\nresult from either:\n\n* `serialize(val, …)` method of the **improved** interface (available in\n **version 21** or later)\n* `print(val, …)` method of the **original** interface (if plugin does not have\n `serialize` method)\n\n### test\n\nWrite `test` so it can receive `val` argument of any type. To serialize\n**objects** which have certain properties, then a guarded expression like\n`val != null && …` or more concise `val && …` prevents the following errors:\n\n* `TypeError: Cannot read property 'whatever' of null`\n* `TypeError: Cannot read property 'whatever' of undefined`\n\nFor example, `test` method of built-in `ReactElement` plugin:\n\n```js\nconst elementSymbol = Symbol.for('react.element');\nconst test = val => val && val.$$typeof === elementSymbol;\n```\n\nPay attention to efficiency in `test` because `pretty-format` calls it often.\n\n### serialize\n\nThe **improved** interface is available in **version 21** or later.\n\nWrite `serialize` to return a string, given the arguments:\n\n* `val` which “passed the test”\n* unchanging `config` object: derived from `options`\n* current `indentation` string: concatenate to `indent` from `config`\n* current `depth` number: compare to `maxDepth` from `config`\n* current `refs` array: find circular references in objects\n* `printer` callback function: serialize children\n\n### config\n\n| key | type | description |\n| :------------------ | :-------- | :------------------------------------------------------ |\n| `callToJSON` | `boolean` | call `toJSON` method (if it exists) on objects |\n| `colors` | `Object` | escape codes for colors to highlight syntax |\n| `escapeRegex` | `boolean` | escape special characters in regular expressions |\n| `indent` | `string` | spaces in each level of indentation |\n| `maxDepth` | `number` | levels to print in arrays, objects, elements, and so on |\n| `min` | `boolean` | minimize added space: no indentation nor line breaks |\n| `plugins` | `array` | plugins to serialize application-specific data types |\n| `printFunctionName` | `boolean` | include or omit the name of a function |\n| `spacingInner` | `strong` | spacing to separate items in a list |\n| `spacingOuter` | `strong` | spacing to enclose a list of items |\n\nEach property of `colors` in `config` corresponds to a property of `theme` in\n`options`:\n\n* the key is the same (for example, `tag`)\n* the value in `colors` is a object with `open` and `close` properties whose\n values are escape codes from\n [ansi-styles](https://github.com/chalk/ansi-styles) for the color value in\n `theme` (for example, `'cyan'`)\n\nSome properties in `config` are derived from `min` in `options`:\n\n* `spacingInner` and `spacingOuter` are **newline** if `min` is `false`\n* `spacingInner` is **space** and `spacingOuter` is **empty string** if `min` is\n `true`\n\n### Example of serialize and test\n\nThis plugin is a pattern you can apply to serialize composite data types. Of\ncourse, `pretty-format` does not need a plugin to serialize arrays :)\n\n```js\n// We reused more code when we factored out a function for child items\n// that is independent of depth, name, and enclosing punctuation (see below).\nconst SEPARATOR = ',';\nfunction serializeItems(items, config, indentation, depth, refs, printer) {\n if (items.length === 0) {\n return '';\n }\n const indentationItems = indentation + config.indent;\n return (\n config.spacingOuter +\n items\n .map(\n item =>\n indentationItems +\n printer(item, config, indentationItems, depth, refs), // callback\n )\n .join(SEPARATOR + config.spacingInner) +\n (config.min ? '' : SEPARATOR) + // following the last item\n config.spacingOuter +\n indentation\n );\n}\n\nconst plugin = {\n test(val) {\n return Array.isArray(val);\n },\n serialize(array, config, indentation, depth, refs, printer) {\n const name = array.constructor.name;\n return ++depth > config.maxDepth\n ? '[' + name + ']'\n : (config.min ? '' : name + ' ') +\n '[' +\n serializeItems(array, config, indentation, depth, refs, printer) +\n ']';\n },\n};\n```\n\n```js\nconst val = {\n filter: 'completed',\n items: [\n {\n text: 'Write test',\n completed: true,\n },\n {\n text: 'Write serialize',\n completed: true,\n },\n ],\n};\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n plugins: [plugin],\n }),\n);\n/*\nObject {\n \"filter\": \"completed\",\n \"items\": Array [\n Object {\n \"completed\": true,\n \"text\": \"Write test\",\n },\n Object {\n \"completed\": true,\n \"text\": \"Write serialize\",\n },\n ],\n}\n*/\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n indent: 4,\n plugins: [plugin],\n }),\n);\n/*\nObject {\n \"filter\": \"completed\",\n \"items\": Array [\n Object {\n \"completed\": true,\n \"text\": \"Write test\",\n },\n Object {\n \"completed\": true,\n \"text\": \"Write serialize\",\n },\n ],\n}\n*/\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n maxDepth: 1,\n plugins: [plugin],\n }),\n);\n/*\nObject {\n \"filter\": \"completed\",\n \"items\": [Array],\n}\n*/\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n min: true,\n plugins: [plugin],\n }),\n);\n/*\n{\"filter\": \"completed\", \"items\": [{\"completed\": true, \"text\": \"Write test\"}, {\"completed\": true, \"text\": \"Write serialize\"}]}\n*/\n```\n\n### print\n\nThe **original** interface is adequate for plugins:\n\n* that **do not** depend on options other than `highlight` or `min`\n* that **do not** depend on `depth` or `refs` in recursive traversal, and\n* if values either\n * do **not** require indentation, or\n * do **not** occur as children of JavaScript data structures (for example,\n array)\n\nWrite `print` to return a string, given the arguments:\n\n* `val` which “passed the test”\n* current `printer(valChild)` callback function: serialize children\n* current `indenter(lines)` callback function: indent lines at the next level\n* unchanging `config` object: derived from `options`\n* unchanging `colors` object: derived from `options`\n\nThe 3 properties of `config` are `min` in `options` and:\n\n* `spacing` and `edgeSpacing` are **newline** if `min` is `false`\n* `spacing` is **space** and `edgeSpacing` is **empty string** if `min` is\n `true`\n\nEach property of `colors` corresponds to a property of `theme` in `options`:\n\n* the key is the same (for example, `tag`)\n* the value in `colors` is a object with `open` and `close` properties whose\n values are escape codes from\n [ansi-styles](https://github.com/chalk/ansi-styles) for the color value in\n `theme` (for example, `'cyan'`)\n\n### Example of print and test\n\nThis plugin prints functions with the **number of named arguments** excluding\nrest argument.\n\n```js\nconst plugin = {\n print(val) {\n return `[Function ${val.name || 'anonymous'} ${val.length}]`;\n },\n test(val) {\n return typeof val === 'function';\n },\n};\n```\n\n```js\nconst val = {\n onClick(event) {},\n render() {},\n};\n\nprettyFormat(val, {\n plugins: [plugin],\n});\n/*\nObject {\n \"onClick\": [Function onClick 1],\n \"render\": [Function render 0],\n}\n*/\n\nprettyFormat(val);\n/*\nObject {\n \"onClick\": [Function onClick],\n \"render\": [Function render],\n}\n*/\n```\n\nThis plugin **ignores** the `printFunctionName` option. That limitation of the\noriginal `print` interface is a reason to use the improved `serialize`\ninterface, described above.\n\n```js\nprettyFormat(val, {\n plugins: [pluginOld],\n printFunctionName: false,\n});\n/*\nObject {\n \"onClick\": [Function onClick 1],\n \"render\": [Function render 0],\n}\n*/\n\nprettyFormat(val, {\n printFunctionName: false,\n});\n/*\nObject {\n \"onClick\": [Function],\n \"render\": [Function],\n}\n*/\n```\n","_id":"pretty-format@23.0.0-charlie.3","dist":{"shasum":"b251f1bdd5da81110c8d48842ac722405085f5fc","tarball":"http://localhost:4545/npm/registry/pretty-format/pretty-format-23.0.0-charlie.3.tgz","fileCount":23,"unpackedSize":432720,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbBDA1CRA9TVsSAnZWagAAKSgP/1UHycsBuzD5SDOuJ2GD\nwF7sqH+MGh0ycpMimPKuSAkkBFCyzJSwq4iFxrtxXDPWmy7lE9NKtMLNgiT9\nUVZRIjrCZ0+x9s5QKPC+S65eqp+vsRW35sLVfYM7DYK3bqQNFAZUUTyTI1TV\npl8A9vt2ObC5ukMkL5TIgQAMN0+3vJUA2qp/4kTsV1LMZoa4UhMJ2YTMWfMU\nDKBhIT7sD0AfEn6Qcp0zeKGBq2O3L8ayUvGQnVLhLzL2PbqLKC8X0VfkBZVS\nppZi069gCLigGz3plypD2lB0YBTh+VCna1Zg7E5dqbOCEql1ei9ttOU8MjPw\npquVopTAIpv+tnTcHg/lkcFapZaoy75zoD2PFBLD2XwHy92W1UUcIdOLdz61\nuBMP3BDhj6b4MP7ZRSI4JNhXRGAYPmRbzm4IcdKozhzyzAKG4v/RSPE35Jmr\nl5mM97CvHx6BgIZ59ZFrKHrFClT3nYvycT+RPpItFDDb9IKY0jaDaMtLu5uw\n7yxnzkiOukVlIXIX/hcpiK+8lDAJoY+i6IRCAnvRUZiBku8RtkQOOxgSe/6T\nWqZSBH5vpBSMPW7wrokmtjPNeC59mINdn+k/+hyo3DL2ZVKBd4QrKcxCVJew\nB13+k+fFBNsDWPlr4epY1/xfK0LQid2SmCi/iN2VGMEx53XhyFi7MQKgWAG+\nqKOv\r\n=DjCz\r\n-----END PGP SIGNATURE-----\r\n","integrity":"sha512-y8rm7AlLBm7i4O2hC4Q2OKh5Z/lccouq80jrRHGVyc9x0xJRU17VnkgKuTrbLMvL7DNVVqN0GqRDMxoIe+Pxwg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCUUjkcMo0H1BBUOZ6CT1b9pFWCydLNJJUE7aIParzysQIgXoAskg2uQSng+UVx7qf2Jei0qDW5yHtmDXG6TR2qT88="}]},"maintainers":[{"email":"aaron@abramov.io","name":"aaronabramov"},{"email":"christoph.pojer@gmail.com","name":"cpojer"},{"email":"opensource+npm@fb.com","name":"fb"},{"email":"jean@lauliac.com","name":"jeanlauliac"},{"email":"mjesun@hotmail.com","name":"mjesun"}],"_npmUser":{"name":"mjesun","email":"mjesun@hotmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pretty-format_23.0.0-charlie.3_1527001141117_0.6048019972719636"},"_hasShrinkwrap":false},"23.0.0-charlie.4":{"name":"pretty-format","version":"23.0.0-charlie.4","repository":{"type":"git","url":"https://github.com/facebook/jest.git"},"license":"MIT","description":"Stringify any JavaScript value.","main":"build/index.js","browser":"build-es5/index.js","author":{"name":"James Kyle","email":"me@thejameskyle.com"},"dependencies":{"ansi-regex":"^3.0.0","ansi-styles":"^3.2.0"},"devDependencies":{"immutable":"^4.0.0-rc.9","react":"*","react-dom":"*","react-test-renderer":"*"},"readmeFilename":"README.md","readme":"# pretty-format\n\n> Stringify any JavaScript value.\n\n* Supports all built-in JavaScript types\n * primitive types: `Boolean`, `null`, `Number`, `String`, `Symbol`,\n `undefined`\n * other non-collection types: `Date`, `Error`, `Function`, `RegExp`\n * collection types:\n * `arguments`, `Array`, `ArrayBuffer`, `DataView`, `Float32Array`,\n `Float64Array`, `Int8Array`, `Int16Array`, `Int32Array`, `Uint8Array`,\n `Uint8ClampedArray`, `Uint16Array`, `Uint32Array`,\n * `Map`, `Set`, `WeakMap`, `WeakSet`\n * `Object`\n* [Blazingly fast](https://gist.github.com/thejameskyle/2b04ffe4941aafa8f970de077843a8fd)\n * similar performance to `JSON.stringify` in v8\n * significantly faster than `util.format` in Node.js\n* Serialize application-specific data types with built-in or user-defined\n plugins\n\n## Installation\n\n```sh\n$ yarn add pretty-format\n```\n\n## Usage\n\n```js\nconst prettyFormat = require('pretty-format'); // CommonJS\n```\n\n```js\nimport prettyFormat from 'pretty-format'; // ES2015 modules\n```\n\n```js\nconst val = {object: {}};\nval.circularReference = val;\nval[Symbol('foo')] = 'foo';\nval.map = new Map([['prop', 'value']]);\nval.array = [-0, Infinity, NaN];\n\nconsole.log(prettyFormat(val));\n/*\nObject {\n \"array\": Array [\n -0,\n Infinity,\n NaN,\n ],\n \"circularReference\": [Circular],\n \"map\": Map {\n \"prop\" => \"value\",\n },\n \"object\": Object {},\n Symbol(foo): \"foo\",\n}\n*/\n```\n\n## Usage with options\n\n```js\nfunction onClick() {}\n\nconsole.log(prettyFormat(onClick));\n/*\n[Function onClick]\n*/\n\nconst options = {\n printFunctionName: false,\n};\nconsole.log(prettyFormat(onClick, options));\n/*\n[Function]\n*/\n```\n\n| key | type | default | description |\n| :------------------ | :-------- | :--------- | :------------------------------------------------------ |\n| `callToJSON` | `boolean` | `true` | call `toJSON` method (if it exists) on objects |\n| `escapeRegex` | `boolean` | `false` | escape special characters in regular expressions |\n| `highlight` | `boolean` | `false` | highlight syntax with colors in terminal (some plugins) |\n| `indent` | `number` | `2` | spaces in each level of indentation |\n| `maxDepth` | `number` | `Infinity` | levels to print in arrays, objects, elements, and so on |\n| `min` | `boolean` | `false` | minimize added space: no indentation nor line breaks |\n| `plugins` | `array` | `[]` | plugins to serialize application-specific data types |\n| `printFunctionName` | `boolean` | `true` | include or omit the name of a function |\n| `theme` | `object` | | colors to highlight syntax in terminal |\n\nProperty values of `theme` are from\n[ansi-styles colors](https://github.com/chalk/ansi-styles#colors)\n\n```js\nconst DEFAULT_THEME = {\n comment: 'gray',\n content: 'reset',\n prop: 'yellow',\n tag: 'cyan',\n value: 'green',\n};\n```\n\n## Usage with plugins\n\nThe `pretty-format` package provides some built-in plugins, including:\n\n* `ReactElement` for elements from `react`\n* `ReactTestComponent` for test objects from `react-test-renderer`\n\n```js\n// CommonJS\nconst prettyFormat = require('pretty-format');\nconst ReactElement = prettyFormat.plugins.ReactElement;\nconst ReactTestComponent = prettyFormat.plugins.ReactTestComponent;\n\nconst React = require('react');\nconst renderer = require('react-test-renderer');\n```\n\n```js\n// ES2015 modules and destructuring assignment\nimport prettyFormat from 'pretty-format';\nconst {ReactElement, ReactTestComponent} = prettyFormat.plugins;\n\nimport React from 'react';\nimport renderer from 'react-test-renderer';\n```\n\n```js\nconst onClick = () => {};\nconst element = React.createElement('button', {onClick}, 'Hello World');\n\nconst formatted1 = prettyFormat(element, {\n plugins: [ReactElement],\n printFunctionName: false,\n});\nconst formatted2 = prettyFormat(renderer.create(element).toJSON(), {\n plugins: [ReactTestComponent],\n printFunctionName: false,\n});\n/*\n\n*/\n```\n\n## Usage in Jest\n\nFor snapshot tests, Jest uses `pretty-format` with options that include some of\nits built-in plugins. For this purpose, plugins are also known as **snapshot\nserializers**.\n\nTo serialize application-specific data types, you can add modules to\n`devDependencies` of a project, and then:\n\nIn an **individual** test file, you can add a module as follows. It precedes any\nmodules from Jest configuration.\n\n```js\nimport serializer from 'my-serializer-module';\nexpect.addSnapshotSerializer(serializer);\n\n// tests which have `expect(value).toMatchSnapshot()` assertions\n```\n\nFor **all** test files, you can specify modules in Jest configuration. They\nprecede built-in plugins for React, HTML, and Immutable.js data types. For\nexample, in a `package.json` file:\n\n```json\n{\n \"jest\": {\n \"snapshotSerializers\": [\"my-serializer-module\"]\n }\n}\n```\n\n## Writing plugins\n\nA plugin is a JavaScript object.\n\nIf `options` has a `plugins` array: for the first plugin whose `test(val)`\nmethod returns a truthy value, then `prettyFormat(val, options)` returns the\nresult from either:\n\n* `serialize(val, …)` method of the **improved** interface (available in\n **version 21** or later)\n* `print(val, …)` method of the **original** interface (if plugin does not have\n `serialize` method)\n\n### test\n\nWrite `test` so it can receive `val` argument of any type. To serialize\n**objects** which have certain properties, then a guarded expression like\n`val != null && …` or more concise `val && …` prevents the following errors:\n\n* `TypeError: Cannot read property 'whatever' of null`\n* `TypeError: Cannot read property 'whatever' of undefined`\n\nFor example, `test` method of built-in `ReactElement` plugin:\n\n```js\nconst elementSymbol = Symbol.for('react.element');\nconst test = val => val && val.$$typeof === elementSymbol;\n```\n\nPay attention to efficiency in `test` because `pretty-format` calls it often.\n\n### serialize\n\nThe **improved** interface is available in **version 21** or later.\n\nWrite `serialize` to return a string, given the arguments:\n\n* `val` which “passed the test”\n* unchanging `config` object: derived from `options`\n* current `indentation` string: concatenate to `indent` from `config`\n* current `depth` number: compare to `maxDepth` from `config`\n* current `refs` array: find circular references in objects\n* `printer` callback function: serialize children\n\n### config\n\n| key | type | description |\n| :------------------ | :-------- | :------------------------------------------------------ |\n| `callToJSON` | `boolean` | call `toJSON` method (if it exists) on objects |\n| `colors` | `Object` | escape codes for colors to highlight syntax |\n| `escapeRegex` | `boolean` | escape special characters in regular expressions |\n| `indent` | `string` | spaces in each level of indentation |\n| `maxDepth` | `number` | levels to print in arrays, objects, elements, and so on |\n| `min` | `boolean` | minimize added space: no indentation nor line breaks |\n| `plugins` | `array` | plugins to serialize application-specific data types |\n| `printFunctionName` | `boolean` | include or omit the name of a function |\n| `spacingInner` | `strong` | spacing to separate items in a list |\n| `spacingOuter` | `strong` | spacing to enclose a list of items |\n\nEach property of `colors` in `config` corresponds to a property of `theme` in\n`options`:\n\n* the key is the same (for example, `tag`)\n* the value in `colors` is a object with `open` and `close` properties whose\n values are escape codes from\n [ansi-styles](https://github.com/chalk/ansi-styles) for the color value in\n `theme` (for example, `'cyan'`)\n\nSome properties in `config` are derived from `min` in `options`:\n\n* `spacingInner` and `spacingOuter` are **newline** if `min` is `false`\n* `spacingInner` is **space** and `spacingOuter` is **empty string** if `min` is\n `true`\n\n### Example of serialize and test\n\nThis plugin is a pattern you can apply to serialize composite data types. Of\ncourse, `pretty-format` does not need a plugin to serialize arrays :)\n\n```js\n// We reused more code when we factored out a function for child items\n// that is independent of depth, name, and enclosing punctuation (see below).\nconst SEPARATOR = ',';\nfunction serializeItems(items, config, indentation, depth, refs, printer) {\n if (items.length === 0) {\n return '';\n }\n const indentationItems = indentation + config.indent;\n return (\n config.spacingOuter +\n items\n .map(\n item =>\n indentationItems +\n printer(item, config, indentationItems, depth, refs), // callback\n )\n .join(SEPARATOR + config.spacingInner) +\n (config.min ? '' : SEPARATOR) + // following the last item\n config.spacingOuter +\n indentation\n );\n}\n\nconst plugin = {\n test(val) {\n return Array.isArray(val);\n },\n serialize(array, config, indentation, depth, refs, printer) {\n const name = array.constructor.name;\n return ++depth > config.maxDepth\n ? '[' + name + ']'\n : (config.min ? '' : name + ' ') +\n '[' +\n serializeItems(array, config, indentation, depth, refs, printer) +\n ']';\n },\n};\n```\n\n```js\nconst val = {\n filter: 'completed',\n items: [\n {\n text: 'Write test',\n completed: true,\n },\n {\n text: 'Write serialize',\n completed: true,\n },\n ],\n};\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n plugins: [plugin],\n }),\n);\n/*\nObject {\n \"filter\": \"completed\",\n \"items\": Array [\n Object {\n \"completed\": true,\n \"text\": \"Write test\",\n },\n Object {\n \"completed\": true,\n \"text\": \"Write serialize\",\n },\n ],\n}\n*/\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n indent: 4,\n plugins: [plugin],\n }),\n);\n/*\nObject {\n \"filter\": \"completed\",\n \"items\": Array [\n Object {\n \"completed\": true,\n \"text\": \"Write test\",\n },\n Object {\n \"completed\": true,\n \"text\": \"Write serialize\",\n },\n ],\n}\n*/\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n maxDepth: 1,\n plugins: [plugin],\n }),\n);\n/*\nObject {\n \"filter\": \"completed\",\n \"items\": [Array],\n}\n*/\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n min: true,\n plugins: [plugin],\n }),\n);\n/*\n{\"filter\": \"completed\", \"items\": [{\"completed\": true, \"text\": \"Write test\"}, {\"completed\": true, \"text\": \"Write serialize\"}]}\n*/\n```\n\n### print\n\nThe **original** interface is adequate for plugins:\n\n* that **do not** depend on options other than `highlight` or `min`\n* that **do not** depend on `depth` or `refs` in recursive traversal, and\n* if values either\n * do **not** require indentation, or\n * do **not** occur as children of JavaScript data structures (for example,\n array)\n\nWrite `print` to return a string, given the arguments:\n\n* `val` which “passed the test”\n* current `printer(valChild)` callback function: serialize children\n* current `indenter(lines)` callback function: indent lines at the next level\n* unchanging `config` object: derived from `options`\n* unchanging `colors` object: derived from `options`\n\nThe 3 properties of `config` are `min` in `options` and:\n\n* `spacing` and `edgeSpacing` are **newline** if `min` is `false`\n* `spacing` is **space** and `edgeSpacing` is **empty string** if `min` is\n `true`\n\nEach property of `colors` corresponds to a property of `theme` in `options`:\n\n* the key is the same (for example, `tag`)\n* the value in `colors` is a object with `open` and `close` properties whose\n values are escape codes from\n [ansi-styles](https://github.com/chalk/ansi-styles) for the color value in\n `theme` (for example, `'cyan'`)\n\n### Example of print and test\n\nThis plugin prints functions with the **number of named arguments** excluding\nrest argument.\n\n```js\nconst plugin = {\n print(val) {\n return `[Function ${val.name || 'anonymous'} ${val.length}]`;\n },\n test(val) {\n return typeof val === 'function';\n },\n};\n```\n\n```js\nconst val = {\n onClick(event) {},\n render() {},\n};\n\nprettyFormat(val, {\n plugins: [plugin],\n});\n/*\nObject {\n \"onClick\": [Function onClick 1],\n \"render\": [Function render 0],\n}\n*/\n\nprettyFormat(val);\n/*\nObject {\n \"onClick\": [Function onClick],\n \"render\": [Function render],\n}\n*/\n```\n\nThis plugin **ignores** the `printFunctionName` option. That limitation of the\noriginal `print` interface is a reason to use the improved `serialize`\ninterface, described above.\n\n```js\nprettyFormat(val, {\n plugins: [pluginOld],\n printFunctionName: false,\n});\n/*\nObject {\n \"onClick\": [Function onClick 1],\n \"render\": [Function render 0],\n}\n*/\n\nprettyFormat(val, {\n printFunctionName: false,\n});\n/*\nObject {\n \"onClick\": [Function],\n \"render\": [Function],\n}\n*/\n```\n","_id":"pretty-format@23.0.0-charlie.4","dist":{"shasum":"9b3f34aa66113f497b637a9b72a9c8a5ff749d0d","tarball":"http://localhost:4545/npm/registry/pretty-format/pretty-format-23.0.0-charlie.4.tgz","fileCount":23,"unpackedSize":432720,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbBUWSCRA9TVsSAnZWagAADEQP/j8IvBo0ZUMbkn/cI/xp\n2wMbKTH2WeBxkV7aIBxS57FwGrEiFSUzDgi2hmWmjFpEaT/UchC4BgKfTCde\nDi4MkgbPsr475prPHR7xGDRXnOK1MNQ89cWQajWWjKfbqludocE4UloHd/pO\nsw+6d5+uvSOmo51KvXMnYrvQ4a26B9HoYUHMEKR58uWVTSIfxRIyg8nRkcsB\noxk+A27p8kvOBh/h5slsTDiHahODY8CGiz9rLGUetVQ5Pksm3iMwTXE2EXT3\nvAwUt8oTDMnUNPLQV8QB3N1qrpGL1N0ibMPhPwndaF+PG2KM7W/l5/C14Ha7\nX5hH9P+zNInwg0YkNpW+Dt3ONVZZiQArQ0e3GQa65FgPgXLiDZUxfRsXgGnX\nr16XOYwyUIiQwPiIiWOdfLx4BQdm0kNVNK7wTcUTqX/WPDH4S3O4t33rGWoL\nZQn4ENjQ70spKJ6CQtW/64lfs2aOsFs9sWorTAKiIcRkxJYkF3D/3x/OsAxS\n+T5HUZXgMu1B2vpwGdnxkYDm6gnubkZKKdYh+OMMnrnFNJIlx8zz4k0VwdVg\nrNu7oMruRuEcSqSlhIngrvNOMceHqwW80PORBgb6Gds7QTT9sOATPUKox5Kz\nnmHIb2v5101Yewf841RWuD0eUInVdqhIvTzJtRcCt1ggoTz4DiSojauOlvo2\nRpOc\r\n=tUpG\r\n-----END PGP SIGNATURE-----\r\n","integrity":"sha512-Nkvd/57vjhvVApnST3HZyTEPtHjYcQzxTlIM3X8t6PcVyIvzKZcGWNYOCAYh7erd0etU4CNHNCKfRHgRmI9Uog==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD06ivsLGO0Wnd/1P8UrdpZQT7jTOlq5UpGNqPJee6p8QIgN8NwUYnEJjZu+5As6PueasZSAAaTp2+UH3TAhLJeg7c="}]},"maintainers":[{"email":"aaron@abramov.io","name":"aaronabramov"},{"email":"christoph.pojer@gmail.com","name":"cpojer"},{"email":"opensource+npm@fb.com","name":"fb"},{"email":"jean@lauliac.com","name":"jeanlauliac"},{"email":"mjesun@hotmail.com","name":"mjesun"}],"_npmUser":{"name":"mjesun","email":"mjesun@hotmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pretty-format_23.0.0-charlie.4_1527072146060_0.2617374969989241"},"_hasShrinkwrap":false},"23.0.0":{"name":"pretty-format","version":"23.0.0","repository":{"type":"git","url":"https://github.com/facebook/jest.git"},"license":"MIT","description":"Stringify any JavaScript value.","main":"build/index.js","browser":"build-es5/index.js","author":{"name":"James Kyle","email":"me@thejameskyle.com"},"dependencies":{"ansi-regex":"^3.0.0","ansi-styles":"^3.2.0"},"devDependencies":{"immutable":"^4.0.0-rc.9","react":"*","react-dom":"*","react-test-renderer":"*"},"_id":"pretty-format@23.0.0","dist":{"shasum":"b66dc584a0907b1969783c4c20e4d1180b18ac75","tarball":"http://localhost:4545/npm/registry/pretty-format/pretty-format-23.0.0.tgz","fileCount":23,"unpackedSize":432710,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbBvXDCRA9TVsSAnZWagAAVF4P/1rjgZx0TLyQwWM5ZUnk\n8QVeN/n3frezxgbc0bYGmHsqePscEaV+u4JhuHXCEq208OsLZvnafsbfdouF\nC6HuKwzwPg47ecZI1rw60BGZ2dYBL/8/yzWAZXH3qSCfFd3BV0nCA4r1DwTT\n33gOadWiqAoDYLFnRsnRX7bHZseaCqNDMghHFXsSBXRRoZx6I6QQcuiIn6UM\njQFAgH4i4idU1FMtUwixbfduqreV8TS5ssuxHUhs1QC4q5S+buetOJ8Js/wo\n06a/7Jz84AdRtKS/b+1i+orOrPmFGspvpuXRmsIuX2hH+Zy8oSZq1pB+yQuw\nkS63ooT103mqeBg2oN0cgO+r+JUCxd3oHbdWm1ah9rbMR3RyzftozW4B2Gat\nZiRgAgiJub/U3wIqQEzgfVVui2FzfVLMinSFEg5+m8jupy4lc9O8e1+KKeLm\nBE/HCLJhc/DcLsYxXF3/Vrsw9yRQr/7TipdabUzscvJPO1aT+4tukydIlf29\nO2tWca+za3OLFZIGNTc1WKTrBrnVynukSeuQchLXWpQ3LsYyPGQq8wRa+hlu\n9LE0TX+VmGdcADeL4q4nwk11SSLgmMBqsbphl39HihfORxaWXE7ntM4eN7l+\n/NmaFmmJxrXhk9acbMQaTNrBE2YDdv15PEAYdxT8XvXsuVHBGyKujSmCbY7r\n3KgL\r\n=8WA7\r\n-----END PGP SIGNATURE-----\r\n","integrity":"sha512-i70nY/4whJ5SAD3Mc3X07CD5cTkrXtoD94nBFV+Y80sar/3FJC/h6HEhoUK9pVTjadJo+lgSPrgXO4XLC5UAtA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIF9qxHzTOkVvdTSbgOYW5Ln2ArODUV4CnuttQM+Bnc0mAiA1yf6hAcsyzlz4YIr44yXN9tHgjFKCi46usyH9YesKIg=="}]},"maintainers":[{"email":"aaron@abramov.io","name":"aaronabramov"},{"email":"christoph.pojer@gmail.com","name":"cpojer"},{"email":"opensource+npm@fb.com","name":"fb"},{"email":"jean@lauliac.com","name":"jeanlauliac"},{"email":"mjesun@hotmail.com","name":"mjesun"}],"_npmUser":{"name":"mjesun","email":"mjesun@hotmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pretty-format_23.0.0_1527182786416_0.3664543715646642"},"_hasShrinkwrap":false},"23.0.1":{"name":"pretty-format","version":"23.0.1","repository":{"type":"git","url":"https://github.com/facebook/jest.git"},"license":"MIT","description":"Stringify any JavaScript value.","main":"build/index.js","browser":"build-es5/index.js","author":{"name":"James Kyle","email":"me@thejameskyle.com"},"dependencies":{"ansi-regex":"^3.0.0","ansi-styles":"^3.2.0"},"devDependencies":{"immutable":"^4.0.0-rc.9","react":"*","react-dom":"*","react-test-renderer":"*"},"_id":"pretty-format@23.0.1","dist":{"shasum":"d61d065268e4c759083bccbca27a01ad7c7601f4","tarball":"http://localhost:4545/npm/registry/pretty-format/pretty-format-23.0.1.tgz","fileCount":23,"unpackedSize":433054,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbCs8yCRA9TVsSAnZWagAA/XUP/17XFHffKMQK5sHkzigC\nJX2sCkgY0LzowxMkzRO6ocY0sWnBrJXG9/z+hb4IDuzDuaLfofmw17DC2zTY\n/TOJz3118Xbb+WKLJ3wccT6GPrKeX3Irqf9D4iMwmZ+CrEEB9Fe25Oag8MRO\nQL/r1wT4KGfsIQibauUJySzMsHqV5PCYArX1LC5m8pNs25CVDsMtEi0gcCRN\nGTRo+HWziauDVJkZaahi/LkgGBbqltsDlZe4b5lztQ+2/bNNJ0hK9H+DzQoY\nFEakHiVCbD7eDf3AbS/WoSqpKA7EbF1eTYiKlmOeQETn4JOV33FeiZAQVaLg\ni+4jpZYosMppdhbHWDplKEko9kmKhQiQ5+bjNR1p9B5c/zb29M8qD0KzWuLV\nSjmepFXcWFyAYVHcyTTjrYMRW6MiXc6MOIfH8WWP6/kG0hDpqWNSbG8JwtOW\nhNItR7kc6VIG+G4NeJ6wS7RZi6w9YWiPtWbF8tDboeidsOVlS5GPUab6upag\n04lMeLJQdf0hNAtrFJsMb9lDs8q+wLoH5OeihTcMnVAIrC3XR8mM3C0aFdD+\n5+pMv98mEGCTgQPbzXiUlmNLQhVpGSE4ZRQcNe74y32sZvMTsIah9aJUXO1q\nmN3vOnuSzTxlR9BW82ISg4TG5us+3ywD1JxUrLhJLNL423sB7s+ehPE+hjwt\nQSMI\r\n=CHUR\r\n-----END PGP SIGNATURE-----\r\n","integrity":"sha512-B70OAPh817O6ngYj/FWifGUQx3Q+PHYEKEqUVAJSisKr1gAa4pbvtI6aKcUZGOqaFW/+8hD1Djx/ZqWRYi7Rzw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDfkO1R0C1X2jIqHvdK/Exh1ueJR1/9gCkKA/te364inwIhAK/NTolvGHpNesTdqBb/UtUnLj4ki4IBiDNr1Jj+AFR1"}]},"maintainers":[{"email":"aaron@abramov.io","name":"aaronabramov"},{"email":"christoph.pojer@gmail.com","name":"cpojer"},{"email":"opensource+npm@fb.com","name":"fb"},{"email":"jean@lauliac.com","name":"jeanlauliac"},{"email":"mjesun@hotmail.com","name":"mjesun"}],"_npmUser":{"name":"mjesun","email":"mjesun@hotmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pretty-format_23.0.1_1527435057085_0.6097930469393269"},"_hasShrinkwrap":false},"23.2.0":{"name":"pretty-format","version":"23.2.0","repository":{"type":"git","url":"https://github.com/facebook/jest.git"},"license":"MIT","description":"Stringify any JavaScript value.","main":"build/index.js","browser":"build-es5/index.js","author":{"name":"James Kyle","email":"me@thejameskyle.com"},"dependencies":{"ansi-regex":"^3.0.0","ansi-styles":"^3.2.0"},"devDependencies":{"immutable":"^4.0.0-rc.9","react":"*","react-dom":"*","react-test-renderer":"*"},"_id":"pretty-format@23.2.0","dist":{"shasum":"3b0aaa63c018a53583373c1cb3a5d96cc5e83017","tarball":"http://localhost:4545/npm/registry/pretty-format/pretty-format-23.2.0.tgz","fileCount":23,"unpackedSize":433246,"integrity":"sha512-swQ+9gCqL+OC8ti2JWr1wG9XO4iZez5a3bPHzgeWYFNZHrFuovCRIyNd2JDvnOsPT3NZ/gkng5ZCS8ItdtFx4Q==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAGByaOX39cBe3b89TbuAsQlbTaTsy+/SY7QQS7stR8cAiA9T+XJSFWVMblnjGgs3kKAo1IiNexDrvPmHcqLW/wZxw=="}]},"maintainers":[{"email":"aaron@abramov.io","name":"aaronabramov"},{"email":"christoph.pojer@gmail.com","name":"cpojer"},{"email":"opensource+npm@fb.com","name":"fb"},{"email":"jean@lauliac.com","name":"jeanlauliac"},{"email":"mjesun@hotmail.com","name":"mjesun"}],"_npmUser":{"name":"mjesun","email":"mjesun@hotmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pretty-format_23.2.0_1529935516862_0.6045534628074585"},"_hasShrinkwrap":false},"23.5.0":{"name":"pretty-format","version":"23.5.0","repository":{"type":"git","url":"git+https://github.com/facebook/jest.git"},"license":"MIT","description":"Stringify any JavaScript value.","main":"build/index.js","browser":"build-es5/index.js","author":{"name":"James Kyle","email":"me@thejameskyle.com"},"dependencies":{"ansi-regex":"^3.0.0","ansi-styles":"^3.2.0"},"devDependencies":{"immutable":"^4.0.0-rc.9","react":"*","react-dom":"*","react-test-renderer":"*"},"bugs":{"url":"https://github.com/facebook/jest/issues"},"homepage":"https://github.com/facebook/jest#readme","_id":"pretty-format@23.5.0","_npmVersion":"5.5.1","_nodeVersion":"8.9.1","_npmUser":{"name":"mjesun","email":"mjesun@hotmail.com"},"dist":{"integrity":"sha512-iFLvYTXOn+C/s7eV+pr4E8DD7lYa2/klXMEz+lvH14qSDWAJ7S+kFmMe1SIWesATHQxopHTxRcB2nrpExhzaBA==","shasum":"0f9601ad9da70fe690a269cd3efca732c210687c","tarball":"http://localhost:4545/npm/registry/pretty-format/pretty-format-23.5.0.tgz","fileCount":16,"unpackedSize":433737,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbbZhvCRA9TVsSAnZWagAAKGgP/1BDFxSthZy6Qhd8XhGL\n5MMo7uyt4GF9fbXBewHcK1wa1QkSQy8WJbUwf56fP3XHJijTJkH4bDYh8RgA\nhiT+YHckwGZo1/5nbKZyss7VUtvGXGWdY4H9wMO14OKu4V2i9mnGvdUF2m3+\nNi0VkHKxvAaGKeimv9HXetqBlAuoDrR1BvEM2Vi1TegSYgrZ86NdThGb8Ws5\nzzv+xALhm317ghiUWsFflVBCKFx9OS2hKJMGxvFk0GCDgFEF41kL9EOpF4nG\nO2eSZH4iLOJJRPnLBUAvopzLg0u/XRX7g1B/JgZXl9MAUvInJmVLMDRyUdJf\nUJtJogrFw52vtKe4l9yDjpT6SodbTDkkMl+0dsdWjt7TG4m21UaZNg7Qlz9C\n0QWei51fptpBBU0bfUCgNy9+Zzr2EsiRfDYRXnW3pkBxSTxsPnihcmkDqL95\nANCIhg9aA0XDck99fermdr5AWWVDD48+CFyuee3UN1y+6/lurjF1QLDHXTrr\nLncGK5yK2sSxrP4M6axSAJYsLvPgP8f3fUuLWXeRYgxLvPRVYbsO+aCBbD7F\nlAmt4Uxqf6MnjxAYj/yo58Ztk9RdCNrGT75qugaVsDIQz39Kqlb/sqg5y6MP\nrZku0qwOviZuA4kHAxG0CeBDZo/qVBljvLuptdUfOH8/n+ChUJc2UCLZbXsR\n4A7+\r\n=DIrr\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDOJBg703+3toNjrQ7ulS3pdEUOiFfsNDwTm4FnrhygUAIgKOC3RxfiQS23CItUnVWuVrdfI8H2fe9HeWfS1f2Wub8="}]},"maintainers":[{"email":"aaron@abramov.io","name":"aaronabramov"},{"email":"christoph.pojer@gmail.com","name":"cpojer"},{"email":"opensource+npm@fb.com","name":"fb"},{"email":"jean@lauliac.com","name":"jeanlauliac"},{"email":"mjesun@hotmail.com","name":"mjesun"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pretty-format_23.5.0_1533909102720_0.21408303510420867"},"_hasShrinkwrap":false},"23.6.0":{"name":"pretty-format","version":"23.6.0","repository":{"type":"git","url":"git+https://github.com/facebook/jest.git"},"license":"MIT","description":"Stringify any JavaScript value.","main":"build/index.js","browser":"build-es5/index.js","author":{"name":"James Kyle","email":"me@thejameskyle.com"},"dependencies":{"ansi-regex":"^3.0.0","ansi-styles":"^3.2.0"},"devDependencies":{"immutable":"^4.0.0-rc.9","react":"*","react-dom":"*","react-test-renderer":"*"},"bugs":{"url":"https://github.com/facebook/jest/issues"},"homepage":"https://github.com/facebook/jest#readme","_id":"pretty-format@23.6.0","_npmVersion":"5.5.1","_nodeVersion":"8.9.1","_npmUser":{"name":"mjesun","email":"mjesun@hotmail.com"},"dist":{"integrity":"sha512-zf9NV1NSlDLDjycnwm6hpFATCGl/K1lt0R/GdkAK2O5LN/rwJoB+Mh93gGJjut4YbmecbfgLWVGSTCr0Ewvvbw==","shasum":"5eaac8eeb6b33b987b7fe6097ea6a8a146ab5760","tarball":"http://localhost:4545/npm/registry/pretty-format/pretty-format-23.6.0.tgz","fileCount":16,"unpackedSize":433899,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJblmbOCRA9TVsSAnZWagAA208P/2Xx+4uHaLcmjwE56Cpt\nbLhQoq7zDL6QV6Jycgav2QJVfbrfOhCWt6RhIVLE6uaJ8T0befdhZmX0qWjV\nsZaRqp4ohpXAozs1sKpEleHLRWuFHrx4jedCegr4WvMweEF1yvdbKwd78pH/\nqELo28QSmMzLCvl4dyA8rBzOjNnPpdpT2VQPkiXYV1BBUcnzfcMOUzjPjwcm\nqE515phlFkrTSnaGw09cRlCa83xS1gEUQsVadalWVdcQttUDaYQmxaEvC6OZ\n/OPklguDQ5v27M8xaNWK2iCf98gEdlTM1S0bualTWwtiKF5FZo+qLcqAu0fu\n0hMtakZ+1jOAPkTdpzhhjana7WsCNdsnyzuaYfpSYxWEGqDgnDlNwx257sPF\nToz/NlvTubvp2F0jSfEkk/FSi3s0FxrNtgjC/SLAUQEahl60n4WQK8bv77Rt\nU4dR01ezM+6MHYSRAZtw9OE523taVCxo46ULnZOlgDgbc5HfMaUpOn0tIPd5\nh8jarRTykZWr9NZ6gE8JFRs4doJwPDi6uHwYlRp4knCJnb0nBVa4dNo4GvYM\n0ms0wBGVygxtXHUSps7c2oRQxpVPzvInrzpLb95jpnV3DWOOsbaY8NJPM40V\nYryrncB4pnDZXXLYm8XBfbFxOrFfKDIX2YjgMdk37SlyS04rTgMERzIsRtXE\n5FHI\r\n=vD3x\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDVy/DnhYZPIayfp9KmmEucgkw/ZaH7fHCMEXk7MOWR8AIhAMU7PrmnQd00yxDtyFaeBuu3rvQo6Jk0mH4D1+JIcU8B"}]},"maintainers":[{"email":"aaron@abramov.io","name":"aaronabramov"},{"email":"christoph.pojer@gmail.com","name":"cpojer"},{"email":"opensource+npm@fb.com","name":"fb"},{"email":"jean@lauliac.com","name":"jeanlauliac"},{"email":"mjesun@hotmail.com","name":"mjesun"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pretty-format_23.6.0_1536583373092_0.039146124648338665"},"_hasShrinkwrap":false},"24.0.0-alpha.0":{"name":"pretty-format","version":"24.0.0-alpha.0","repository":{"type":"git","url":"git+https://github.com/facebook/jest.git"},"license":"MIT","description":"Stringify any JavaScript value.","main":"build/index.js","browser":"build-es5/index.js","author":{"name":"James Kyle","email":"me@thejameskyle.com"},"dependencies":{"ansi-regex":"^4.0.0","ansi-styles":"^3.2.0"},"devDependencies":{"immutable":"^4.0.0-rc.9","react":"*","react-dom":"*","react-test-renderer":"*"},"gitHead":"22f67d49ffcce7a5b6d6891438b837b3b26ba9db","readme":"# pretty-format\n\n> Stringify any JavaScript value.\n\n- Supports all built-in JavaScript types\n - primitive types: `Boolean`, `null`, `Number`, `String`, `Symbol`, `undefined`\n - other non-collection types: `Date`, `Error`, `Function`, `RegExp`\n - collection types:\n - `arguments`, `Array`, `ArrayBuffer`, `DataView`, `Float32Array`, `Float64Array`, `Int8Array`, `Int16Array`, `Int32Array`, `Uint8Array`, `Uint8ClampedArray`, `Uint16Array`, `Uint32Array`,\n - `Map`, `Set`, `WeakMap`, `WeakSet`\n - `Object`\n- [Blazingly fast](https://gist.github.com/thejameskyle/2b04ffe4941aafa8f970de077843a8fd)\n - similar performance to `JSON.stringify` in v8\n - significantly faster than `util.format` in Node.js\n- Serialize application-specific data types with built-in or user-defined plugins\n\n## Installation\n\n```sh\n$ yarn add pretty-format\n```\n\n## Usage\n\n```js\nconst prettyFormat = require('pretty-format'); // CommonJS\n```\n\n```js\nimport prettyFormat from 'pretty-format'; // ES2015 modules\n```\n\n```js\nconst val = {object: {}};\nval.circularReference = val;\nval[Symbol('foo')] = 'foo';\nval.map = new Map([['prop', 'value']]);\nval.array = [-0, Infinity, NaN];\n\nconsole.log(prettyFormat(val));\n/*\nObject {\n \"array\": Array [\n -0,\n Infinity,\n NaN,\n ],\n \"circularReference\": [Circular],\n \"map\": Map {\n \"prop\" => \"value\",\n },\n \"object\": Object {},\n Symbol(foo): \"foo\",\n}\n*/\n```\n\n## Usage with options\n\n```js\nfunction onClick() {}\n\nconsole.log(prettyFormat(onClick));\n/*\n[Function onClick]\n*/\n\nconst options = {\n printFunctionName: false,\n};\nconsole.log(prettyFormat(onClick, options));\n/*\n[Function]\n*/\n```\n\n| key | type | default | description |\n| :------------------ | :-------- | :--------- | :------------------------------------------------------ |\n| `callToJSON` | `boolean` | `true` | call `toJSON` method (if it exists) on objects |\n| `escapeRegex` | `boolean` | `false` | escape special characters in regular expressions |\n| `escapeString` | `boolean` | `true` | escape special characters in strings |\n| `highlight` | `boolean` | `false` | highlight syntax with colors in terminal (some plugins) |\n| `indent` | `number` | `2` | spaces in each level of indentation |\n| `maxDepth` | `number` | `Infinity` | levels to print in arrays, objects, elements, and so on |\n| `min` | `boolean` | `false` | minimize added space: no indentation nor line breaks |\n| `plugins` | `array` | `[]` | plugins to serialize application-specific data types |\n| `printFunctionName` | `boolean` | `true` | include or omit the name of a function |\n| `theme` | `object` | | colors to highlight syntax in terminal |\n\nProperty values of `theme` are from [ansi-styles colors](https://github.com/chalk/ansi-styles#colors)\n\n```js\nconst DEFAULT_THEME = {\n comment: 'gray',\n content: 'reset',\n prop: 'yellow',\n tag: 'cyan',\n value: 'green',\n};\n```\n\n## Usage with plugins\n\nThe `pretty-format` package provides some built-in plugins, including:\n\n- `ReactElement` for elements from `react`\n- `ReactTestComponent` for test objects from `react-test-renderer`\n\n```js\n// CommonJS\nconst prettyFormat = require('pretty-format');\nconst ReactElement = prettyFormat.plugins.ReactElement;\nconst ReactTestComponent = prettyFormat.plugins.ReactTestComponent;\n\nconst React = require('react');\nconst renderer = require('react-test-renderer');\n```\n\n```js\n// ES2015 modules and destructuring assignment\nimport prettyFormat from 'pretty-format';\nconst {ReactElement, ReactTestComponent} = prettyFormat.plugins;\n\nimport React from 'react';\nimport renderer from 'react-test-renderer';\n```\n\n```js\nconst onClick = () => {};\nconst element = React.createElement('button', {onClick}, 'Hello World');\n\nconst formatted1 = prettyFormat(element, {\n plugins: [ReactElement],\n printFunctionName: false,\n});\nconst formatted2 = prettyFormat(renderer.create(element).toJSON(), {\n plugins: [ReactTestComponent],\n printFunctionName: false,\n});\n/*\n\n*/\n```\n\n## Usage in Jest\n\nFor snapshot tests, Jest uses `pretty-format` with options that include some of its built-in plugins. For this purpose, plugins are also known as **snapshot serializers**.\n\nTo serialize application-specific data types, you can add modules to `devDependencies` of a project, and then:\n\nIn an **individual** test file, you can add a module as follows. It precedes any modules from Jest configuration.\n\n```js\nimport serializer from 'my-serializer-module';\nexpect.addSnapshotSerializer(serializer);\n\n// tests which have `expect(value).toMatchSnapshot()` assertions\n```\n\nFor **all** test files, you can specify modules in Jest configuration. They precede built-in plugins for React, HTML, and Immutable.js data types. For example, in a `package.json` file:\n\n```json\n{\n \"jest\": {\n \"snapshotSerializers\": [\"my-serializer-module\"]\n }\n}\n```\n\n## Writing plugins\n\nA plugin is a JavaScript object.\n\nIf `options` has a `plugins` array: for the first plugin whose `test(val)` method returns a truthy value, then `prettyFormat(val, options)` returns the result from either:\n\n- `serialize(val, …)` method of the **improved** interface (available in **version 21** or later)\n- `print(val, …)` method of the **original** interface (if plugin does not have `serialize` method)\n\n### test\n\nWrite `test` so it can receive `val` argument of any type. To serialize **objects** which have certain properties, then a guarded expression like `val != null && …` or more concise `val && …` prevents the following errors:\n\n- `TypeError: Cannot read property 'whatever' of null`\n- `TypeError: Cannot read property 'whatever' of undefined`\n\nFor example, `test` method of built-in `ReactElement` plugin:\n\n```js\nconst elementSymbol = Symbol.for('react.element');\nconst test = val => val && val.$$typeof === elementSymbol;\n```\n\nPay attention to efficiency in `test` because `pretty-format` calls it often.\n\n### serialize\n\nThe **improved** interface is available in **version 21** or later.\n\nWrite `serialize` to return a string, given the arguments:\n\n- `val` which “passed the test”\n- unchanging `config` object: derived from `options`\n- current `indentation` string: concatenate to `indent` from `config`\n- current `depth` number: compare to `maxDepth` from `config`\n- current `refs` array: find circular references in objects\n- `printer` callback function: serialize children\n\n### config\n\n| key | type | description |\n| :------------------ | :-------- | :------------------------------------------------------ |\n| `callToJSON` | `boolean` | call `toJSON` method (if it exists) on objects |\n| `colors` | `Object` | escape codes for colors to highlight syntax |\n| `escapeRegex` | `boolean` | escape special characters in regular expressions |\n| `escapeString` | `boolean` | escape special characters in strings |\n| `indent` | `string` | spaces in each level of indentation |\n| `maxDepth` | `number` | levels to print in arrays, objects, elements, and so on |\n| `min` | `boolean` | minimize added space: no indentation nor line breaks |\n| `plugins` | `array` | plugins to serialize application-specific data types |\n| `printFunctionName` | `boolean` | include or omit the name of a function |\n| `spacingInner` | `strong` | spacing to separate items in a list |\n| `spacingOuter` | `strong` | spacing to enclose a list of items |\n\nEach property of `colors` in `config` corresponds to a property of `theme` in `options`:\n\n- the key is the same (for example, `tag`)\n- the value in `colors` is a object with `open` and `close` properties whose values are escape codes from [ansi-styles](https://github.com/chalk/ansi-styles) for the color value in `theme` (for example, `'cyan'`)\n\nSome properties in `config` are derived from `min` in `options`:\n\n- `spacingInner` and `spacingOuter` are **newline** if `min` is `false`\n- `spacingInner` is **space** and `spacingOuter` is **empty string** if `min` is `true`\n\n### Example of serialize and test\n\nThis plugin is a pattern you can apply to serialize composite data types. Of course, `pretty-format` does not need a plugin to serialize arrays :)\n\n```js\n// We reused more code when we factored out a function for child items\n// that is independent of depth, name, and enclosing punctuation (see below).\nconst SEPARATOR = ',';\nfunction serializeItems(items, config, indentation, depth, refs, printer) {\n if (items.length === 0) {\n return '';\n }\n const indentationItems = indentation + config.indent;\n return (\n config.spacingOuter +\n items\n .map(\n item =>\n indentationItems +\n printer(item, config, indentationItems, depth, refs), // callback\n )\n .join(SEPARATOR + config.spacingInner) +\n (config.min ? '' : SEPARATOR) + // following the last item\n config.spacingOuter +\n indentation\n );\n}\n\nconst plugin = {\n test(val) {\n return Array.isArray(val);\n },\n serialize(array, config, indentation, depth, refs, printer) {\n const name = array.constructor.name;\n return ++depth > config.maxDepth\n ? '[' + name + ']'\n : (config.min ? '' : name + ' ') +\n '[' +\n serializeItems(array, config, indentation, depth, refs, printer) +\n ']';\n },\n};\n```\n\n```js\nconst val = {\n filter: 'completed',\n items: [\n {\n text: 'Write test',\n completed: true,\n },\n {\n text: 'Write serialize',\n completed: true,\n },\n ],\n};\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n plugins: [plugin],\n }),\n);\n/*\nObject {\n \"filter\": \"completed\",\n \"items\": Array [\n Object {\n \"completed\": true,\n \"text\": \"Write test\",\n },\n Object {\n \"completed\": true,\n \"text\": \"Write serialize\",\n },\n ],\n}\n*/\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n indent: 4,\n plugins: [plugin],\n }),\n);\n/*\nObject {\n \"filter\": \"completed\",\n \"items\": Array [\n Object {\n \"completed\": true,\n \"text\": \"Write test\",\n },\n Object {\n \"completed\": true,\n \"text\": \"Write serialize\",\n },\n ],\n}\n*/\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n maxDepth: 1,\n plugins: [plugin],\n }),\n);\n/*\nObject {\n \"filter\": \"completed\",\n \"items\": [Array],\n}\n*/\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n min: true,\n plugins: [plugin],\n }),\n);\n/*\n{\"filter\": \"completed\", \"items\": [{\"completed\": true, \"text\": \"Write test\"}, {\"completed\": true, \"text\": \"Write serialize\"}]}\n*/\n```\n\n### print\n\nThe **original** interface is adequate for plugins:\n\n- that **do not** depend on options other than `highlight` or `min`\n- that **do not** depend on `depth` or `refs` in recursive traversal, and\n- if values either\n - do **not** require indentation, or\n - do **not** occur as children of JavaScript data structures (for example, array)\n\nWrite `print` to return a string, given the arguments:\n\n- `val` which “passed the test”\n- current `printer(valChild)` callback function: serialize children\n- current `indenter(lines)` callback function: indent lines at the next level\n- unchanging `config` object: derived from `options`\n- unchanging `colors` object: derived from `options`\n\nThe 3 properties of `config` are `min` in `options` and:\n\n- `spacing` and `edgeSpacing` are **newline** if `min` is `false`\n- `spacing` is **space** and `edgeSpacing` is **empty string** if `min` is `true`\n\nEach property of `colors` corresponds to a property of `theme` in `options`:\n\n- the key is the same (for example, `tag`)\n- the value in `colors` is a object with `open` and `close` properties whose values are escape codes from [ansi-styles](https://github.com/chalk/ansi-styles) for the color value in `theme` (for example, `'cyan'`)\n\n### Example of print and test\n\nThis plugin prints functions with the **number of named arguments** excluding rest argument.\n\n```js\nconst plugin = {\n print(val) {\n return `[Function ${val.name || 'anonymous'} ${val.length}]`;\n },\n test(val) {\n return typeof val === 'function';\n },\n};\n```\n\n```js\nconst val = {\n onClick(event) {},\n render() {},\n};\n\nprettyFormat(val, {\n plugins: [plugin],\n});\n/*\nObject {\n \"onClick\": [Function onClick 1],\n \"render\": [Function render 0],\n}\n*/\n\nprettyFormat(val);\n/*\nObject {\n \"onClick\": [Function onClick],\n \"render\": [Function render],\n}\n*/\n```\n\nThis plugin **ignores** the `printFunctionName` option. That limitation of the original `print` interface is a reason to use the improved `serialize` interface, described above.\n\n```js\nprettyFormat(val, {\n plugins: [pluginOld],\n printFunctionName: false,\n});\n/*\nObject {\n \"onClick\": [Function onClick 1],\n \"render\": [Function render 0],\n}\n*/\n\nprettyFormat(val, {\n printFunctionName: false,\n});\n/*\nObject {\n \"onClick\": [Function],\n \"render\": [Function],\n}\n*/\n```\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/facebook/jest/issues"},"homepage":"https://github.com/facebook/jest#readme","_id":"pretty-format@24.0.0-alpha.0","_npmVersion":"5.6.0","_nodeVersion":"8.10.0","_npmUser":{"name":"mjesun","email":"mjesun@hotmail.com"},"dist":{"integrity":"sha512-qOtQFQVF+JoMhrMgeZnyobN0USkdRMjZFvodS4DCg1ltnR7q4JDnT6rt0tbaaknlOrdAgRNN2iwdjRAUHykU8Q==","shasum":"b7dde608501b681b8eaccf56522f93b97abad6cd","tarball":"http://localhost:4545/npm/registry/pretty-format/pretty-format-24.0.0-alpha.0.tgz","fileCount":17,"unpackedSize":387127,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbyco+CRA9TVsSAnZWagAA6TIP/2/Z1WTNhrlggIhUXr+Y\nQwxxI6qU6UOgRrLyOveGbru2RevwvuPC3bs6NdqUb5VetzqVLQlWglNhjYLa\nGJ023wfg5XD20t+hYLUHC+0lqB9dv+3QZlhDl+bsCnkGYHdnoZOHHZ7AodA+\n+m2Vu5yKWFL7FEiuztWgkyWruNVGLEGD9vxe0B9mjwYP45UMmCvZJFPI3qau\nXFmtUEGW/oyjCNhgGm4LkNYVrrK2UQ3v5heHKGU3PU06mX8N5Kx/rpmiJy49\nYz6yENs4Jxn/v6vMOEZbM1GjHyivRWVKI+MjCJklUwkyLVzEp5ZVSOgm0ruv\nJ/obOa2LSlEp07x81cMf0Wwfb/W8FGeFB7CCz0S9kFOSfp/WjDwO382HLrqC\nmeIFKRA8PAYA90CcqF7uLG4eRD44WIBxYtYr1K8zPfiMrrhyT5UUgrEg4535\nB5uReVN+ZnCo24sLU1y/gcgXH3K8GsMpnx7lktOyxeKBIeUe7hF5hf71tocn\nqDFWbTTOxDw7VOW3BkLlHG+iH50ZLPb4kFoooZYj7kbUbwINZTwUQkVq+C2x\nYEc91x6smObf1ZHhcDuCYWY28xHE1df9t1tBhftjfNTyW0RgQy37F68n2o/y\ngcAIQfCdS3SWufPncpRBBM9pyV3QVh8QLLvp4ceAiLimEYhTmufQSNVdUlUO\nTwoH\r\n=4SxM\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCBbUU3f7EXrs+RF9RtyMIgFiOvyaq78pRHfN0V7hh6+gIhAPVK7c6mmdkM9NTZnmW5+8GD3wGSIeCn/azommay/VZH"}]},"maintainers":[{"email":"aaron@abramov.io","name":"aaronabramov"},{"email":"christoph.pojer@gmail.com","name":"cpojer"},{"email":"opensource+npm@fb.com","name":"fb"},{"email":"jean@lauliac.com","name":"jeanlauliac"},{"email":"mjesun@hotmail.com","name":"mjesun"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pretty-format_24.0.0-alpha.0_1539951166013_0.3702080103625105"},"_hasShrinkwrap":false},"24.0.0-alpha.1":{"name":"pretty-format","version":"24.0.0-alpha.1","repository":{"type":"git","url":"git+https://github.com/facebook/jest.git"},"license":"MIT","description":"Stringify any JavaScript value.","main":"build/index.js","browser":"build-es5/index.js","author":{"name":"James Kyle","email":"me@thejameskyle.com"},"dependencies":{"ansi-regex":"^4.0.0","ansi-styles":"^3.2.0"},"devDependencies":{"immutable":"^4.0.0-rc.9","react":"*","react-dom":"*","react-test-renderer":"*"},"gitHead":"4954f46708415174c48a58f296a605fbe1244a31","readme":"# pretty-format\n\n> Stringify any JavaScript value.\n\n- Supports all built-in JavaScript types\n - primitive types: `Boolean`, `null`, `Number`, `String`, `Symbol`, `undefined`\n - other non-collection types: `Date`, `Error`, `Function`, `RegExp`\n - collection types:\n - `arguments`, `Array`, `ArrayBuffer`, `DataView`, `Float32Array`, `Float64Array`, `Int8Array`, `Int16Array`, `Int32Array`, `Uint8Array`, `Uint8ClampedArray`, `Uint16Array`, `Uint32Array`,\n - `Map`, `Set`, `WeakMap`, `WeakSet`\n - `Object`\n- [Blazingly fast](https://gist.github.com/thejameskyle/2b04ffe4941aafa8f970de077843a8fd)\n - similar performance to `JSON.stringify` in v8\n - significantly faster than `util.format` in Node.js\n- Serialize application-specific data types with built-in or user-defined plugins\n\n## Installation\n\n```sh\n$ yarn add pretty-format\n```\n\n## Usage\n\n```js\nconst prettyFormat = require('pretty-format'); // CommonJS\n```\n\n```js\nimport prettyFormat from 'pretty-format'; // ES2015 modules\n```\n\n```js\nconst val = {object: {}};\nval.circularReference = val;\nval[Symbol('foo')] = 'foo';\nval.map = new Map([['prop', 'value']]);\nval.array = [-0, Infinity, NaN];\n\nconsole.log(prettyFormat(val));\n/*\nObject {\n \"array\": Array [\n -0,\n Infinity,\n NaN,\n ],\n \"circularReference\": [Circular],\n \"map\": Map {\n \"prop\" => \"value\",\n },\n \"object\": Object {},\n Symbol(foo): \"foo\",\n}\n*/\n```\n\n## Usage with options\n\n```js\nfunction onClick() {}\n\nconsole.log(prettyFormat(onClick));\n/*\n[Function onClick]\n*/\n\nconst options = {\n printFunctionName: false,\n};\nconsole.log(prettyFormat(onClick, options));\n/*\n[Function]\n*/\n```\n\n| key | type | default | description |\n| :------------------ | :-------- | :--------- | :------------------------------------------------------ |\n| `callToJSON` | `boolean` | `true` | call `toJSON` method (if it exists) on objects |\n| `escapeRegex` | `boolean` | `false` | escape special characters in regular expressions |\n| `escapeString` | `boolean` | `true` | escape special characters in strings |\n| `highlight` | `boolean` | `false` | highlight syntax with colors in terminal (some plugins) |\n| `indent` | `number` | `2` | spaces in each level of indentation |\n| `maxDepth` | `number` | `Infinity` | levels to print in arrays, objects, elements, and so on |\n| `min` | `boolean` | `false` | minimize added space: no indentation nor line breaks |\n| `plugins` | `array` | `[]` | plugins to serialize application-specific data types |\n| `printFunctionName` | `boolean` | `true` | include or omit the name of a function |\n| `theme` | `object` | | colors to highlight syntax in terminal |\n\nProperty values of `theme` are from [ansi-styles colors](https://github.com/chalk/ansi-styles#colors)\n\n```js\nconst DEFAULT_THEME = {\n comment: 'gray',\n content: 'reset',\n prop: 'yellow',\n tag: 'cyan',\n value: 'green',\n};\n```\n\n## Usage with plugins\n\nThe `pretty-format` package provides some built-in plugins, including:\n\n- `ReactElement` for elements from `react`\n- `ReactTestComponent` for test objects from `react-test-renderer`\n\n```js\n// CommonJS\nconst prettyFormat = require('pretty-format');\nconst ReactElement = prettyFormat.plugins.ReactElement;\nconst ReactTestComponent = prettyFormat.plugins.ReactTestComponent;\n\nconst React = require('react');\nconst renderer = require('react-test-renderer');\n```\n\n```js\n// ES2015 modules and destructuring assignment\nimport prettyFormat from 'pretty-format';\nconst {ReactElement, ReactTestComponent} = prettyFormat.plugins;\n\nimport React from 'react';\nimport renderer from 'react-test-renderer';\n```\n\n```js\nconst onClick = () => {};\nconst element = React.createElement('button', {onClick}, 'Hello World');\n\nconst formatted1 = prettyFormat(element, {\n plugins: [ReactElement],\n printFunctionName: false,\n});\nconst formatted2 = prettyFormat(renderer.create(element).toJSON(), {\n plugins: [ReactTestComponent],\n printFunctionName: false,\n});\n/*\n\n*/\n```\n\n## Usage in Jest\n\nFor snapshot tests, Jest uses `pretty-format` with options that include some of its built-in plugins. For this purpose, plugins are also known as **snapshot serializers**.\n\nTo serialize application-specific data types, you can add modules to `devDependencies` of a project, and then:\n\nIn an **individual** test file, you can add a module as follows. It precedes any modules from Jest configuration.\n\n```js\nimport serializer from 'my-serializer-module';\nexpect.addSnapshotSerializer(serializer);\n\n// tests which have `expect(value).toMatchSnapshot()` assertions\n```\n\nFor **all** test files, you can specify modules in Jest configuration. They precede built-in plugins for React, HTML, and Immutable.js data types. For example, in a `package.json` file:\n\n```json\n{\n \"jest\": {\n \"snapshotSerializers\": [\"my-serializer-module\"]\n }\n}\n```\n\n## Writing plugins\n\nA plugin is a JavaScript object.\n\nIf `options` has a `plugins` array: for the first plugin whose `test(val)` method returns a truthy value, then `prettyFormat(val, options)` returns the result from either:\n\n- `serialize(val, …)` method of the **improved** interface (available in **version 21** or later)\n- `print(val, …)` method of the **original** interface (if plugin does not have `serialize` method)\n\n### test\n\nWrite `test` so it can receive `val` argument of any type. To serialize **objects** which have certain properties, then a guarded expression like `val != null && …` or more concise `val && …` prevents the following errors:\n\n- `TypeError: Cannot read property 'whatever' of null`\n- `TypeError: Cannot read property 'whatever' of undefined`\n\nFor example, `test` method of built-in `ReactElement` plugin:\n\n```js\nconst elementSymbol = Symbol.for('react.element');\nconst test = val => val && val.$$typeof === elementSymbol;\n```\n\nPay attention to efficiency in `test` because `pretty-format` calls it often.\n\n### serialize\n\nThe **improved** interface is available in **version 21** or later.\n\nWrite `serialize` to return a string, given the arguments:\n\n- `val` which “passed the test”\n- unchanging `config` object: derived from `options`\n- current `indentation` string: concatenate to `indent` from `config`\n- current `depth` number: compare to `maxDepth` from `config`\n- current `refs` array: find circular references in objects\n- `printer` callback function: serialize children\n\n### config\n\n| key | type | description |\n| :------------------ | :-------- | :------------------------------------------------------ |\n| `callToJSON` | `boolean` | call `toJSON` method (if it exists) on objects |\n| `colors` | `Object` | escape codes for colors to highlight syntax |\n| `escapeRegex` | `boolean` | escape special characters in regular expressions |\n| `escapeString` | `boolean` | escape special characters in strings |\n| `indent` | `string` | spaces in each level of indentation |\n| `maxDepth` | `number` | levels to print in arrays, objects, elements, and so on |\n| `min` | `boolean` | minimize added space: no indentation nor line breaks |\n| `plugins` | `array` | plugins to serialize application-specific data types |\n| `printFunctionName` | `boolean` | include or omit the name of a function |\n| `spacingInner` | `strong` | spacing to separate items in a list |\n| `spacingOuter` | `strong` | spacing to enclose a list of items |\n\nEach property of `colors` in `config` corresponds to a property of `theme` in `options`:\n\n- the key is the same (for example, `tag`)\n- the value in `colors` is a object with `open` and `close` properties whose values are escape codes from [ansi-styles](https://github.com/chalk/ansi-styles) for the color value in `theme` (for example, `'cyan'`)\n\nSome properties in `config` are derived from `min` in `options`:\n\n- `spacingInner` and `spacingOuter` are **newline** if `min` is `false`\n- `spacingInner` is **space** and `spacingOuter` is **empty string** if `min` is `true`\n\n### Example of serialize and test\n\nThis plugin is a pattern you can apply to serialize composite data types. Of course, `pretty-format` does not need a plugin to serialize arrays :)\n\n```js\n// We reused more code when we factored out a function for child items\n// that is independent of depth, name, and enclosing punctuation (see below).\nconst SEPARATOR = ',';\nfunction serializeItems(items, config, indentation, depth, refs, printer) {\n if (items.length === 0) {\n return '';\n }\n const indentationItems = indentation + config.indent;\n return (\n config.spacingOuter +\n items\n .map(\n item =>\n indentationItems +\n printer(item, config, indentationItems, depth, refs), // callback\n )\n .join(SEPARATOR + config.spacingInner) +\n (config.min ? '' : SEPARATOR) + // following the last item\n config.spacingOuter +\n indentation\n );\n}\n\nconst plugin = {\n test(val) {\n return Array.isArray(val);\n },\n serialize(array, config, indentation, depth, refs, printer) {\n const name = array.constructor.name;\n return ++depth > config.maxDepth\n ? '[' + name + ']'\n : (config.min ? '' : name + ' ') +\n '[' +\n serializeItems(array, config, indentation, depth, refs, printer) +\n ']';\n },\n};\n```\n\n```js\nconst val = {\n filter: 'completed',\n items: [\n {\n text: 'Write test',\n completed: true,\n },\n {\n text: 'Write serialize',\n completed: true,\n },\n ],\n};\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n plugins: [plugin],\n }),\n);\n/*\nObject {\n \"filter\": \"completed\",\n \"items\": Array [\n Object {\n \"completed\": true,\n \"text\": \"Write test\",\n },\n Object {\n \"completed\": true,\n \"text\": \"Write serialize\",\n },\n ],\n}\n*/\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n indent: 4,\n plugins: [plugin],\n }),\n);\n/*\nObject {\n \"filter\": \"completed\",\n \"items\": Array [\n Object {\n \"completed\": true,\n \"text\": \"Write test\",\n },\n Object {\n \"completed\": true,\n \"text\": \"Write serialize\",\n },\n ],\n}\n*/\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n maxDepth: 1,\n plugins: [plugin],\n }),\n);\n/*\nObject {\n \"filter\": \"completed\",\n \"items\": [Array],\n}\n*/\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n min: true,\n plugins: [plugin],\n }),\n);\n/*\n{\"filter\": \"completed\", \"items\": [{\"completed\": true, \"text\": \"Write test\"}, {\"completed\": true, \"text\": \"Write serialize\"}]}\n*/\n```\n\n### print\n\nThe **original** interface is adequate for plugins:\n\n- that **do not** depend on options other than `highlight` or `min`\n- that **do not** depend on `depth` or `refs` in recursive traversal, and\n- if values either\n - do **not** require indentation, or\n - do **not** occur as children of JavaScript data structures (for example, array)\n\nWrite `print` to return a string, given the arguments:\n\n- `val` which “passed the test”\n- current `printer(valChild)` callback function: serialize children\n- current `indenter(lines)` callback function: indent lines at the next level\n- unchanging `config` object: derived from `options`\n- unchanging `colors` object: derived from `options`\n\nThe 3 properties of `config` are `min` in `options` and:\n\n- `spacing` and `edgeSpacing` are **newline** if `min` is `false`\n- `spacing` is **space** and `edgeSpacing` is **empty string** if `min` is `true`\n\nEach property of `colors` corresponds to a property of `theme` in `options`:\n\n- the key is the same (for example, `tag`)\n- the value in `colors` is a object with `open` and `close` properties whose values are escape codes from [ansi-styles](https://github.com/chalk/ansi-styles) for the color value in `theme` (for example, `'cyan'`)\n\n### Example of print and test\n\nThis plugin prints functions with the **number of named arguments** excluding rest argument.\n\n```js\nconst plugin = {\n print(val) {\n return `[Function ${val.name || 'anonymous'} ${val.length}]`;\n },\n test(val) {\n return typeof val === 'function';\n },\n};\n```\n\n```js\nconst val = {\n onClick(event) {},\n render() {},\n};\n\nprettyFormat(val, {\n plugins: [plugin],\n});\n/*\nObject {\n \"onClick\": [Function onClick 1],\n \"render\": [Function render 0],\n}\n*/\n\nprettyFormat(val);\n/*\nObject {\n \"onClick\": [Function onClick],\n \"render\": [Function render],\n}\n*/\n```\n\nThis plugin **ignores** the `printFunctionName` option. That limitation of the original `print` interface is a reason to use the improved `serialize` interface, described above.\n\n```js\nprettyFormat(val, {\n plugins: [pluginOld],\n printFunctionName: false,\n});\n/*\nObject {\n \"onClick\": [Function onClick 1],\n \"render\": [Function render 0],\n}\n*/\n\nprettyFormat(val, {\n printFunctionName: false,\n});\n/*\nObject {\n \"onClick\": [Function],\n \"render\": [Function],\n}\n*/\n```\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/facebook/jest/issues"},"homepage":"https://github.com/facebook/jest#readme","_id":"pretty-format@24.0.0-alpha.1","_npmVersion":"5.6.0","_nodeVersion":"8.10.0","_npmUser":{"name":"mjesun","email":"mjesun@hotmail.com"},"dist":{"integrity":"sha512-fpbQUw/B3MQASmXyh+hchSq7GKg8EgRoC3IE8imHxVassZ6BTDlvflNgLAeexEez4Jm1df+pEfOZeINNH/Z89g==","shasum":"38dc7af33801d644755235be1940fc1b1799e112","tarball":"http://localhost:4545/npm/registry/pretty-format/pretty-format-24.0.0-alpha.1.tgz","fileCount":17,"unpackedSize":387127,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbze5VCRA9TVsSAnZWagAA4VUP/2ppcNjSBoaTwt5cFF9C\nXRVVYY550faSaN2utyGCJ5RvHYG4CwvBEk1CRZa4KjRoDnk3H2nbTRK/J9Y+\nCjZCkc5XE8MDmDAd09cWFU6gh3e4J/hiTQkS4AGrXiQywGpN4VGoqburnAov\n2rVsGfuYi8Z16ylO+roJzoSG900v52ATsBXurbZHGuPC+/tsHWAswR47wO6q\nI+8LspHN61KvxR/mwZOf/QGZZzXSG1Ah4xmj9X0Qfz83vXfJFNWFYEboCsaI\nqMYSgbcWLumHWQ47Yk6Tb4QriNR1+eN0LMi7AH+8vN24M01TxGJoTsym93Kw\nEWFxilgQxNy2ZXJ12zdQ7qjhgR1JOrAKFKVUpNZEy9stOyS+lElx/qjy/sNw\nxYKIbXM0HqzRvOLkkF2p+/BL9lmZp07w8jo+T+8iKjASkZy7IttgKuvsdEQQ\n8oFt5BN7D7FX8ZioGoVVfJUvmCdv4i6KfcgeblYHKl25NJCBDPTFFdsF32bJ\nGPzKxsZ9mjcrO+6oKIzRDIbVvkgIFs9xf1iXjOi31g6L5S5MWo13nEOUA2kh\n3besrh++glkTEfjx0cLbVg1ZDkxLYLMpZEUebrcc8G/J0mZMpx6FNU7Deggp\nnq/3fmYuc6D3DbApjaY372L2oEMxry9Sj+Zr1qAdAnP0uTudvh+SE1jYxmP4\nHjFe\r\n=+qDc\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIElpQ1ueqyvVC5BrI17YLBAqELFqBDXHTjqDWuz4zXygAiAzQOVtDIxtfxULqt8P7f9yqOtt8+grFjXXND7vDzLi8Q=="}]},"maintainers":[{"email":"aaron@abramov.io","name":"aaronabramov"},{"email":"christoph.pojer@gmail.com","name":"cpojer"},{"email":"opensource+npm@fb.com","name":"fb"},{"email":"jean@lauliac.com","name":"jeanlauliac"},{"email":"mjesun@hotmail.com","name":"mjesun"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pretty-format_24.0.0-alpha.1_1540222549216_0.9692385031286568"},"_hasShrinkwrap":false},"24.0.0-alpha.2":{"name":"pretty-format","version":"24.0.0-alpha.2","repository":{"type":"git","url":"git+https://github.com/facebook/jest.git"},"license":"MIT","description":"Stringify any JavaScript value.","main":"build/index.js","browser":"build-es5/index.js","author":{"name":"James Kyle","email":"me@thejameskyle.com"},"dependencies":{"ansi-regex":"^4.0.0","ansi-styles":"^3.2.0"},"devDependencies":{"immutable":"^4.0.0-rc.9","react":"*","react-dom":"*","react-test-renderer":"*"},"engines":{"node":">= 6"},"gitHead":"c5e36835cff4b241327db9cf58c8f6f7227ed1f7","bugs":{"url":"https://github.com/facebook/jest/issues"},"homepage":"https://github.com/facebook/jest#readme","_id":"pretty-format@24.0.0-alpha.2","_npmVersion":"5.6.0","_nodeVersion":"8.11.3","_npmUser":{"name":"rubennorte","email":"rubennorte@gmail.com"},"dist":{"integrity":"sha512-mqFCjVVaBk00XB6V3BPrH7WAwOimfLMDjj1YDpSmV8BlDkEcTtQU/Qu6KDTsSi7lYjzHzZp8+NsmeMXw/6Cl4A==","shasum":"cbcd7609a4e594c478f46aa1b6d652d285342671","tarball":"http://localhost:4545/npm/registry/pretty-format/pretty-format-24.0.0-alpha.2.tgz","fileCount":18,"unpackedSize":929427,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJb0aAoCRA9TVsSAnZWagAAzOkP/2qL3XnyKKPBDWSjWf5p\n9q6EyBqW7Wbe8/8ivTkEwHvh+gLTsg9R98pLnG08PcbYKfo7nlOkx8PfOSI4\nuM85KvmAzviNzFwiGrSmm/WeZA9qxiYH0xtl0eF/brXW/KITSKAhaxBWjy93\n7ZSa3Oof0wrjVl0dRKBE8Y0AFxjoefvN8w5SlYkl019Wskd76pZXmsGrEzcW\njzHFj459g1wIINA7FN5NUtALVknnNldX7mYjUdsCNn8Lr0hUK9zWoDT8+nKz\nXFsRpQ6p8G0C3X7MPAiFsZzkTMBMf8tonfDCv5lgT2MqnEm3piH53tjatpv1\nJ1YMNdpCbxoEXBwuJCW3+MZhLX6GGDrSNYPYDpAdWUA0NJgMIIsohNiq9hhe\nGy648coxYfKsSl5OHBNz8tdA3oGVxJ5G1PkcFFLZ0LMP9SOlNo4+HaiQOZpP\n8Ec/718KVpgw2HAx5UsqPN54kWVx61DbsIDwj/mCxmQccuZdzr8lcPSJNJXB\n/dbKwZHXWQUTR2swHStsNI4W+ZokZLwyw9YiAUo+nUlPKOTsjs2uAptteJl4\np6Lbamzc56uyheQGoaqzCrcfqPidF0jdTaropu6M+KKOZV1fFV1RxfrtG95A\nMG3z+HOOxyfq+oP0cI3wPR1R0z2Ei6KRA0pm2RSoI2p/n9KaUm3RA66ePqMX\nljUp\r\n=5D2s\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD60egOQMd6BABthiPAC4x0LPc0RwjQ/UlYB4Q6C6dTHgIgXogqqcDTd8n+BfoWNteLh3BPRPEyJ4QFfdQVrkf6fso="}]},"maintainers":[{"email":"aaron@abramov.io","name":"aaronabramov"},{"email":"christoph.pojer@gmail.com","name":"cpojer"},{"email":"opensource+npm@fb.com","name":"fb"},{"email":"jean@lauliac.com","name":"jeanlauliac"},{"email":"mjesun@hotmail.com","name":"mjesun"},{"email":"rubennorte@gmail.com","name":"rubennorte"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pretty-format_24.0.0-alpha.2_1540464679697_0.9806271720599484"},"_hasShrinkwrap":false},"24.0.0-alpha.4":{"name":"pretty-format","version":"24.0.0-alpha.4","repository":{"type":"git","url":"git+https://github.com/facebook/jest.git"},"license":"MIT","description":"Stringify any JavaScript value.","main":"build/index.js","browser":"build-es5/index.js","author":{"name":"James Kyle","email":"me@thejameskyle.com"},"dependencies":{"ansi-regex":"^4.0.0","ansi-styles":"^3.2.0"},"devDependencies":{"immutable":"^4.0.0-rc.9","react":"*","react-dom":"*","react-test-renderer":"*"},"engines":{"node":">= 6"},"gitHead":"e41f0bb257c6652c3100b97a1087f9f812fbea0d","readme":"# pretty-format\n\n> Stringify any JavaScript value.\n\n- Supports all built-in JavaScript types\n - primitive types: `Boolean`, `null`, `Number`, `String`, `Symbol`, `undefined`\n - other non-collection types: `Date`, `Error`, `Function`, `RegExp`\n - collection types:\n - `arguments`, `Array`, `ArrayBuffer`, `DataView`, `Float32Array`, `Float64Array`, `Int8Array`, `Int16Array`, `Int32Array`, `Uint8Array`, `Uint8ClampedArray`, `Uint16Array`, `Uint32Array`,\n - `Map`, `Set`, `WeakMap`, `WeakSet`\n - `Object`\n- [Blazingly fast](https://gist.github.com/thejameskyle/2b04ffe4941aafa8f970de077843a8fd)\n - similar performance to `JSON.stringify` in v8\n - significantly faster than `util.format` in Node.js\n- Serialize application-specific data types with built-in or user-defined plugins\n\n## Installation\n\n```sh\n$ yarn add pretty-format\n```\n\n## Usage\n\n```js\nconst prettyFormat = require('pretty-format'); // CommonJS\n```\n\n```js\nimport prettyFormat from 'pretty-format'; // ES2015 modules\n```\n\n```js\nconst val = {object: {}};\nval.circularReference = val;\nval[Symbol('foo')] = 'foo';\nval.map = new Map([['prop', 'value']]);\nval.array = [-0, Infinity, NaN];\n\nconsole.log(prettyFormat(val));\n/*\nObject {\n \"array\": Array [\n -0,\n Infinity,\n NaN,\n ],\n \"circularReference\": [Circular],\n \"map\": Map {\n \"prop\" => \"value\",\n },\n \"object\": Object {},\n Symbol(foo): \"foo\",\n}\n*/\n```\n\n## Usage with options\n\n```js\nfunction onClick() {}\n\nconsole.log(prettyFormat(onClick));\n/*\n[Function onClick]\n*/\n\nconst options = {\n printFunctionName: false,\n};\nconsole.log(prettyFormat(onClick, options));\n/*\n[Function]\n*/\n```\n\n| key | type | default | description |\n| :------------------ | :-------- | :--------- | :------------------------------------------------------ |\n| `callToJSON` | `boolean` | `true` | call `toJSON` method (if it exists) on objects |\n| `escapeRegex` | `boolean` | `false` | escape special characters in regular expressions |\n| `escapeString` | `boolean` | `true` | escape special characters in strings |\n| `highlight` | `boolean` | `false` | highlight syntax with colors in terminal (some plugins) |\n| `indent` | `number` | `2` | spaces in each level of indentation |\n| `maxDepth` | `number` | `Infinity` | levels to print in arrays, objects, elements, and so on |\n| `min` | `boolean` | `false` | minimize added space: no indentation nor line breaks |\n| `plugins` | `array` | `[]` | plugins to serialize application-specific data types |\n| `printFunctionName` | `boolean` | `true` | include or omit the name of a function |\n| `theme` | `object` | | colors to highlight syntax in terminal |\n\nProperty values of `theme` are from [ansi-styles colors](https://github.com/chalk/ansi-styles#colors)\n\n```js\nconst DEFAULT_THEME = {\n comment: 'gray',\n content: 'reset',\n prop: 'yellow',\n tag: 'cyan',\n value: 'green',\n};\n```\n\n## Usage with plugins\n\nThe `pretty-format` package provides some built-in plugins, including:\n\n- `ReactElement` for elements from `react`\n- `ReactTestComponent` for test objects from `react-test-renderer`\n\n```js\n// CommonJS\nconst prettyFormat = require('pretty-format');\nconst ReactElement = prettyFormat.plugins.ReactElement;\nconst ReactTestComponent = prettyFormat.plugins.ReactTestComponent;\n\nconst React = require('react');\nconst renderer = require('react-test-renderer');\n```\n\n```js\n// ES2015 modules and destructuring assignment\nimport prettyFormat from 'pretty-format';\nconst {ReactElement, ReactTestComponent} = prettyFormat.plugins;\n\nimport React from 'react';\nimport renderer from 'react-test-renderer';\n```\n\n```js\nconst onClick = () => {};\nconst element = React.createElement('button', {onClick}, 'Hello World');\n\nconst formatted1 = prettyFormat(element, {\n plugins: [ReactElement],\n printFunctionName: false,\n});\nconst formatted2 = prettyFormat(renderer.create(element).toJSON(), {\n plugins: [ReactTestComponent],\n printFunctionName: false,\n});\n/*\n\n*/\n```\n\n## Usage in Jest\n\nFor snapshot tests, Jest uses `pretty-format` with options that include some of its built-in plugins. For this purpose, plugins are also known as **snapshot serializers**.\n\nTo serialize application-specific data types, you can add modules to `devDependencies` of a project, and then:\n\nIn an **individual** test file, you can add a module as follows. It precedes any modules from Jest configuration.\n\n```js\nimport serializer from 'my-serializer-module';\nexpect.addSnapshotSerializer(serializer);\n\n// tests which have `expect(value).toMatchSnapshot()` assertions\n```\n\nFor **all** test files, you can specify modules in Jest configuration. They precede built-in plugins for React, HTML, and Immutable.js data types. For example, in a `package.json` file:\n\n```json\n{\n \"jest\": {\n \"snapshotSerializers\": [\"my-serializer-module\"]\n }\n}\n```\n\n## Writing plugins\n\nA plugin is a JavaScript object.\n\nIf `options` has a `plugins` array: for the first plugin whose `test(val)` method returns a truthy value, then `prettyFormat(val, options)` returns the result from either:\n\n- `serialize(val, …)` method of the **improved** interface (available in **version 21** or later)\n- `print(val, …)` method of the **original** interface (if plugin does not have `serialize` method)\n\n### test\n\nWrite `test` so it can receive `val` argument of any type. To serialize **objects** which have certain properties, then a guarded expression like `val != null && …` or more concise `val && …` prevents the following errors:\n\n- `TypeError: Cannot read property 'whatever' of null`\n- `TypeError: Cannot read property 'whatever' of undefined`\n\nFor example, `test` method of built-in `ReactElement` plugin:\n\n```js\nconst elementSymbol = Symbol.for('react.element');\nconst test = val => val && val.$$typeof === elementSymbol;\n```\n\nPay attention to efficiency in `test` because `pretty-format` calls it often.\n\n### serialize\n\nThe **improved** interface is available in **version 21** or later.\n\nWrite `serialize` to return a string, given the arguments:\n\n- `val` which “passed the test”\n- unchanging `config` object: derived from `options`\n- current `indentation` string: concatenate to `indent` from `config`\n- current `depth` number: compare to `maxDepth` from `config`\n- current `refs` array: find circular references in objects\n- `printer` callback function: serialize children\n\n### config\n\n| key | type | description |\n| :------------------ | :-------- | :------------------------------------------------------ |\n| `callToJSON` | `boolean` | call `toJSON` method (if it exists) on objects |\n| `colors` | `Object` | escape codes for colors to highlight syntax |\n| `escapeRegex` | `boolean` | escape special characters in regular expressions |\n| `escapeString` | `boolean` | escape special characters in strings |\n| `indent` | `string` | spaces in each level of indentation |\n| `maxDepth` | `number` | levels to print in arrays, objects, elements, and so on |\n| `min` | `boolean` | minimize added space: no indentation nor line breaks |\n| `plugins` | `array` | plugins to serialize application-specific data types |\n| `printFunctionName` | `boolean` | include or omit the name of a function |\n| `spacingInner` | `strong` | spacing to separate items in a list |\n| `spacingOuter` | `strong` | spacing to enclose a list of items |\n\nEach property of `colors` in `config` corresponds to a property of `theme` in `options`:\n\n- the key is the same (for example, `tag`)\n- the value in `colors` is a object with `open` and `close` properties whose values are escape codes from [ansi-styles](https://github.com/chalk/ansi-styles) for the color value in `theme` (for example, `'cyan'`)\n\nSome properties in `config` are derived from `min` in `options`:\n\n- `spacingInner` and `spacingOuter` are **newline** if `min` is `false`\n- `spacingInner` is **space** and `spacingOuter` is **empty string** if `min` is `true`\n\n### Example of serialize and test\n\nThis plugin is a pattern you can apply to serialize composite data types. Of course, `pretty-format` does not need a plugin to serialize arrays :)\n\n```js\n// We reused more code when we factored out a function for child items\n// that is independent of depth, name, and enclosing punctuation (see below).\nconst SEPARATOR = ',';\nfunction serializeItems(items, config, indentation, depth, refs, printer) {\n if (items.length === 0) {\n return '';\n }\n const indentationItems = indentation + config.indent;\n return (\n config.spacingOuter +\n items\n .map(\n item =>\n indentationItems +\n printer(item, config, indentationItems, depth, refs), // callback\n )\n .join(SEPARATOR + config.spacingInner) +\n (config.min ? '' : SEPARATOR) + // following the last item\n config.spacingOuter +\n indentation\n );\n}\n\nconst plugin = {\n test(val) {\n return Array.isArray(val);\n },\n serialize(array, config, indentation, depth, refs, printer) {\n const name = array.constructor.name;\n return ++depth > config.maxDepth\n ? '[' + name + ']'\n : (config.min ? '' : name + ' ') +\n '[' +\n serializeItems(array, config, indentation, depth, refs, printer) +\n ']';\n },\n};\n```\n\n```js\nconst val = {\n filter: 'completed',\n items: [\n {\n text: 'Write test',\n completed: true,\n },\n {\n text: 'Write serialize',\n completed: true,\n },\n ],\n};\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n plugins: [plugin],\n }),\n);\n/*\nObject {\n \"filter\": \"completed\",\n \"items\": Array [\n Object {\n \"completed\": true,\n \"text\": \"Write test\",\n },\n Object {\n \"completed\": true,\n \"text\": \"Write serialize\",\n },\n ],\n}\n*/\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n indent: 4,\n plugins: [plugin],\n }),\n);\n/*\nObject {\n \"filter\": \"completed\",\n \"items\": Array [\n Object {\n \"completed\": true,\n \"text\": \"Write test\",\n },\n Object {\n \"completed\": true,\n \"text\": \"Write serialize\",\n },\n ],\n}\n*/\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n maxDepth: 1,\n plugins: [plugin],\n }),\n);\n/*\nObject {\n \"filter\": \"completed\",\n \"items\": [Array],\n}\n*/\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n min: true,\n plugins: [plugin],\n }),\n);\n/*\n{\"filter\": \"completed\", \"items\": [{\"completed\": true, \"text\": \"Write test\"}, {\"completed\": true, \"text\": \"Write serialize\"}]}\n*/\n```\n\n### print\n\nThe **original** interface is adequate for plugins:\n\n- that **do not** depend on options other than `highlight` or `min`\n- that **do not** depend on `depth` or `refs` in recursive traversal, and\n- if values either\n - do **not** require indentation, or\n - do **not** occur as children of JavaScript data structures (for example, array)\n\nWrite `print` to return a string, given the arguments:\n\n- `val` which “passed the test”\n- current `printer(valChild)` callback function: serialize children\n- current `indenter(lines)` callback function: indent lines at the next level\n- unchanging `config` object: derived from `options`\n- unchanging `colors` object: derived from `options`\n\nThe 3 properties of `config` are `min` in `options` and:\n\n- `spacing` and `edgeSpacing` are **newline** if `min` is `false`\n- `spacing` is **space** and `edgeSpacing` is **empty string** if `min` is `true`\n\nEach property of `colors` corresponds to a property of `theme` in `options`:\n\n- the key is the same (for example, `tag`)\n- the value in `colors` is a object with `open` and `close` properties whose values are escape codes from [ansi-styles](https://github.com/chalk/ansi-styles) for the color value in `theme` (for example, `'cyan'`)\n\n### Example of print and test\n\nThis plugin prints functions with the **number of named arguments** excluding rest argument.\n\n```js\nconst plugin = {\n print(val) {\n return `[Function ${val.name || 'anonymous'} ${val.length}]`;\n },\n test(val) {\n return typeof val === 'function';\n },\n};\n```\n\n```js\nconst val = {\n onClick(event) {},\n render() {},\n};\n\nprettyFormat(val, {\n plugins: [plugin],\n});\n/*\nObject {\n \"onClick\": [Function onClick 1],\n \"render\": [Function render 0],\n}\n*/\n\nprettyFormat(val);\n/*\nObject {\n \"onClick\": [Function onClick],\n \"render\": [Function render],\n}\n*/\n```\n\nThis plugin **ignores** the `printFunctionName` option. That limitation of the original `print` interface is a reason to use the improved `serialize` interface, described above.\n\n```js\nprettyFormat(val, {\n plugins: [pluginOld],\n printFunctionName: false,\n});\n/*\nObject {\n \"onClick\": [Function onClick 1],\n \"render\": [Function render 0],\n}\n*/\n\nprettyFormat(val, {\n printFunctionName: false,\n});\n/*\nObject {\n \"onClick\": [Function],\n \"render\": [Function],\n}\n*/\n```\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/facebook/jest/issues"},"homepage":"https://github.com/facebook/jest#readme","_id":"pretty-format@24.0.0-alpha.4","_npmVersion":"5.6.0","_nodeVersion":"8.11.3","_npmUser":{"name":"rubennorte","email":"rubennorte@gmail.com"},"dist":{"integrity":"sha512-icvbBt3XlLEVqPHdHwR2Ou9+hezS9Eccd+mA+fXfOU7T9t7ClOpq2HgCwlyw+3WogccCubKWnmzyrA/3ZZ/aOA==","shasum":"cc1f7497e2496b71f8ad99f1526096e515fada03","tarball":"http://localhost:4545/npm/registry/pretty-format/pretty-format-24.0.0-alpha.4.tgz","fileCount":17,"unpackedSize":387166,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJb00HMCRA9TVsSAnZWagAAXaYQAIKx5Qn8MNNquXc6Py0b\nhchVgg3o9VR8AtKjggu26gioTpZCtqjENWdRK3/C9WGpdBQwvkV997yQaIKn\nTAKKOdHTFvJK63F5M0RbSAvoxAmma5cwHUU1Qh6qDMr+JJh/1Uk99f7rr8Uu\n/nbavzfPOpJzgnQytWsa+4oSzXwoyZrH4HFZB/Z1fRCk2oDOj9dr9AjLBozG\nMmkfpeioK4MuPjmWOud0HUXb8Vx6aiH3Ug/R5AOJQiJFVGhm1y8xQxDD3xsS\nWMAQtWFyUL7B3Tiodt6WrGi5F9ce5Kll6Yxti5O4wS9TUjuKeZmYGQYIjGQo\nvxrHOqWMHTfhiKz+OIROJJQGsLoj2aPgjrpprU0gQw/s1EKfipIG/227cD0M\nH6gMQIqF+I7oyqbEysW0cUK0cHVTlKY28RWVDB3LpHWs/2ssjn4kjmpUViMO\n2AKpR9d2C78RkYEkNdMROAokyrnSmgdj8LJ8+y3CV1lSzRheBs4OyBYgX4NO\neQkR+v5tBfxZEBSg/jdijL5kFHozM4Sw2hBFldLyQfzAZX7QPy89Kn8F5RqH\nnlBYvO+ftjTcycDGZkPmaUiLchQUAKbNQiozmU8VllamhJcwBrbRuWXedVyq\nrn5haMuQrqOWCwoCTI+4Ude3LwOy8pTSz5Aa91oG8DZ/mLiEbCH33Kt/ziwB\nF7Rx\r\n=NkyY\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAvSFt80bV+IzHvMSXweyARFBQwmr3K04qwjZPUUKuQ0AiEAl2JCFPIRBjlD9Eh1QnVQ3JDJ+YHccBHCKA4ukdqCgRE="}]},"maintainers":[{"email":"aaron@abramov.io","name":"aaronabramov"},{"email":"christoph.pojer@gmail.com","name":"cpojer"},{"email":"opensource+npm@fb.com","name":"fb"},{"email":"jean@lauliac.com","name":"jeanlauliac"},{"email":"mjesun@hotmail.com","name":"mjesun"},{"email":"rubennorte@gmail.com","name":"rubennorte"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pretty-format_24.0.0-alpha.4_1540571595114_0.5456319880913951"},"_hasShrinkwrap":false},"24.0.0-alpha.5":{"name":"pretty-format","version":"24.0.0-alpha.5","repository":{"type":"git","url":"git+https://github.com/facebook/jest.git"},"license":"MIT","description":"Stringify any JavaScript value.","main":"build/index.js","browser":"build-es5/index.js","author":{"name":"James Kyle","email":"me@thejameskyle.com"},"dependencies":{"ansi-regex":"^4.0.0","ansi-styles":"^3.2.0"},"devDependencies":{"immutable":"^4.0.0-rc.9","react":"*","react-dom":"*","react-test-renderer":"*"},"engines":{"node":">= 6"},"gitHead":"2c18a53e8ff2437bba5fcb8076b754ac5f79f9f8","readme":"# pretty-format\n\n> Stringify any JavaScript value.\n\n- Supports all built-in JavaScript types\n - primitive types: `Boolean`, `null`, `Number`, `String`, `Symbol`, `undefined`\n - other non-collection types: `Date`, `Error`, `Function`, `RegExp`\n - collection types:\n - `arguments`, `Array`, `ArrayBuffer`, `DataView`, `Float32Array`, `Float64Array`, `Int8Array`, `Int16Array`, `Int32Array`, `Uint8Array`, `Uint8ClampedArray`, `Uint16Array`, `Uint32Array`,\n - `Map`, `Set`, `WeakMap`, `WeakSet`\n - `Object`\n- [Blazingly fast](https://gist.github.com/thejameskyle/2b04ffe4941aafa8f970de077843a8fd)\n - similar performance to `JSON.stringify` in v8\n - significantly faster than `util.format` in Node.js\n- Serialize application-specific data types with built-in or user-defined plugins\n\n## Installation\n\n```sh\n$ yarn add pretty-format\n```\n\n## Usage\n\n```js\nconst prettyFormat = require('pretty-format'); // CommonJS\n```\n\n```js\nimport prettyFormat from 'pretty-format'; // ES2015 modules\n```\n\n```js\nconst val = {object: {}};\nval.circularReference = val;\nval[Symbol('foo')] = 'foo';\nval.map = new Map([['prop', 'value']]);\nval.array = [-0, Infinity, NaN];\n\nconsole.log(prettyFormat(val));\n/*\nObject {\n \"array\": Array [\n -0,\n Infinity,\n NaN,\n ],\n \"circularReference\": [Circular],\n \"map\": Map {\n \"prop\" => \"value\",\n },\n \"object\": Object {},\n Symbol(foo): \"foo\",\n}\n*/\n```\n\n## Usage with options\n\n```js\nfunction onClick() {}\n\nconsole.log(prettyFormat(onClick));\n/*\n[Function onClick]\n*/\n\nconst options = {\n printFunctionName: false,\n};\nconsole.log(prettyFormat(onClick, options));\n/*\n[Function]\n*/\n```\n\n| key | type | default | description |\n| :------------------ | :-------- | :--------- | :------------------------------------------------------ |\n| `callToJSON` | `boolean` | `true` | call `toJSON` method (if it exists) on objects |\n| `escapeRegex` | `boolean` | `false` | escape special characters in regular expressions |\n| `escapeString` | `boolean` | `true` | escape special characters in strings |\n| `highlight` | `boolean` | `false` | highlight syntax with colors in terminal (some plugins) |\n| `indent` | `number` | `2` | spaces in each level of indentation |\n| `maxDepth` | `number` | `Infinity` | levels to print in arrays, objects, elements, and so on |\n| `min` | `boolean` | `false` | minimize added space: no indentation nor line breaks |\n| `plugins` | `array` | `[]` | plugins to serialize application-specific data types |\n| `printFunctionName` | `boolean` | `true` | include or omit the name of a function |\n| `theme` | `object` | | colors to highlight syntax in terminal |\n\nProperty values of `theme` are from [ansi-styles colors](https://github.com/chalk/ansi-styles#colors)\n\n```js\nconst DEFAULT_THEME = {\n comment: 'gray',\n content: 'reset',\n prop: 'yellow',\n tag: 'cyan',\n value: 'green',\n};\n```\n\n## Usage with plugins\n\nThe `pretty-format` package provides some built-in plugins, including:\n\n- `ReactElement` for elements from `react`\n- `ReactTestComponent` for test objects from `react-test-renderer`\n\n```js\n// CommonJS\nconst prettyFormat = require('pretty-format');\nconst ReactElement = prettyFormat.plugins.ReactElement;\nconst ReactTestComponent = prettyFormat.plugins.ReactTestComponent;\n\nconst React = require('react');\nconst renderer = require('react-test-renderer');\n```\n\n```js\n// ES2015 modules and destructuring assignment\nimport prettyFormat from 'pretty-format';\nconst {ReactElement, ReactTestComponent} = prettyFormat.plugins;\n\nimport React from 'react';\nimport renderer from 'react-test-renderer';\n```\n\n```js\nconst onClick = () => {};\nconst element = React.createElement('button', {onClick}, 'Hello World');\n\nconst formatted1 = prettyFormat(element, {\n plugins: [ReactElement],\n printFunctionName: false,\n});\nconst formatted2 = prettyFormat(renderer.create(element).toJSON(), {\n plugins: [ReactTestComponent],\n printFunctionName: false,\n});\n/*\n\n*/\n```\n\n## Usage in Jest\n\nFor snapshot tests, Jest uses `pretty-format` with options that include some of its built-in plugins. For this purpose, plugins are also known as **snapshot serializers**.\n\nTo serialize application-specific data types, you can add modules to `devDependencies` of a project, and then:\n\nIn an **individual** test file, you can add a module as follows. It precedes any modules from Jest configuration.\n\n```js\nimport serializer from 'my-serializer-module';\nexpect.addSnapshotSerializer(serializer);\n\n// tests which have `expect(value).toMatchSnapshot()` assertions\n```\n\nFor **all** test files, you can specify modules in Jest configuration. They precede built-in plugins for React, HTML, and Immutable.js data types. For example, in a `package.json` file:\n\n```json\n{\n \"jest\": {\n \"snapshotSerializers\": [\"my-serializer-module\"]\n }\n}\n```\n\n## Writing plugins\n\nA plugin is a JavaScript object.\n\nIf `options` has a `plugins` array: for the first plugin whose `test(val)` method returns a truthy value, then `prettyFormat(val, options)` returns the result from either:\n\n- `serialize(val, …)` method of the **improved** interface (available in **version 21** or later)\n- `print(val, …)` method of the **original** interface (if plugin does not have `serialize` method)\n\n### test\n\nWrite `test` so it can receive `val` argument of any type. To serialize **objects** which have certain properties, then a guarded expression like `val != null && …` or more concise `val && …` prevents the following errors:\n\n- `TypeError: Cannot read property 'whatever' of null`\n- `TypeError: Cannot read property 'whatever' of undefined`\n\nFor example, `test` method of built-in `ReactElement` plugin:\n\n```js\nconst elementSymbol = Symbol.for('react.element');\nconst test = val => val && val.$$typeof === elementSymbol;\n```\n\nPay attention to efficiency in `test` because `pretty-format` calls it often.\n\n### serialize\n\nThe **improved** interface is available in **version 21** or later.\n\nWrite `serialize` to return a string, given the arguments:\n\n- `val` which “passed the test”\n- unchanging `config` object: derived from `options`\n- current `indentation` string: concatenate to `indent` from `config`\n- current `depth` number: compare to `maxDepth` from `config`\n- current `refs` array: find circular references in objects\n- `printer` callback function: serialize children\n\n### config\n\n| key | type | description |\n| :------------------ | :-------- | :------------------------------------------------------ |\n| `callToJSON` | `boolean` | call `toJSON` method (if it exists) on objects |\n| `colors` | `Object` | escape codes for colors to highlight syntax |\n| `escapeRegex` | `boolean` | escape special characters in regular expressions |\n| `escapeString` | `boolean` | escape special characters in strings |\n| `indent` | `string` | spaces in each level of indentation |\n| `maxDepth` | `number` | levels to print in arrays, objects, elements, and so on |\n| `min` | `boolean` | minimize added space: no indentation nor line breaks |\n| `plugins` | `array` | plugins to serialize application-specific data types |\n| `printFunctionName` | `boolean` | include or omit the name of a function |\n| `spacingInner` | `strong` | spacing to separate items in a list |\n| `spacingOuter` | `strong` | spacing to enclose a list of items |\n\nEach property of `colors` in `config` corresponds to a property of `theme` in `options`:\n\n- the key is the same (for example, `tag`)\n- the value in `colors` is a object with `open` and `close` properties whose values are escape codes from [ansi-styles](https://github.com/chalk/ansi-styles) for the color value in `theme` (for example, `'cyan'`)\n\nSome properties in `config` are derived from `min` in `options`:\n\n- `spacingInner` and `spacingOuter` are **newline** if `min` is `false`\n- `spacingInner` is **space** and `spacingOuter` is **empty string** if `min` is `true`\n\n### Example of serialize and test\n\nThis plugin is a pattern you can apply to serialize composite data types. Of course, `pretty-format` does not need a plugin to serialize arrays :)\n\n```js\n// We reused more code when we factored out a function for child items\n// that is independent of depth, name, and enclosing punctuation (see below).\nconst SEPARATOR = ',';\nfunction serializeItems(items, config, indentation, depth, refs, printer) {\n if (items.length === 0) {\n return '';\n }\n const indentationItems = indentation + config.indent;\n return (\n config.spacingOuter +\n items\n .map(\n item =>\n indentationItems +\n printer(item, config, indentationItems, depth, refs), // callback\n )\n .join(SEPARATOR + config.spacingInner) +\n (config.min ? '' : SEPARATOR) + // following the last item\n config.spacingOuter +\n indentation\n );\n}\n\nconst plugin = {\n test(val) {\n return Array.isArray(val);\n },\n serialize(array, config, indentation, depth, refs, printer) {\n const name = array.constructor.name;\n return ++depth > config.maxDepth\n ? '[' + name + ']'\n : (config.min ? '' : name + ' ') +\n '[' +\n serializeItems(array, config, indentation, depth, refs, printer) +\n ']';\n },\n};\n```\n\n```js\nconst val = {\n filter: 'completed',\n items: [\n {\n text: 'Write test',\n completed: true,\n },\n {\n text: 'Write serialize',\n completed: true,\n },\n ],\n};\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n plugins: [plugin],\n }),\n);\n/*\nObject {\n \"filter\": \"completed\",\n \"items\": Array [\n Object {\n \"completed\": true,\n \"text\": \"Write test\",\n },\n Object {\n \"completed\": true,\n \"text\": \"Write serialize\",\n },\n ],\n}\n*/\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n indent: 4,\n plugins: [plugin],\n }),\n);\n/*\nObject {\n \"filter\": \"completed\",\n \"items\": Array [\n Object {\n \"completed\": true,\n \"text\": \"Write test\",\n },\n Object {\n \"completed\": true,\n \"text\": \"Write serialize\",\n },\n ],\n}\n*/\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n maxDepth: 1,\n plugins: [plugin],\n }),\n);\n/*\nObject {\n \"filter\": \"completed\",\n \"items\": [Array],\n}\n*/\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n min: true,\n plugins: [plugin],\n }),\n);\n/*\n{\"filter\": \"completed\", \"items\": [{\"completed\": true, \"text\": \"Write test\"}, {\"completed\": true, \"text\": \"Write serialize\"}]}\n*/\n```\n\n### print\n\nThe **original** interface is adequate for plugins:\n\n- that **do not** depend on options other than `highlight` or `min`\n- that **do not** depend on `depth` or `refs` in recursive traversal, and\n- if values either\n - do **not** require indentation, or\n - do **not** occur as children of JavaScript data structures (for example, array)\n\nWrite `print` to return a string, given the arguments:\n\n- `val` which “passed the test”\n- current `printer(valChild)` callback function: serialize children\n- current `indenter(lines)` callback function: indent lines at the next level\n- unchanging `config` object: derived from `options`\n- unchanging `colors` object: derived from `options`\n\nThe 3 properties of `config` are `min` in `options` and:\n\n- `spacing` and `edgeSpacing` are **newline** if `min` is `false`\n- `spacing` is **space** and `edgeSpacing` is **empty string** if `min` is `true`\n\nEach property of `colors` corresponds to a property of `theme` in `options`:\n\n- the key is the same (for example, `tag`)\n- the value in `colors` is a object with `open` and `close` properties whose values are escape codes from [ansi-styles](https://github.com/chalk/ansi-styles) for the color value in `theme` (for example, `'cyan'`)\n\n### Example of print and test\n\nThis plugin prints functions with the **number of named arguments** excluding rest argument.\n\n```js\nconst plugin = {\n print(val) {\n return `[Function ${val.name || 'anonymous'} ${val.length}]`;\n },\n test(val) {\n return typeof val === 'function';\n },\n};\n```\n\n```js\nconst val = {\n onClick(event) {},\n render() {},\n};\n\nprettyFormat(val, {\n plugins: [plugin],\n});\n/*\nObject {\n \"onClick\": [Function onClick 1],\n \"render\": [Function render 0],\n}\n*/\n\nprettyFormat(val);\n/*\nObject {\n \"onClick\": [Function onClick],\n \"render\": [Function render],\n}\n*/\n```\n\nThis plugin **ignores** the `printFunctionName` option. That limitation of the original `print` interface is a reason to use the improved `serialize` interface, described above.\n\n```js\nprettyFormat(val, {\n plugins: [pluginOld],\n printFunctionName: false,\n});\n/*\nObject {\n \"onClick\": [Function onClick 1],\n \"render\": [Function render 0],\n}\n*/\n\nprettyFormat(val, {\n printFunctionName: false,\n});\n/*\nObject {\n \"onClick\": [Function],\n \"render\": [Function],\n}\n*/\n```\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/facebook/jest/issues"},"homepage":"https://github.com/facebook/jest#readme","_id":"pretty-format@24.0.0-alpha.5","_npmVersion":"5.6.0","_nodeVersion":"8.11.3","_npmUser":{"name":"rubennorte","email":"rubennorte@gmail.com"},"dist":{"integrity":"sha512-X8GIu0dnCsa5dXxuqLLBEiLLJyrP4qglGukZgwEEwpwPzbd9IL19/4KKbt39BZ4kG9viI8VNUwrUfl3mHlTD3w==","shasum":"7d55172dd88d5cc874353f2b60403f3a41e248fa","tarball":"http://localhost:4545/npm/registry/pretty-format/pretty-format-24.0.0-alpha.5.tgz","fileCount":17,"unpackedSize":387166,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJb5YfOCRA9TVsSAnZWagAAdowP/2VdEiimilODluzBspf/\nfYsU0tLblobIcj4weqe6KQ3MbCdvs+9UcMqeYufsBJJyKnwl1J/6Nhh9jxMr\nH+VaV9coTlr5fcygFGMAX+f5G12j+EdVDZnxGXas9Rcx6OhBUacOJzKxD450\niYXTkQx37WEJ9YxEPnI9dj+LuizxyULohPzhbDCc5RfKkUJVrvCcd2JD286o\nftAdRc7A+oGQJh0BI39lgV/xrVyB9vVuM1Uqo+axyNcMHkaEwN50yHOSM/ug\n2BH8SA+buQ0JwzQ9ScfWrqmTXxnDBm4RcoOjcFPBdMCnh6Lz+yXLZNhb4UaO\n4EgAOInCSATsP++E/PjRs5OKG6aNU0FHQ/JnD2dqS8GEJSqoyBZB5fGSsRcd\nL9tAj8XhQN6FyxgxGydWIybx+8TkB6xRtJ+BTZl71G1lKFJMAVHbVQ5WeJ9b\n6LxbTtT5zOaEP946R9+Kw9nnPuz2NzXgUrCOb/yXib5kCzJo+KWUZhitfnUZ\n7cAJLcB7XJIyvrKdjE0pAHfndtLasOJZnZ/+IWw8lJakJd/J202nwTA77PUa\n9xFXd0N3Sy107Hdj4rOFj6nw+2hET+JcDUeteKqqAGiq9dq/R0Ic1pXTaQNk\nhRB52YZfKrDEYWQWmwsDHiIuNddd6ifBJRCCm+RdVZ4ljUmbQXO3uHWquy4B\nMvtL\r\n=y+nW\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHYTzGRMocxKn3fYNmWYt4IPov4ddV9pXyM6c8OVzykRAiBvJhtK/wVFwizvRkJrXh2YK5sSliWM13f13YAt/+k80g=="}]},"maintainers":[{"email":"aaron@abramov.io","name":"aaronabramov"},{"email":"christoph.pojer@gmail.com","name":"cpojer"},{"email":"opensource+npm@fb.com","name":"fb"},{"email":"jean@lauliac.com","name":"jeanlauliac"},{"email":"mjesun@hotmail.com","name":"mjesun"},{"email":"rubennorte@gmail.com","name":"rubennorte"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pretty-format_24.0.0-alpha.5_1541769165697_0.919979009351394"},"_hasShrinkwrap":false},"24.0.0-alpha.6":{"name":"pretty-format","version":"24.0.0-alpha.6","repository":{"type":"git","url":"git+https://github.com/facebook/jest.git"},"license":"MIT","description":"Stringify any JavaScript value.","main":"build/index.js","browser":"build-es5/index.js","author":{"name":"James Kyle","email":"me@thejameskyle.com"},"dependencies":{"ansi-regex":"^4.0.0","ansi-styles":"^3.2.0"},"devDependencies":{"immutable":"^4.0.0-rc.9","react":"*","react-dom":"*","react-test-renderer":"*"},"engines":{"node":">= 6"},"gitHead":"49d08403a941e596eda1279c07a1eaf4d4a73dad","readme":"# pretty-format\n\n> Stringify any JavaScript value.\n\n- Supports all built-in JavaScript types\n - primitive types: `Boolean`, `null`, `Number`, `String`, `Symbol`, `undefined`\n - other non-collection types: `Date`, `Error`, `Function`, `RegExp`\n - collection types:\n - `arguments`, `Array`, `ArrayBuffer`, `DataView`, `Float32Array`, `Float64Array`, `Int8Array`, `Int16Array`, `Int32Array`, `Uint8Array`, `Uint8ClampedArray`, `Uint16Array`, `Uint32Array`,\n - `Map`, `Set`, `WeakMap`, `WeakSet`\n - `Object`\n- [Blazingly fast](https://gist.github.com/thejameskyle/2b04ffe4941aafa8f970de077843a8fd)\n - similar performance to `JSON.stringify` in v8\n - significantly faster than `util.format` in Node.js\n- Serialize application-specific data types with built-in or user-defined plugins\n\n## Installation\n\n```sh\n$ yarn add pretty-format\n```\n\n## Usage\n\n```js\nconst prettyFormat = require('pretty-format'); // CommonJS\n```\n\n```js\nimport prettyFormat from 'pretty-format'; // ES2015 modules\n```\n\n```js\nconst val = {object: {}};\nval.circularReference = val;\nval[Symbol('foo')] = 'foo';\nval.map = new Map([['prop', 'value']]);\nval.array = [-0, Infinity, NaN];\n\nconsole.log(prettyFormat(val));\n/*\nObject {\n \"array\": Array [\n -0,\n Infinity,\n NaN,\n ],\n \"circularReference\": [Circular],\n \"map\": Map {\n \"prop\" => \"value\",\n },\n \"object\": Object {},\n Symbol(foo): \"foo\",\n}\n*/\n```\n\n## Usage with options\n\n```js\nfunction onClick() {}\n\nconsole.log(prettyFormat(onClick));\n/*\n[Function onClick]\n*/\n\nconst options = {\n printFunctionName: false,\n};\nconsole.log(prettyFormat(onClick, options));\n/*\n[Function]\n*/\n```\n\n| key | type | default | description |\n| :------------------ | :-------- | :--------- | :------------------------------------------------------ |\n| `callToJSON` | `boolean` | `true` | call `toJSON` method (if it exists) on objects |\n| `escapeRegex` | `boolean` | `false` | escape special characters in regular expressions |\n| `escapeString` | `boolean` | `true` | escape special characters in strings |\n| `highlight` | `boolean` | `false` | highlight syntax with colors in terminal (some plugins) |\n| `indent` | `number` | `2` | spaces in each level of indentation |\n| `maxDepth` | `number` | `Infinity` | levels to print in arrays, objects, elements, and so on |\n| `min` | `boolean` | `false` | minimize added space: no indentation nor line breaks |\n| `plugins` | `array` | `[]` | plugins to serialize application-specific data types |\n| `printFunctionName` | `boolean` | `true` | include or omit the name of a function |\n| `theme` | `object` | | colors to highlight syntax in terminal |\n\nProperty values of `theme` are from [ansi-styles colors](https://github.com/chalk/ansi-styles#colors)\n\n```js\nconst DEFAULT_THEME = {\n comment: 'gray',\n content: 'reset',\n prop: 'yellow',\n tag: 'cyan',\n value: 'green',\n};\n```\n\n## Usage with plugins\n\nThe `pretty-format` package provides some built-in plugins, including:\n\n- `ReactElement` for elements from `react`\n- `ReactTestComponent` for test objects from `react-test-renderer`\n\n```js\n// CommonJS\nconst prettyFormat = require('pretty-format');\nconst ReactElement = prettyFormat.plugins.ReactElement;\nconst ReactTestComponent = prettyFormat.plugins.ReactTestComponent;\n\nconst React = require('react');\nconst renderer = require('react-test-renderer');\n```\n\n```js\n// ES2015 modules and destructuring assignment\nimport prettyFormat from 'pretty-format';\nconst {ReactElement, ReactTestComponent} = prettyFormat.plugins;\n\nimport React from 'react';\nimport renderer from 'react-test-renderer';\n```\n\n```js\nconst onClick = () => {};\nconst element = React.createElement('button', {onClick}, 'Hello World');\n\nconst formatted1 = prettyFormat(element, {\n plugins: [ReactElement],\n printFunctionName: false,\n});\nconst formatted2 = prettyFormat(renderer.create(element).toJSON(), {\n plugins: [ReactTestComponent],\n printFunctionName: false,\n});\n/*\n\n*/\n```\n\n## Usage in Jest\n\nFor snapshot tests, Jest uses `pretty-format` with options that include some of its built-in plugins. For this purpose, plugins are also known as **snapshot serializers**.\n\nTo serialize application-specific data types, you can add modules to `devDependencies` of a project, and then:\n\nIn an **individual** test file, you can add a module as follows. It precedes any modules from Jest configuration.\n\n```js\nimport serializer from 'my-serializer-module';\nexpect.addSnapshotSerializer(serializer);\n\n// tests which have `expect(value).toMatchSnapshot()` assertions\n```\n\nFor **all** test files, you can specify modules in Jest configuration. They precede built-in plugins for React, HTML, and Immutable.js data types. For example, in a `package.json` file:\n\n```json\n{\n \"jest\": {\n \"snapshotSerializers\": [\"my-serializer-module\"]\n }\n}\n```\n\n## Writing plugins\n\nA plugin is a JavaScript object.\n\nIf `options` has a `plugins` array: for the first plugin whose `test(val)` method returns a truthy value, then `prettyFormat(val, options)` returns the result from either:\n\n- `serialize(val, …)` method of the **improved** interface (available in **version 21** or later)\n- `print(val, …)` method of the **original** interface (if plugin does not have `serialize` method)\n\n### test\n\nWrite `test` so it can receive `val` argument of any type. To serialize **objects** which have certain properties, then a guarded expression like `val != null && …` or more concise `val && …` prevents the following errors:\n\n- `TypeError: Cannot read property 'whatever' of null`\n- `TypeError: Cannot read property 'whatever' of undefined`\n\nFor example, `test` method of built-in `ReactElement` plugin:\n\n```js\nconst elementSymbol = Symbol.for('react.element');\nconst test = val => val && val.$$typeof === elementSymbol;\n```\n\nPay attention to efficiency in `test` because `pretty-format` calls it often.\n\n### serialize\n\nThe **improved** interface is available in **version 21** or later.\n\nWrite `serialize` to return a string, given the arguments:\n\n- `val` which “passed the test”\n- unchanging `config` object: derived from `options`\n- current `indentation` string: concatenate to `indent` from `config`\n- current `depth` number: compare to `maxDepth` from `config`\n- current `refs` array: find circular references in objects\n- `printer` callback function: serialize children\n\n### config\n\n| key | type | description |\n| :------------------ | :-------- | :------------------------------------------------------ |\n| `callToJSON` | `boolean` | call `toJSON` method (if it exists) on objects |\n| `colors` | `Object` | escape codes for colors to highlight syntax |\n| `escapeRegex` | `boolean` | escape special characters in regular expressions |\n| `escapeString` | `boolean` | escape special characters in strings |\n| `indent` | `string` | spaces in each level of indentation |\n| `maxDepth` | `number` | levels to print in arrays, objects, elements, and so on |\n| `min` | `boolean` | minimize added space: no indentation nor line breaks |\n| `plugins` | `array` | plugins to serialize application-specific data types |\n| `printFunctionName` | `boolean` | include or omit the name of a function |\n| `spacingInner` | `strong` | spacing to separate items in a list |\n| `spacingOuter` | `strong` | spacing to enclose a list of items |\n\nEach property of `colors` in `config` corresponds to a property of `theme` in `options`:\n\n- the key is the same (for example, `tag`)\n- the value in `colors` is a object with `open` and `close` properties whose values are escape codes from [ansi-styles](https://github.com/chalk/ansi-styles) for the color value in `theme` (for example, `'cyan'`)\n\nSome properties in `config` are derived from `min` in `options`:\n\n- `spacingInner` and `spacingOuter` are **newline** if `min` is `false`\n- `spacingInner` is **space** and `spacingOuter` is **empty string** if `min` is `true`\n\n### Example of serialize and test\n\nThis plugin is a pattern you can apply to serialize composite data types. Of course, `pretty-format` does not need a plugin to serialize arrays :)\n\n```js\n// We reused more code when we factored out a function for child items\n// that is independent of depth, name, and enclosing punctuation (see below).\nconst SEPARATOR = ',';\nfunction serializeItems(items, config, indentation, depth, refs, printer) {\n if (items.length === 0) {\n return '';\n }\n const indentationItems = indentation + config.indent;\n return (\n config.spacingOuter +\n items\n .map(\n item =>\n indentationItems +\n printer(item, config, indentationItems, depth, refs), // callback\n )\n .join(SEPARATOR + config.spacingInner) +\n (config.min ? '' : SEPARATOR) + // following the last item\n config.spacingOuter +\n indentation\n );\n}\n\nconst plugin = {\n test(val) {\n return Array.isArray(val);\n },\n serialize(array, config, indentation, depth, refs, printer) {\n const name = array.constructor.name;\n return ++depth > config.maxDepth\n ? '[' + name + ']'\n : (config.min ? '' : name + ' ') +\n '[' +\n serializeItems(array, config, indentation, depth, refs, printer) +\n ']';\n },\n};\n```\n\n```js\nconst val = {\n filter: 'completed',\n items: [\n {\n text: 'Write test',\n completed: true,\n },\n {\n text: 'Write serialize',\n completed: true,\n },\n ],\n};\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n plugins: [plugin],\n }),\n);\n/*\nObject {\n \"filter\": \"completed\",\n \"items\": Array [\n Object {\n \"completed\": true,\n \"text\": \"Write test\",\n },\n Object {\n \"completed\": true,\n \"text\": \"Write serialize\",\n },\n ],\n}\n*/\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n indent: 4,\n plugins: [plugin],\n }),\n);\n/*\nObject {\n \"filter\": \"completed\",\n \"items\": Array [\n Object {\n \"completed\": true,\n \"text\": \"Write test\",\n },\n Object {\n \"completed\": true,\n \"text\": \"Write serialize\",\n },\n ],\n}\n*/\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n maxDepth: 1,\n plugins: [plugin],\n }),\n);\n/*\nObject {\n \"filter\": \"completed\",\n \"items\": [Array],\n}\n*/\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n min: true,\n plugins: [plugin],\n }),\n);\n/*\n{\"filter\": \"completed\", \"items\": [{\"completed\": true, \"text\": \"Write test\"}, {\"completed\": true, \"text\": \"Write serialize\"}]}\n*/\n```\n\n### print\n\nThe **original** interface is adequate for plugins:\n\n- that **do not** depend on options other than `highlight` or `min`\n- that **do not** depend on `depth` or `refs` in recursive traversal, and\n- if values either\n - do **not** require indentation, or\n - do **not** occur as children of JavaScript data structures (for example, array)\n\nWrite `print` to return a string, given the arguments:\n\n- `val` which “passed the test”\n- current `printer(valChild)` callback function: serialize children\n- current `indenter(lines)` callback function: indent lines at the next level\n- unchanging `config` object: derived from `options`\n- unchanging `colors` object: derived from `options`\n\nThe 3 properties of `config` are `min` in `options` and:\n\n- `spacing` and `edgeSpacing` are **newline** if `min` is `false`\n- `spacing` is **space** and `edgeSpacing` is **empty string** if `min` is `true`\n\nEach property of `colors` corresponds to a property of `theme` in `options`:\n\n- the key is the same (for example, `tag`)\n- the value in `colors` is a object with `open` and `close` properties whose values are escape codes from [ansi-styles](https://github.com/chalk/ansi-styles) for the color value in `theme` (for example, `'cyan'`)\n\n### Example of print and test\n\nThis plugin prints functions with the **number of named arguments** excluding rest argument.\n\n```js\nconst plugin = {\n print(val) {\n return `[Function ${val.name || 'anonymous'} ${val.length}]`;\n },\n test(val) {\n return typeof val === 'function';\n },\n};\n```\n\n```js\nconst val = {\n onClick(event) {},\n render() {},\n};\n\nprettyFormat(val, {\n plugins: [plugin],\n});\n/*\nObject {\n \"onClick\": [Function onClick 1],\n \"render\": [Function render 0],\n}\n*/\n\nprettyFormat(val);\n/*\nObject {\n \"onClick\": [Function onClick],\n \"render\": [Function render],\n}\n*/\n```\n\nThis plugin **ignores** the `printFunctionName` option. That limitation of the original `print` interface is a reason to use the improved `serialize` interface, described above.\n\n```js\nprettyFormat(val, {\n plugins: [pluginOld],\n printFunctionName: false,\n});\n/*\nObject {\n \"onClick\": [Function onClick 1],\n \"render\": [Function render 0],\n}\n*/\n\nprettyFormat(val, {\n printFunctionName: false,\n});\n/*\nObject {\n \"onClick\": [Function],\n \"render\": [Function],\n}\n*/\n```\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/facebook/jest/issues"},"homepage":"https://github.com/facebook/jest#readme","_id":"pretty-format@24.0.0-alpha.6","_npmVersion":"5.6.0","_nodeVersion":"8.11.3","_npmUser":{"name":"rubennorte","email":"rubennorte@gmail.com"},"dist":{"integrity":"sha512-zG2m6YJeuzwBFqb5EIdmwYVf30sap+iMRuYNPytOccEXZMAJbPIFGKVJ/U0WjQegmnQbRo9CI7j6j3HtDaifiA==","shasum":"25ad2fa46b342d6278bf241c5d2114d4376fbac1","tarball":"http://localhost:4545/npm/registry/pretty-format/pretty-format-24.0.0-alpha.6.tgz","fileCount":17,"unpackedSize":387166,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJb5ci3CRA9TVsSAnZWagAA5EYP/2UkBM5ScCWplOTdfsbb\nYE9wMb/2PPYNcxEXtqLoKgvidoEjGkhnQKyVXiqqkREjupRR+NxfC+36Rc7Y\nsTkLZu/CfVwy8f5IvkTflRlbL80dB6ng76iDarz/0iFixUCCYhQUTgkvXyp3\nVZk7QRy4UtXP1f9ASssZrM6c+r7TpCzZ6B0+U5GfJsUs0QF9gxbEUj2MqxbX\nzPcHEHQOR7iTXyb9606IZmeSnrRgdaPD9Kh3D5lL2pwlzIi+yztvIxgQkbFk\n9DbVhJXkUasMZE8rqHDZUWjZQ1E9MBBcnICQQ80R1ZjzkocyThVbuKAM9SVC\nO5Ih/qzo7XzZ9YlU6Z8se/m6LNRDRHo2dvVGbUEdAJhiQXgWD2kHlq/423fF\nsQ+KVc0k72sGyaw67RgCvZO44X3Vevc5MsPaulptxsZJSYO30DFXWaZ68rPR\nBKkLBLttLBPHthEgpiN7Ek9jUztHl1N8GRCAZSFZyAMaz2GCCFECWm0Hd2Sf\njrNTXVMl4jSai4EB+Wbxb1yb5JXirF+CsDtTpRnhUu0YFumvRDGiQxInFVzf\ng4hqIOr6Sq01NGqZGo3l1ds5bBSphya8htf0aChrO/CArky9aWYonvIRnut7\nu4ac9A86XQno9eRguxoP47dKmRkQTiITi/ajMiwnepqGNm6KUkBtJtce/Y33\nalON\r\n=Kf0G\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGW8u/wYvh/GeEzZsk5N7hKHfcaeyMzn+Ea8OX7gkT9qAiEAmrWCMY3EdZIWs7u1jjYcW/cCPxChpyHymfwFgWTO5BA="}]},"maintainers":[{"email":"aaron@abramov.io","name":"aaronabramov"},{"email":"christoph.pojer@gmail.com","name":"cpojer"},{"email":"opensource+npm@fb.com","name":"fb"},{"email":"jean@lauliac.com","name":"jeanlauliac"},{"email":"mjesun@hotmail.com","name":"mjesun"},{"email":"rubennorte@gmail.com","name":"rubennorte"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pretty-format_24.0.0-alpha.6_1541785782719_0.07882660895723093"},"_hasShrinkwrap":false},"24.0.0-alpha.7":{"name":"pretty-format","version":"24.0.0-alpha.7","repository":{"type":"git","url":"git+https://github.com/facebook/jest.git"},"license":"MIT","description":"Stringify any JavaScript value.","main":"build/index.js","browser":"build-es5/index.js","author":{"name":"James Kyle","email":"me@thejameskyle.com"},"dependencies":{"ansi-regex":"^4.0.0","ansi-styles":"^3.2.0"},"devDependencies":{"immutable":"^4.0.0-rc.9","react":"*","react-dom":"*","react-test-renderer":"*"},"gitHead":"4954f46708415174c48a58f296a605fbe1244a31","readme":"# pretty-format\n\n> Stringify any JavaScript value.\n\n- Supports all built-in JavaScript types\n - primitive types: `Boolean`, `null`, `Number`, `String`, `Symbol`, `undefined`\n - other non-collection types: `Date`, `Error`, `Function`, `RegExp`\n - collection types:\n - `arguments`, `Array`, `ArrayBuffer`, `DataView`, `Float32Array`, `Float64Array`, `Int8Array`, `Int16Array`, `Int32Array`, `Uint8Array`, `Uint8ClampedArray`, `Uint16Array`, `Uint32Array`,\n - `Map`, `Set`, `WeakMap`, `WeakSet`\n - `Object`\n- [Blazingly fast](https://gist.github.com/thejameskyle/2b04ffe4941aafa8f970de077843a8fd)\n - similar performance to `JSON.stringify` in v8\n - significantly faster than `util.format` in Node.js\n- Serialize application-specific data types with built-in or user-defined plugins\n\n## Installation\n\n```sh\n$ yarn add pretty-format\n```\n\n## Usage\n\n```js\nconst prettyFormat = require('pretty-format'); // CommonJS\n```\n\n```js\nimport prettyFormat from 'pretty-format'; // ES2015 modules\n```\n\n```js\nconst val = {object: {}};\nval.circularReference = val;\nval[Symbol('foo')] = 'foo';\nval.map = new Map([['prop', 'value']]);\nval.array = [-0, Infinity, NaN];\n\nconsole.log(prettyFormat(val));\n/*\nObject {\n \"array\": Array [\n -0,\n Infinity,\n NaN,\n ],\n \"circularReference\": [Circular],\n \"map\": Map {\n \"prop\" => \"value\",\n },\n \"object\": Object {},\n Symbol(foo): \"foo\",\n}\n*/\n```\n\n## Usage with options\n\n```js\nfunction onClick() {}\n\nconsole.log(prettyFormat(onClick));\n/*\n[Function onClick]\n*/\n\nconst options = {\n printFunctionName: false,\n};\nconsole.log(prettyFormat(onClick, options));\n/*\n[Function]\n*/\n```\n\n| key | type | default | description |\n| :------------------ | :-------- | :--------- | :------------------------------------------------------ |\n| `callToJSON` | `boolean` | `true` | call `toJSON` method (if it exists) on objects |\n| `escapeRegex` | `boolean` | `false` | escape special characters in regular expressions |\n| `escapeString` | `boolean` | `true` | escape special characters in strings |\n| `highlight` | `boolean` | `false` | highlight syntax with colors in terminal (some plugins) |\n| `indent` | `number` | `2` | spaces in each level of indentation |\n| `maxDepth` | `number` | `Infinity` | levels to print in arrays, objects, elements, and so on |\n| `min` | `boolean` | `false` | minimize added space: no indentation nor line breaks |\n| `plugins` | `array` | `[]` | plugins to serialize application-specific data types |\n| `printFunctionName` | `boolean` | `true` | include or omit the name of a function |\n| `theme` | `object` | | colors to highlight syntax in terminal |\n\nProperty values of `theme` are from [ansi-styles colors](https://github.com/chalk/ansi-styles#colors)\n\n```js\nconst DEFAULT_THEME = {\n comment: 'gray',\n content: 'reset',\n prop: 'yellow',\n tag: 'cyan',\n value: 'green',\n};\n```\n\n## Usage with plugins\n\nThe `pretty-format` package provides some built-in plugins, including:\n\n- `ReactElement` for elements from `react`\n- `ReactTestComponent` for test objects from `react-test-renderer`\n\n```js\n// CommonJS\nconst prettyFormat = require('pretty-format');\nconst ReactElement = prettyFormat.plugins.ReactElement;\nconst ReactTestComponent = prettyFormat.plugins.ReactTestComponent;\n\nconst React = require('react');\nconst renderer = require('react-test-renderer');\n```\n\n```js\n// ES2015 modules and destructuring assignment\nimport prettyFormat from 'pretty-format';\nconst {ReactElement, ReactTestComponent} = prettyFormat.plugins;\n\nimport React from 'react';\nimport renderer from 'react-test-renderer';\n```\n\n```js\nconst onClick = () => {};\nconst element = React.createElement('button', {onClick}, 'Hello World');\n\nconst formatted1 = prettyFormat(element, {\n plugins: [ReactElement],\n printFunctionName: false,\n});\nconst formatted2 = prettyFormat(renderer.create(element).toJSON(), {\n plugins: [ReactTestComponent],\n printFunctionName: false,\n});\n/*\n\n*/\n```\n\n## Usage in Jest\n\nFor snapshot tests, Jest uses `pretty-format` with options that include some of its built-in plugins. For this purpose, plugins are also known as **snapshot serializers**.\n\nTo serialize application-specific data types, you can add modules to `devDependencies` of a project, and then:\n\nIn an **individual** test file, you can add a module as follows. It precedes any modules from Jest configuration.\n\n```js\nimport serializer from 'my-serializer-module';\nexpect.addSnapshotSerializer(serializer);\n\n// tests which have `expect(value).toMatchSnapshot()` assertions\n```\n\nFor **all** test files, you can specify modules in Jest configuration. They precede built-in plugins for React, HTML, and Immutable.js data types. For example, in a `package.json` file:\n\n```json\n{\n \"jest\": {\n \"snapshotSerializers\": [\"my-serializer-module\"]\n }\n}\n```\n\n## Writing plugins\n\nA plugin is a JavaScript object.\n\nIf `options` has a `plugins` array: for the first plugin whose `test(val)` method returns a truthy value, then `prettyFormat(val, options)` returns the result from either:\n\n- `serialize(val, …)` method of the **improved** interface (available in **version 21** or later)\n- `print(val, …)` method of the **original** interface (if plugin does not have `serialize` method)\n\n### test\n\nWrite `test` so it can receive `val` argument of any type. To serialize **objects** which have certain properties, then a guarded expression like `val != null && …` or more concise `val && …` prevents the following errors:\n\n- `TypeError: Cannot read property 'whatever' of null`\n- `TypeError: Cannot read property 'whatever' of undefined`\n\nFor example, `test` method of built-in `ReactElement` plugin:\n\n```js\nconst elementSymbol = Symbol.for('react.element');\nconst test = val => val && val.$$typeof === elementSymbol;\n```\n\nPay attention to efficiency in `test` because `pretty-format` calls it often.\n\n### serialize\n\nThe **improved** interface is available in **version 21** or later.\n\nWrite `serialize` to return a string, given the arguments:\n\n- `val` which “passed the test”\n- unchanging `config` object: derived from `options`\n- current `indentation` string: concatenate to `indent` from `config`\n- current `depth` number: compare to `maxDepth` from `config`\n- current `refs` array: find circular references in objects\n- `printer` callback function: serialize children\n\n### config\n\n| key | type | description |\n| :------------------ | :-------- | :------------------------------------------------------ |\n| `callToJSON` | `boolean` | call `toJSON` method (if it exists) on objects |\n| `colors` | `Object` | escape codes for colors to highlight syntax |\n| `escapeRegex` | `boolean` | escape special characters in regular expressions |\n| `escapeString` | `boolean` | escape special characters in strings |\n| `indent` | `string` | spaces in each level of indentation |\n| `maxDepth` | `number` | levels to print in arrays, objects, elements, and so on |\n| `min` | `boolean` | minimize added space: no indentation nor line breaks |\n| `plugins` | `array` | plugins to serialize application-specific data types |\n| `printFunctionName` | `boolean` | include or omit the name of a function |\n| `spacingInner` | `strong` | spacing to separate items in a list |\n| `spacingOuter` | `strong` | spacing to enclose a list of items |\n\nEach property of `colors` in `config` corresponds to a property of `theme` in `options`:\n\n- the key is the same (for example, `tag`)\n- the value in `colors` is a object with `open` and `close` properties whose values are escape codes from [ansi-styles](https://github.com/chalk/ansi-styles) for the color value in `theme` (for example, `'cyan'`)\n\nSome properties in `config` are derived from `min` in `options`:\n\n- `spacingInner` and `spacingOuter` are **newline** if `min` is `false`\n- `spacingInner` is **space** and `spacingOuter` is **empty string** if `min` is `true`\n\n### Example of serialize and test\n\nThis plugin is a pattern you can apply to serialize composite data types. Of course, `pretty-format` does not need a plugin to serialize arrays :)\n\n```js\n// We reused more code when we factored out a function for child items\n// that is independent of depth, name, and enclosing punctuation (see below).\nconst SEPARATOR = ',';\nfunction serializeItems(items, config, indentation, depth, refs, printer) {\n if (items.length === 0) {\n return '';\n }\n const indentationItems = indentation + config.indent;\n return (\n config.spacingOuter +\n items\n .map(\n item =>\n indentationItems +\n printer(item, config, indentationItems, depth, refs), // callback\n )\n .join(SEPARATOR + config.spacingInner) +\n (config.min ? '' : SEPARATOR) + // following the last item\n config.spacingOuter +\n indentation\n );\n}\n\nconst plugin = {\n test(val) {\n return Array.isArray(val);\n },\n serialize(array, config, indentation, depth, refs, printer) {\n const name = array.constructor.name;\n return ++depth > config.maxDepth\n ? '[' + name + ']'\n : (config.min ? '' : name + ' ') +\n '[' +\n serializeItems(array, config, indentation, depth, refs, printer) +\n ']';\n },\n};\n```\n\n```js\nconst val = {\n filter: 'completed',\n items: [\n {\n text: 'Write test',\n completed: true,\n },\n {\n text: 'Write serialize',\n completed: true,\n },\n ],\n};\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n plugins: [plugin],\n }),\n);\n/*\nObject {\n \"filter\": \"completed\",\n \"items\": Array [\n Object {\n \"completed\": true,\n \"text\": \"Write test\",\n },\n Object {\n \"completed\": true,\n \"text\": \"Write serialize\",\n },\n ],\n}\n*/\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n indent: 4,\n plugins: [plugin],\n }),\n);\n/*\nObject {\n \"filter\": \"completed\",\n \"items\": Array [\n Object {\n \"completed\": true,\n \"text\": \"Write test\",\n },\n Object {\n \"completed\": true,\n \"text\": \"Write serialize\",\n },\n ],\n}\n*/\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n maxDepth: 1,\n plugins: [plugin],\n }),\n);\n/*\nObject {\n \"filter\": \"completed\",\n \"items\": [Array],\n}\n*/\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n min: true,\n plugins: [plugin],\n }),\n);\n/*\n{\"filter\": \"completed\", \"items\": [{\"completed\": true, \"text\": \"Write test\"}, {\"completed\": true, \"text\": \"Write serialize\"}]}\n*/\n```\n\n### print\n\nThe **original** interface is adequate for plugins:\n\n- that **do not** depend on options other than `highlight` or `min`\n- that **do not** depend on `depth` or `refs` in recursive traversal, and\n- if values either\n - do **not** require indentation, or\n - do **not** occur as children of JavaScript data structures (for example, array)\n\nWrite `print` to return a string, given the arguments:\n\n- `val` which “passed the test”\n- current `printer(valChild)` callback function: serialize children\n- current `indenter(lines)` callback function: indent lines at the next level\n- unchanging `config` object: derived from `options`\n- unchanging `colors` object: derived from `options`\n\nThe 3 properties of `config` are `min` in `options` and:\n\n- `spacing` and `edgeSpacing` are **newline** if `min` is `false`\n- `spacing` is **space** and `edgeSpacing` is **empty string** if `min` is `true`\n\nEach property of `colors` corresponds to a property of `theme` in `options`:\n\n- the key is the same (for example, `tag`)\n- the value in `colors` is a object with `open` and `close` properties whose values are escape codes from [ansi-styles](https://github.com/chalk/ansi-styles) for the color value in `theme` (for example, `'cyan'`)\n\n### Example of print and test\n\nThis plugin prints functions with the **number of named arguments** excluding rest argument.\n\n```js\nconst plugin = {\n print(val) {\n return `[Function ${val.name || 'anonymous'} ${val.length}]`;\n },\n test(val) {\n return typeof val === 'function';\n },\n};\n```\n\n```js\nconst val = {\n onClick(event) {},\n render() {},\n};\n\nprettyFormat(val, {\n plugins: [plugin],\n});\n/*\nObject {\n \"onClick\": [Function onClick 1],\n \"render\": [Function render 0],\n}\n*/\n\nprettyFormat(val);\n/*\nObject {\n \"onClick\": [Function onClick],\n \"render\": [Function render],\n}\n*/\n```\n\nThis plugin **ignores** the `printFunctionName` option. That limitation of the original `print` interface is a reason to use the improved `serialize` interface, described above.\n\n```js\nprettyFormat(val, {\n plugins: [pluginOld],\n printFunctionName: false,\n});\n/*\nObject {\n \"onClick\": [Function onClick 1],\n \"render\": [Function render 0],\n}\n*/\n\nprettyFormat(val, {\n printFunctionName: false,\n});\n/*\nObject {\n \"onClick\": [Function],\n \"render\": [Function],\n}\n*/\n```\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/facebook/jest/issues"},"homepage":"https://github.com/facebook/jest#readme","_id":"pretty-format@24.0.0-alpha.7","_npmVersion":"5.6.0","_nodeVersion":"8.10.0","_npmUser":{"name":"mjesun","email":"mjesun@hotmail.com"},"dist":{"integrity":"sha512-tYRo6D7Ttgthp5vJHzmeVt0mNpqjjqHlNlPvtT6mN5jn15J80P/BRDd8Gg5ouuxR2iGw7qLFidN8L0vEuUasTA==","shasum":"c3f932635a38569921eac940b2217bb774ef4d18","tarball":"http://localhost:4545/npm/registry/pretty-format/pretty-format-24.0.0-alpha.7.tgz","fileCount":5,"unpackedSize":277728,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcD+DdCRA9TVsSAnZWagAA1tIP/3u4jUFx+uTVpVX3amOi\nus7Hp34Rpma47++U7UIaHs4mOETVMz8k96evDFHIP7oegUoQsmSdaO4T7Iam\nbeqonA8OJ2gbdgZ+8nBpM6LTFv9ZM2WTfaTbCG2961EDvbNTo8eqaakznXLh\ndIQoFxrCqzLE25/v5rHshSVA+T6OLaVv3Bff12ClrvrPjm85Zt6PM3+PbP83\nDN2BHYe054T0MIoxfaxdZaoutjyOPzx2GoxGyDlprOSpcZJiRfb6GWLx55e9\nHnnxRfgSfoC6GUsjZr8Uv29hLOxBLsSlaVlzGjlE4iWhsd7K2JQpUeKgnsJ9\nHgYvWdqeP20FcOuG5L90a+28Z1HUvyRddRZEt6esi+sCJOAYThn4dLC/T4EX\nUy2Zu8p65CjhzVELZPUeurJcefVGXBwhlzyZfYd3TfLvoMWCYUxK8zp49yN1\nPBo0iD9MKKti7KYmxRbGdYT0AAou9myWksbhsVlhKnuoIeyKDrovGfIPOyZR\nCEfy4y6gEMv6KMwPTgi0Dr7OLGYGdNv2IEw7jT009DtPVdWWx4aAfsfeJKUi\nWCm+3wMrLegGKHbs4WC1ENyDO3WDyPMFkCU9oE+JpCnsfd0QTdi+sJKibJGo\nSjQDXvtAkWOdOmblS1GR3yc/68iyhGFeyHRTl12nvuFDz1ujVxa0IwnNbtzo\nOmKB\r\n=swOX\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAZUU87xARnBnS03Y+xj9qSu43lMnKBh9e/o1B5UAuUFAiAaY173hkDjHw5/Q3LyNT0BVJx38jRN52olor6XxD5IfQ=="}]},"maintainers":[{"email":"aaron@abramov.io","name":"aaronabramov"},{"email":"christoph.pojer@gmail.com","name":"cpojer"},{"email":"opensource+npm@fb.com","name":"fb"},{"email":"jean@lauliac.com","name":"jeanlauliac"},{"email":"mjesun@hotmail.com","name":"mjesun"},{"email":"rubennorte@gmail.com","name":"rubennorte"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pretty-format_24.0.0-alpha.7_1544544476167_0.4371508942416136"},"_hasShrinkwrap":false},"24.0.0-alpha.8":{"name":"pretty-format","version":"24.0.0-alpha.8","repository":{"type":"git","url":"git+https://github.com/facebook/jest.git"},"license":"MIT","description":"Stringify any JavaScript value.","main":"build/index.js","browser":"build-es5/index.js","author":{"name":"James Kyle","email":"me@thejameskyle.com"},"dependencies":{"ansi-regex":"^4.0.0","ansi-styles":"^3.2.0"},"devDependencies":{"immutable":"^4.0.0-rc.9","react":"*","react-dom":"*","react-test-renderer":"*"},"engines":{"node":">= 6"},"gitHead":"700e0dadb85f5dc8ff5dac6c7e98956690049734","readme":"# pretty-format\n\n> Stringify any JavaScript value.\n\n- Supports all built-in JavaScript types\n - primitive types: `Boolean`, `null`, `Number`, `String`, `Symbol`, `undefined`\n - other non-collection types: `Date`, `Error`, `Function`, `RegExp`\n - collection types:\n - `arguments`, `Array`, `ArrayBuffer`, `DataView`, `Float32Array`, `Float64Array`, `Int8Array`, `Int16Array`, `Int32Array`, `Uint8Array`, `Uint8ClampedArray`, `Uint16Array`, `Uint32Array`,\n - `Map`, `Set`, `WeakMap`, `WeakSet`\n - `Object`\n- [Blazingly fast](https://gist.github.com/thejameskyle/2b04ffe4941aafa8f970de077843a8fd)\n - similar performance to `JSON.stringify` in v8\n - significantly faster than `util.format` in Node.js\n- Serialize application-specific data types with built-in or user-defined plugins\n\n## Installation\n\n```sh\n$ yarn add pretty-format\n```\n\n## Usage\n\n```js\nconst prettyFormat = require('pretty-format'); // CommonJS\n```\n\n```js\nimport prettyFormat from 'pretty-format'; // ES2015 modules\n```\n\n```js\nconst val = {object: {}};\nval.circularReference = val;\nval[Symbol('foo')] = 'foo';\nval.map = new Map([['prop', 'value']]);\nval.array = [-0, Infinity, NaN];\n\nconsole.log(prettyFormat(val));\n/*\nObject {\n \"array\": Array [\n -0,\n Infinity,\n NaN,\n ],\n \"circularReference\": [Circular],\n \"map\": Map {\n \"prop\" => \"value\",\n },\n \"object\": Object {},\n Symbol(foo): \"foo\",\n}\n*/\n```\n\n## Usage with options\n\n```js\nfunction onClick() {}\n\nconsole.log(prettyFormat(onClick));\n/*\n[Function onClick]\n*/\n\nconst options = {\n printFunctionName: false,\n};\nconsole.log(prettyFormat(onClick, options));\n/*\n[Function]\n*/\n```\n\n| key | type | default | description |\n| :------------------ | :-------- | :--------- | :------------------------------------------------------ |\n| `callToJSON` | `boolean` | `true` | call `toJSON` method (if it exists) on objects |\n| `escapeRegex` | `boolean` | `false` | escape special characters in regular expressions |\n| `escapeString` | `boolean` | `true` | escape special characters in strings |\n| `highlight` | `boolean` | `false` | highlight syntax with colors in terminal (some plugins) |\n| `indent` | `number` | `2` | spaces in each level of indentation |\n| `maxDepth` | `number` | `Infinity` | levels to print in arrays, objects, elements, and so on |\n| `min` | `boolean` | `false` | minimize added space: no indentation nor line breaks |\n| `plugins` | `array` | `[]` | plugins to serialize application-specific data types |\n| `printFunctionName` | `boolean` | `true` | include or omit the name of a function |\n| `theme` | `object` | | colors to highlight syntax in terminal |\n\nProperty values of `theme` are from [ansi-styles colors](https://github.com/chalk/ansi-styles#colors)\n\n```js\nconst DEFAULT_THEME = {\n comment: 'gray',\n content: 'reset',\n prop: 'yellow',\n tag: 'cyan',\n value: 'green',\n};\n```\n\n## Usage with plugins\n\nThe `pretty-format` package provides some built-in plugins, including:\n\n- `ReactElement` for elements from `react`\n- `ReactTestComponent` for test objects from `react-test-renderer`\n\n```js\n// CommonJS\nconst prettyFormat = require('pretty-format');\nconst ReactElement = prettyFormat.plugins.ReactElement;\nconst ReactTestComponent = prettyFormat.plugins.ReactTestComponent;\n\nconst React = require('react');\nconst renderer = require('react-test-renderer');\n```\n\n```js\n// ES2015 modules and destructuring assignment\nimport prettyFormat from 'pretty-format';\nconst {ReactElement, ReactTestComponent} = prettyFormat.plugins;\n\nimport React from 'react';\nimport renderer from 'react-test-renderer';\n```\n\n```js\nconst onClick = () => {};\nconst element = React.createElement('button', {onClick}, 'Hello World');\n\nconst formatted1 = prettyFormat(element, {\n plugins: [ReactElement],\n printFunctionName: false,\n});\nconst formatted2 = prettyFormat(renderer.create(element).toJSON(), {\n plugins: [ReactTestComponent],\n printFunctionName: false,\n});\n/*\n\n*/\n```\n\n## Usage in Jest\n\nFor snapshot tests, Jest uses `pretty-format` with options that include some of its built-in plugins. For this purpose, plugins are also known as **snapshot serializers**.\n\nTo serialize application-specific data types, you can add modules to `devDependencies` of a project, and then:\n\nIn an **individual** test file, you can add a module as follows. It precedes any modules from Jest configuration.\n\n```js\nimport serializer from 'my-serializer-module';\nexpect.addSnapshotSerializer(serializer);\n\n// tests which have `expect(value).toMatchSnapshot()` assertions\n```\n\nFor **all** test files, you can specify modules in Jest configuration. They precede built-in plugins for React, HTML, and Immutable.js data types. For example, in a `package.json` file:\n\n```json\n{\n \"jest\": {\n \"snapshotSerializers\": [\"my-serializer-module\"]\n }\n}\n```\n\n## Writing plugins\n\nA plugin is a JavaScript object.\n\nIf `options` has a `plugins` array: for the first plugin whose `test(val)` method returns a truthy value, then `prettyFormat(val, options)` returns the result from either:\n\n- `serialize(val, …)` method of the **improved** interface (available in **version 21** or later)\n- `print(val, …)` method of the **original** interface (if plugin does not have `serialize` method)\n\n### test\n\nWrite `test` so it can receive `val` argument of any type. To serialize **objects** which have certain properties, then a guarded expression like `val != null && …` or more concise `val && …` prevents the following errors:\n\n- `TypeError: Cannot read property 'whatever' of null`\n- `TypeError: Cannot read property 'whatever' of undefined`\n\nFor example, `test` method of built-in `ReactElement` plugin:\n\n```js\nconst elementSymbol = Symbol.for('react.element');\nconst test = val => val && val.$$typeof === elementSymbol;\n```\n\nPay attention to efficiency in `test` because `pretty-format` calls it often.\n\n### serialize\n\nThe **improved** interface is available in **version 21** or later.\n\nWrite `serialize` to return a string, given the arguments:\n\n- `val` which “passed the test”\n- unchanging `config` object: derived from `options`\n- current `indentation` string: concatenate to `indent` from `config`\n- current `depth` number: compare to `maxDepth` from `config`\n- current `refs` array: find circular references in objects\n- `printer` callback function: serialize children\n\n### config\n\n| key | type | description |\n| :------------------ | :-------- | :------------------------------------------------------ |\n| `callToJSON` | `boolean` | call `toJSON` method (if it exists) on objects |\n| `colors` | `Object` | escape codes for colors to highlight syntax |\n| `escapeRegex` | `boolean` | escape special characters in regular expressions |\n| `escapeString` | `boolean` | escape special characters in strings |\n| `indent` | `string` | spaces in each level of indentation |\n| `maxDepth` | `number` | levels to print in arrays, objects, elements, and so on |\n| `min` | `boolean` | minimize added space: no indentation nor line breaks |\n| `plugins` | `array` | plugins to serialize application-specific data types |\n| `printFunctionName` | `boolean` | include or omit the name of a function |\n| `spacingInner` | `strong` | spacing to separate items in a list |\n| `spacingOuter` | `strong` | spacing to enclose a list of items |\n\nEach property of `colors` in `config` corresponds to a property of `theme` in `options`:\n\n- the key is the same (for example, `tag`)\n- the value in `colors` is a object with `open` and `close` properties whose values are escape codes from [ansi-styles](https://github.com/chalk/ansi-styles) for the color value in `theme` (for example, `'cyan'`)\n\nSome properties in `config` are derived from `min` in `options`:\n\n- `spacingInner` and `spacingOuter` are **newline** if `min` is `false`\n- `spacingInner` is **space** and `spacingOuter` is **empty string** if `min` is `true`\n\n### Example of serialize and test\n\nThis plugin is a pattern you can apply to serialize composite data types. Of course, `pretty-format` does not need a plugin to serialize arrays :)\n\n```js\n// We reused more code when we factored out a function for child items\n// that is independent of depth, name, and enclosing punctuation (see below).\nconst SEPARATOR = ',';\nfunction serializeItems(items, config, indentation, depth, refs, printer) {\n if (items.length === 0) {\n return '';\n }\n const indentationItems = indentation + config.indent;\n return (\n config.spacingOuter +\n items\n .map(\n item =>\n indentationItems +\n printer(item, config, indentationItems, depth, refs), // callback\n )\n .join(SEPARATOR + config.spacingInner) +\n (config.min ? '' : SEPARATOR) + // following the last item\n config.spacingOuter +\n indentation\n );\n}\n\nconst plugin = {\n test(val) {\n return Array.isArray(val);\n },\n serialize(array, config, indentation, depth, refs, printer) {\n const name = array.constructor.name;\n return ++depth > config.maxDepth\n ? '[' + name + ']'\n : (config.min ? '' : name + ' ') +\n '[' +\n serializeItems(array, config, indentation, depth, refs, printer) +\n ']';\n },\n};\n```\n\n```js\nconst val = {\n filter: 'completed',\n items: [\n {\n text: 'Write test',\n completed: true,\n },\n {\n text: 'Write serialize',\n completed: true,\n },\n ],\n};\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n plugins: [plugin],\n }),\n);\n/*\nObject {\n \"filter\": \"completed\",\n \"items\": Array [\n Object {\n \"completed\": true,\n \"text\": \"Write test\",\n },\n Object {\n \"completed\": true,\n \"text\": \"Write serialize\",\n },\n ],\n}\n*/\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n indent: 4,\n plugins: [plugin],\n }),\n);\n/*\nObject {\n \"filter\": \"completed\",\n \"items\": Array [\n Object {\n \"completed\": true,\n \"text\": \"Write test\",\n },\n Object {\n \"completed\": true,\n \"text\": \"Write serialize\",\n },\n ],\n}\n*/\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n maxDepth: 1,\n plugins: [plugin],\n }),\n);\n/*\nObject {\n \"filter\": \"completed\",\n \"items\": [Array],\n}\n*/\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n min: true,\n plugins: [plugin],\n }),\n);\n/*\n{\"filter\": \"completed\", \"items\": [{\"completed\": true, \"text\": \"Write test\"}, {\"completed\": true, \"text\": \"Write serialize\"}]}\n*/\n```\n\n### print\n\nThe **original** interface is adequate for plugins:\n\n- that **do not** depend on options other than `highlight` or `min`\n- that **do not** depend on `depth` or `refs` in recursive traversal, and\n- if values either\n - do **not** require indentation, or\n - do **not** occur as children of JavaScript data structures (for example, array)\n\nWrite `print` to return a string, given the arguments:\n\n- `val` which “passed the test”\n- current `printer(valChild)` callback function: serialize children\n- current `indenter(lines)` callback function: indent lines at the next level\n- unchanging `config` object: derived from `options`\n- unchanging `colors` object: derived from `options`\n\nThe 3 properties of `config` are `min` in `options` and:\n\n- `spacing` and `edgeSpacing` are **newline** if `min` is `false`\n- `spacing` is **space** and `edgeSpacing` is **empty string** if `min` is `true`\n\nEach property of `colors` corresponds to a property of `theme` in `options`:\n\n- the key is the same (for example, `tag`)\n- the value in `colors` is a object with `open` and `close` properties whose values are escape codes from [ansi-styles](https://github.com/chalk/ansi-styles) for the color value in `theme` (for example, `'cyan'`)\n\n### Example of print and test\n\nThis plugin prints functions with the **number of named arguments** excluding rest argument.\n\n```js\nconst plugin = {\n print(val) {\n return `[Function ${val.name || 'anonymous'} ${val.length}]`;\n },\n test(val) {\n return typeof val === 'function';\n },\n};\n```\n\n```js\nconst val = {\n onClick(event) {},\n render() {},\n};\n\nprettyFormat(val, {\n plugins: [plugin],\n});\n/*\nObject {\n \"onClick\": [Function onClick 1],\n \"render\": [Function render 0],\n}\n*/\n\nprettyFormat(val);\n/*\nObject {\n \"onClick\": [Function onClick],\n \"render\": [Function render],\n}\n*/\n```\n\nThis plugin **ignores** the `printFunctionName` option. That limitation of the original `print` interface is a reason to use the improved `serialize` interface, described above.\n\n```js\nprettyFormat(val, {\n plugins: [pluginOld],\n printFunctionName: false,\n});\n/*\nObject {\n \"onClick\": [Function onClick 1],\n \"render\": [Function render 0],\n}\n*/\n\nprettyFormat(val, {\n printFunctionName: false,\n});\n/*\nObject {\n \"onClick\": [Function],\n \"render\": [Function],\n}\n*/\n```\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/facebook/jest/issues"},"homepage":"https://github.com/facebook/jest#readme","_id":"pretty-format@24.0.0-alpha.8","_npmVersion":"5.6.0","_nodeVersion":"8.10.0","_npmUser":{"name":"mjesun","email":"mjesun@hotmail.com"},"dist":{"integrity":"sha512-NmzgnwRiResqJsEHPXpKQuHHd47aKWe99zRHTsbRhfE5zd0xnyvMglAie2agF01xtJ+t6pLChtkm4cCxCd4RaA==","shasum":"522f73193f1e837850030068ecaecbe0b7f7d06c","tarball":"http://localhost:4545/npm/registry/pretty-format/pretty-format-24.0.0-alpha.8.tgz","fileCount":18,"unpackedSize":521842,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcErdpCRA9TVsSAnZWagAAEtYP/3vhLOq7/8lUmS+AhvJh\nnT2saznGMGHFXAQ5oaX7Sb2WZGhRRtQm7t2OPhijOZh2nu1bqoTIr/VlAVL+\nmztFUmyFLGYfNAcnzvqU5MyEOk561KCVVRZ4tUrR1VYR1kF3yilPnvnl0CH5\nHBDklZd7VMzcUrNGpxe1oJYhkSCqXeHg2DkB0b61rrIIjvzWx2GmMt0wjlHX\n8l2g4A1BJpwlJSA5Kf+9UaHIxJcpBcd17AIZyM8dXsTKzsHQppMW6GSnmVrr\ntznQbJdO3/fCgJobuVlOEd09DsFwLHp7852uxNEc2R3birEzxTcq03NWl+/f\nCrmPmK2HfuodqnjfxCqZkY0TBK5YX0hnV4DTLMl33fGsW+bzv0Yw0TPl2gXg\nhjRdbqUMWkC/Lbe40meq9ilX3Xc5ReowO2NT/JCCUyhiz2AW7iUxBZnMAz3h\naJUA8sEyayAmOWNvU0a3hs7/3H0CBTc4/JWiXZNVMx+W5bYDWYxIXLGWZHfd\nf0hIC9jCjm0rCdESKqauOm1ezSAbGU9rTCRkHtopP9Ulapvb3TJLIhSPDxVU\nt0FNEwJS5Hz2uIKojuF1ps0ubZmPorKS0zI37tmE6Xl0fklmRsDJbqLFJjmR\nWpdJGrgw3q0Imu2/xex1Bmr5kuePpkk/1dUBwue1/LpaW5+98zeJNYklRLhP\nx9wy\r\n=Pvjl\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHhwV6VXXVibUDrjAs912WtluC70t8GH9L88Ji1PzDk1AiEAiijIxUpndf1ApNJJACrddGJdSsqKUsLvLnga8UxJE4w="}]},"maintainers":[{"email":"aaron@abramov.io","name":"aaronabramov"},{"email":"christoph.pojer@gmail.com","name":"cpojer"},{"email":"opensource+npm@fb.com","name":"fb"},{"email":"jean@lauliac.com","name":"jeanlauliac"},{"email":"mjesun@hotmail.com","name":"mjesun"},{"email":"rubennorte@gmail.com","name":"rubennorte"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pretty-format_24.0.0-alpha.8_1544730472585_0.11588537364178064"},"_hasShrinkwrap":false},"24.0.0-alpha.9":{"name":"pretty-format","version":"24.0.0-alpha.9","repository":{"type":"git","url":"git+https://github.com/facebook/jest.git"},"license":"MIT","description":"Stringify any JavaScript value.","main":"build/index.js","browser":"build-es5/index.js","author":{"name":"James Kyle","email":"me@thejameskyle.com"},"dependencies":{"ansi-regex":"^4.0.0","ansi-styles":"^3.2.0"},"devDependencies":{"immutable":"4.0.0-rc.9","react":"*","react-dom":"*","react-test-renderer":"*"},"engines":{"node":">= 6"},"gitHead":"c7caa7ba5904d0c61e586694cde5f536639e4afc","readme":"# pretty-format\n\n> Stringify any JavaScript value.\n\n- Supports all built-in JavaScript types\n - primitive types: `Boolean`, `null`, `Number`, `String`, `Symbol`, `undefined`\n - other non-collection types: `Date`, `Error`, `Function`, `RegExp`\n - collection types:\n - `arguments`, `Array`, `ArrayBuffer`, `DataView`, `Float32Array`, `Float64Array`, `Int8Array`, `Int16Array`, `Int32Array`, `Uint8Array`, `Uint8ClampedArray`, `Uint16Array`, `Uint32Array`,\n - `Map`, `Set`, `WeakMap`, `WeakSet`\n - `Object`\n- [Blazingly fast](https://gist.github.com/thejameskyle/2b04ffe4941aafa8f970de077843a8fd)\n - similar performance to `JSON.stringify` in v8\n - significantly faster than `util.format` in Node.js\n- Serialize application-specific data types with built-in or user-defined plugins\n\n## Installation\n\n```sh\n$ yarn add pretty-format\n```\n\n## Usage\n\n```js\nconst prettyFormat = require('pretty-format'); // CommonJS\n```\n\n```js\nimport prettyFormat from 'pretty-format'; // ES2015 modules\n```\n\n```js\nconst val = {object: {}};\nval.circularReference = val;\nval[Symbol('foo')] = 'foo';\nval.map = new Map([['prop', 'value']]);\nval.array = [-0, Infinity, NaN];\n\nconsole.log(prettyFormat(val));\n/*\nObject {\n \"array\": Array [\n -0,\n Infinity,\n NaN,\n ],\n \"circularReference\": [Circular],\n \"map\": Map {\n \"prop\" => \"value\",\n },\n \"object\": Object {},\n Symbol(foo): \"foo\",\n}\n*/\n```\n\n## Usage with options\n\n```js\nfunction onClick() {}\n\nconsole.log(prettyFormat(onClick));\n/*\n[Function onClick]\n*/\n\nconst options = {\n printFunctionName: false,\n};\nconsole.log(prettyFormat(onClick, options));\n/*\n[Function]\n*/\n```\n\n| key | type | default | description |\n| :------------------ | :-------- | :--------- | :------------------------------------------------------ |\n| `callToJSON` | `boolean` | `true` | call `toJSON` method (if it exists) on objects |\n| `escapeRegex` | `boolean` | `false` | escape special characters in regular expressions |\n| `escapeString` | `boolean` | `true` | escape special characters in strings |\n| `highlight` | `boolean` | `false` | highlight syntax with colors in terminal (some plugins) |\n| `indent` | `number` | `2` | spaces in each level of indentation |\n| `maxDepth` | `number` | `Infinity` | levels to print in arrays, objects, elements, and so on |\n| `min` | `boolean` | `false` | minimize added space: no indentation nor line breaks |\n| `plugins` | `array` | `[]` | plugins to serialize application-specific data types |\n| `printFunctionName` | `boolean` | `true` | include or omit the name of a function |\n| `theme` | `object` | | colors to highlight syntax in terminal |\n\nProperty values of `theme` are from [ansi-styles colors](https://github.com/chalk/ansi-styles#colors)\n\n```js\nconst DEFAULT_THEME = {\n comment: 'gray',\n content: 'reset',\n prop: 'yellow',\n tag: 'cyan',\n value: 'green',\n};\n```\n\n## Usage with plugins\n\nThe `pretty-format` package provides some built-in plugins, including:\n\n- `ReactElement` for elements from `react`\n- `ReactTestComponent` for test objects from `react-test-renderer`\n\n```js\n// CommonJS\nconst prettyFormat = require('pretty-format');\nconst ReactElement = prettyFormat.plugins.ReactElement;\nconst ReactTestComponent = prettyFormat.plugins.ReactTestComponent;\n\nconst React = require('react');\nconst renderer = require('react-test-renderer');\n```\n\n```js\n// ES2015 modules and destructuring assignment\nimport prettyFormat from 'pretty-format';\nconst {ReactElement, ReactTestComponent} = prettyFormat.plugins;\n\nimport React from 'react';\nimport renderer from 'react-test-renderer';\n```\n\n```js\nconst onClick = () => {};\nconst element = React.createElement('button', {onClick}, 'Hello World');\n\nconst formatted1 = prettyFormat(element, {\n plugins: [ReactElement],\n printFunctionName: false,\n});\nconst formatted2 = prettyFormat(renderer.create(element).toJSON(), {\n plugins: [ReactTestComponent],\n printFunctionName: false,\n});\n/*\n\n*/\n```\n\n## Usage in Jest\n\nFor snapshot tests, Jest uses `pretty-format` with options that include some of its built-in plugins. For this purpose, plugins are also known as **snapshot serializers**.\n\nTo serialize application-specific data types, you can add modules to `devDependencies` of a project, and then:\n\nIn an **individual** test file, you can add a module as follows. It precedes any modules from Jest configuration.\n\n```js\nimport serializer from 'my-serializer-module';\nexpect.addSnapshotSerializer(serializer);\n\n// tests which have `expect(value).toMatchSnapshot()` assertions\n```\n\nFor **all** test files, you can specify modules in Jest configuration. They precede built-in plugins for React, HTML, and Immutable.js data types. For example, in a `package.json` file:\n\n```json\n{\n \"jest\": {\n \"snapshotSerializers\": [\"my-serializer-module\"]\n }\n}\n```\n\n## Writing plugins\n\nA plugin is a JavaScript object.\n\nIf `options` has a `plugins` array: for the first plugin whose `test(val)` method returns a truthy value, then `prettyFormat(val, options)` returns the result from either:\n\n- `serialize(val, …)` method of the **improved** interface (available in **version 21** or later)\n- `print(val, …)` method of the **original** interface (if plugin does not have `serialize` method)\n\n### test\n\nWrite `test` so it can receive `val` argument of any type. To serialize **objects** which have certain properties, then a guarded expression like `val != null && …` or more concise `val && …` prevents the following errors:\n\n- `TypeError: Cannot read property 'whatever' of null`\n- `TypeError: Cannot read property 'whatever' of undefined`\n\nFor example, `test` method of built-in `ReactElement` plugin:\n\n```js\nconst elementSymbol = Symbol.for('react.element');\nconst test = val => val && val.$$typeof === elementSymbol;\n```\n\nPay attention to efficiency in `test` because `pretty-format` calls it often.\n\n### serialize\n\nThe **improved** interface is available in **version 21** or later.\n\nWrite `serialize` to return a string, given the arguments:\n\n- `val` which “passed the test”\n- unchanging `config` object: derived from `options`\n- current `indentation` string: concatenate to `indent` from `config`\n- current `depth` number: compare to `maxDepth` from `config`\n- current `refs` array: find circular references in objects\n- `printer` callback function: serialize children\n\n### config\n\n| key | type | description |\n| :------------------ | :-------- | :------------------------------------------------------ |\n| `callToJSON` | `boolean` | call `toJSON` method (if it exists) on objects |\n| `colors` | `Object` | escape codes for colors to highlight syntax |\n| `escapeRegex` | `boolean` | escape special characters in regular expressions |\n| `escapeString` | `boolean` | escape special characters in strings |\n| `indent` | `string` | spaces in each level of indentation |\n| `maxDepth` | `number` | levels to print in arrays, objects, elements, and so on |\n| `min` | `boolean` | minimize added space: no indentation nor line breaks |\n| `plugins` | `array` | plugins to serialize application-specific data types |\n| `printFunctionName` | `boolean` | include or omit the name of a function |\n| `spacingInner` | `strong` | spacing to separate items in a list |\n| `spacingOuter` | `strong` | spacing to enclose a list of items |\n\nEach property of `colors` in `config` corresponds to a property of `theme` in `options`:\n\n- the key is the same (for example, `tag`)\n- the value in `colors` is a object with `open` and `close` properties whose values are escape codes from [ansi-styles](https://github.com/chalk/ansi-styles) for the color value in `theme` (for example, `'cyan'`)\n\nSome properties in `config` are derived from `min` in `options`:\n\n- `spacingInner` and `spacingOuter` are **newline** if `min` is `false`\n- `spacingInner` is **space** and `spacingOuter` is **empty string** if `min` is `true`\n\n### Example of serialize and test\n\nThis plugin is a pattern you can apply to serialize composite data types. Of course, `pretty-format` does not need a plugin to serialize arrays :)\n\n```js\n// We reused more code when we factored out a function for child items\n// that is independent of depth, name, and enclosing punctuation (see below).\nconst SEPARATOR = ',';\nfunction serializeItems(items, config, indentation, depth, refs, printer) {\n if (items.length === 0) {\n return '';\n }\n const indentationItems = indentation + config.indent;\n return (\n config.spacingOuter +\n items\n .map(\n item =>\n indentationItems +\n printer(item, config, indentationItems, depth, refs), // callback\n )\n .join(SEPARATOR + config.spacingInner) +\n (config.min ? '' : SEPARATOR) + // following the last item\n config.spacingOuter +\n indentation\n );\n}\n\nconst plugin = {\n test(val) {\n return Array.isArray(val);\n },\n serialize(array, config, indentation, depth, refs, printer) {\n const name = array.constructor.name;\n return ++depth > config.maxDepth\n ? '[' + name + ']'\n : (config.min ? '' : name + ' ') +\n '[' +\n serializeItems(array, config, indentation, depth, refs, printer) +\n ']';\n },\n};\n```\n\n```js\nconst val = {\n filter: 'completed',\n items: [\n {\n text: 'Write test',\n completed: true,\n },\n {\n text: 'Write serialize',\n completed: true,\n },\n ],\n};\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n plugins: [plugin],\n }),\n);\n/*\nObject {\n \"filter\": \"completed\",\n \"items\": Array [\n Object {\n \"completed\": true,\n \"text\": \"Write test\",\n },\n Object {\n \"completed\": true,\n \"text\": \"Write serialize\",\n },\n ],\n}\n*/\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n indent: 4,\n plugins: [plugin],\n }),\n);\n/*\nObject {\n \"filter\": \"completed\",\n \"items\": Array [\n Object {\n \"completed\": true,\n \"text\": \"Write test\",\n },\n Object {\n \"completed\": true,\n \"text\": \"Write serialize\",\n },\n ],\n}\n*/\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n maxDepth: 1,\n plugins: [plugin],\n }),\n);\n/*\nObject {\n \"filter\": \"completed\",\n \"items\": [Array],\n}\n*/\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n min: true,\n plugins: [plugin],\n }),\n);\n/*\n{\"filter\": \"completed\", \"items\": [{\"completed\": true, \"text\": \"Write test\"}, {\"completed\": true, \"text\": \"Write serialize\"}]}\n*/\n```\n\n### print\n\nThe **original** interface is adequate for plugins:\n\n- that **do not** depend on options other than `highlight` or `min`\n- that **do not** depend on `depth` or `refs` in recursive traversal, and\n- if values either\n - do **not** require indentation, or\n - do **not** occur as children of JavaScript data structures (for example, array)\n\nWrite `print` to return a string, given the arguments:\n\n- `val` which “passed the test”\n- current `printer(valChild)` callback function: serialize children\n- current `indenter(lines)` callback function: indent lines at the next level\n- unchanging `config` object: derived from `options`\n- unchanging `colors` object: derived from `options`\n\nThe 3 properties of `config` are `min` in `options` and:\n\n- `spacing` and `edgeSpacing` are **newline** if `min` is `false`\n- `spacing` is **space** and `edgeSpacing` is **empty string** if `min` is `true`\n\nEach property of `colors` corresponds to a property of `theme` in `options`:\n\n- the key is the same (for example, `tag`)\n- the value in `colors` is a object with `open` and `close` properties whose values are escape codes from [ansi-styles](https://github.com/chalk/ansi-styles) for the color value in `theme` (for example, `'cyan'`)\n\n### Example of print and test\n\nThis plugin prints functions with the **number of named arguments** excluding rest argument.\n\n```js\nconst plugin = {\n print(val) {\n return `[Function ${val.name || 'anonymous'} ${val.length}]`;\n },\n test(val) {\n return typeof val === 'function';\n },\n};\n```\n\n```js\nconst val = {\n onClick(event) {},\n render() {},\n};\n\nprettyFormat(val, {\n plugins: [plugin],\n});\n/*\nObject {\n \"onClick\": [Function onClick 1],\n \"render\": [Function render 0],\n}\n*/\n\nprettyFormat(val);\n/*\nObject {\n \"onClick\": [Function onClick],\n \"render\": [Function render],\n}\n*/\n```\n\nThis plugin **ignores** the `printFunctionName` option. That limitation of the original `print` interface is a reason to use the improved `serialize` interface, described above.\n\n```js\nprettyFormat(val, {\n plugins: [pluginOld],\n printFunctionName: false,\n});\n/*\nObject {\n \"onClick\": [Function onClick 1],\n \"render\": [Function render 0],\n}\n*/\n\nprettyFormat(val, {\n printFunctionName: false,\n});\n/*\nObject {\n \"onClick\": [Function],\n \"render\": [Function],\n}\n*/\n```\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/facebook/jest/issues"},"homepage":"https://github.com/facebook/jest#readme","_id":"pretty-format@24.0.0-alpha.9","_npmVersion":"5.6.0","_nodeVersion":"8.11.3","_npmUser":{"name":"rubennorte","email":"rubennorte@gmail.com"},"dist":{"integrity":"sha512-FQTU33XZI4pRHb6JlLrgLEHyAA4sVWneyc8IbLq9s+VSpUEg3kEvOl5GutMbsP/lFVxXbWBkyhvGZKl3YWi6yA==","shasum":"d01a940d5c9a8bd38315f2dd3dc971df8547b172","tarball":"http://localhost:4545/npm/registry/pretty-format/pretty-format-24.0.0-alpha.9.tgz","fileCount":17,"unpackedSize":392262,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcGlT2CRA9TVsSAnZWagAAoCsP/jBhkdk6sUyLDZUCQQvd\ntuuTqWm0EDkLZKuYMcGTn+xjNLuuLfjwExOk4RBzsYt0W6dpcI/0t+NKbduN\nuZkoJBwbgFkeiIpzMSmnWUVwChb8CAOb3V+XWoxpOEi7oCivvirwwt+kNAGz\nYkFVqsz2vEOL22+xAHyyNrWbGKCatVbc+a56YGG0lFUSc35+Vq+8fhzeffGU\nzZQUytRZrKG85Azbq43G6zB40RDTq2rloJNAQDdbe+e+TxYMmhhtEtof5Kue\nXBTLpHgBFGWklhYtmA84ApWIqqhYb0AT2vF9ROGHHEvjToGAIQNpRcRNq5IF\nZGyq9wYOj2T+LuU1KEgGN7Gx9H6b2oSYlRW7jhuhxrIGFyJ4MyC9P+lCpotO\nJ3U8Aei8paBoSTEQ8W8KI+6+sbuvnZwPipkBcS/8yhxYqm+H9Y9M5SYFK/U7\n3nJv992OPD6IEf5hsSHmyr05S2Zaku5ClftmqnlATq3kcyJDbGgN+a/iI5av\nNb4OgUolFxV8VUEHv0kEgCUceFIZ/zq9jNfM0LlA57QgSKxoYWIjiSdBDrIp\nNx8KNNbBtonW5XE8NQlXor+oLJEV3HCoPlP+zPEozLWlgsnlhIaFUa23N8N2\nq6sQf/XbXz+vpSr5QjYLGpk20VQpuBB4v8clRSJVvqrxnBP6W9LPMI1/nhqR\nHqJk\r\n=EjML\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCwSSFbn7RCS5+uNaslZsMa0h6Yq++ULA9DmgUxUJK2zQIgfpFNNLyvvFXrSvOe6rgGQULmphlpOF4H6n2j8zrDkuc="}]},"maintainers":[{"email":"aaron@abramov.io","name":"aaronabramov"},{"email":"christoph.pojer@gmail.com","name":"cpojer"},{"email":"opensource+npm@fb.com","name":"fb"},{"email":"jean@lauliac.com","name":"jeanlauliac"},{"email":"mjesun@hotmail.com","name":"mjesun"},{"email":"rubennorte@gmail.com","name":"rubennorte"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pretty-format_24.0.0-alpha.9_1545229558375_0.622054766681222"},"_hasShrinkwrap":false},"24.0.0-alpha.10":{"name":"pretty-format","version":"24.0.0-alpha.10","repository":{"type":"git","url":"git+https://github.com/facebook/jest.git"},"license":"MIT","description":"Stringify any JavaScript value.","main":"build/index.js","browser":"build-es5/index.js","author":{"name":"James Kyle","email":"me@thejameskyle.com"},"dependencies":{"ansi-regex":"^4.0.0","ansi-styles":"^3.2.0"},"devDependencies":{"immutable":"4.0.0-rc.9","react":"*","react-dom":"*","react-test-renderer":"*"},"engines":{"node":">= 6"},"gitHead":"722049ccd66947d48296dcb666bc99fccab86065","readme":"# pretty-format\n\n> Stringify any JavaScript value.\n\n- Supports all built-in JavaScript types\n - primitive types: `Boolean`, `null`, `Number`, `String`, `Symbol`, `undefined`\n - other non-collection types: `Date`, `Error`, `Function`, `RegExp`\n - collection types:\n - `arguments`, `Array`, `ArrayBuffer`, `DataView`, `Float32Array`, `Float64Array`, `Int8Array`, `Int16Array`, `Int32Array`, `Uint8Array`, `Uint8ClampedArray`, `Uint16Array`, `Uint32Array`,\n - `Map`, `Set`, `WeakMap`, `WeakSet`\n - `Object`\n- [Blazingly fast](https://gist.github.com/thejameskyle/2b04ffe4941aafa8f970de077843a8fd)\n - similar performance to `JSON.stringify` in v8\n - significantly faster than `util.format` in Node.js\n- Serialize application-specific data types with built-in or user-defined plugins\n\n## Installation\n\n```sh\n$ yarn add pretty-format\n```\n\n## Usage\n\n```js\nconst prettyFormat = require('pretty-format'); // CommonJS\n```\n\n```js\nimport prettyFormat from 'pretty-format'; // ES2015 modules\n```\n\n```js\nconst val = {object: {}};\nval.circularReference = val;\nval[Symbol('foo')] = 'foo';\nval.map = new Map([['prop', 'value']]);\nval.array = [-0, Infinity, NaN];\n\nconsole.log(prettyFormat(val));\n/*\nObject {\n \"array\": Array [\n -0,\n Infinity,\n NaN,\n ],\n \"circularReference\": [Circular],\n \"map\": Map {\n \"prop\" => \"value\",\n },\n \"object\": Object {},\n Symbol(foo): \"foo\",\n}\n*/\n```\n\n## Usage with options\n\n```js\nfunction onClick() {}\n\nconsole.log(prettyFormat(onClick));\n/*\n[Function onClick]\n*/\n\nconst options = {\n printFunctionName: false,\n};\nconsole.log(prettyFormat(onClick, options));\n/*\n[Function]\n*/\n```\n\n| key | type | default | description |\n| :------------------ | :-------- | :--------- | :------------------------------------------------------ |\n| `callToJSON` | `boolean` | `true` | call `toJSON` method (if it exists) on objects |\n| `escapeRegex` | `boolean` | `false` | escape special characters in regular expressions |\n| `escapeString` | `boolean` | `true` | escape special characters in strings |\n| `highlight` | `boolean` | `false` | highlight syntax with colors in terminal (some plugins) |\n| `indent` | `number` | `2` | spaces in each level of indentation |\n| `maxDepth` | `number` | `Infinity` | levels to print in arrays, objects, elements, and so on |\n| `min` | `boolean` | `false` | minimize added space: no indentation nor line breaks |\n| `plugins` | `array` | `[]` | plugins to serialize application-specific data types |\n| `printFunctionName` | `boolean` | `true` | include or omit the name of a function |\n| `theme` | `object` | | colors to highlight syntax in terminal |\n\nProperty values of `theme` are from [ansi-styles colors](https://github.com/chalk/ansi-styles#colors)\n\n```js\nconst DEFAULT_THEME = {\n comment: 'gray',\n content: 'reset',\n prop: 'yellow',\n tag: 'cyan',\n value: 'green',\n};\n```\n\n## Usage with plugins\n\nThe `pretty-format` package provides some built-in plugins, including:\n\n- `ReactElement` for elements from `react`\n- `ReactTestComponent` for test objects from `react-test-renderer`\n\n```js\n// CommonJS\nconst prettyFormat = require('pretty-format');\nconst ReactElement = prettyFormat.plugins.ReactElement;\nconst ReactTestComponent = prettyFormat.plugins.ReactTestComponent;\n\nconst React = require('react');\nconst renderer = require('react-test-renderer');\n```\n\n```js\n// ES2015 modules and destructuring assignment\nimport prettyFormat from 'pretty-format';\nconst {ReactElement, ReactTestComponent} = prettyFormat.plugins;\n\nimport React from 'react';\nimport renderer from 'react-test-renderer';\n```\n\n```js\nconst onClick = () => {};\nconst element = React.createElement('button', {onClick}, 'Hello World');\n\nconst formatted1 = prettyFormat(element, {\n plugins: [ReactElement],\n printFunctionName: false,\n});\nconst formatted2 = prettyFormat(renderer.create(element).toJSON(), {\n plugins: [ReactTestComponent],\n printFunctionName: false,\n});\n/*\n\n*/\n```\n\n## Usage in Jest\n\nFor snapshot tests, Jest uses `pretty-format` with options that include some of its built-in plugins. For this purpose, plugins are also known as **snapshot serializers**.\n\nTo serialize application-specific data types, you can add modules to `devDependencies` of a project, and then:\n\nIn an **individual** test file, you can add a module as follows. It precedes any modules from Jest configuration.\n\n```js\nimport serializer from 'my-serializer-module';\nexpect.addSnapshotSerializer(serializer);\n\n// tests which have `expect(value).toMatchSnapshot()` assertions\n```\n\nFor **all** test files, you can specify modules in Jest configuration. They precede built-in plugins for React, HTML, and Immutable.js data types. For example, in a `package.json` file:\n\n```json\n{\n \"jest\": {\n \"snapshotSerializers\": [\"my-serializer-module\"]\n }\n}\n```\n\n## Writing plugins\n\nA plugin is a JavaScript object.\n\nIf `options` has a `plugins` array: for the first plugin whose `test(val)` method returns a truthy value, then `prettyFormat(val, options)` returns the result from either:\n\n- `serialize(val, …)` method of the **improved** interface (available in **version 21** or later)\n- `print(val, …)` method of the **original** interface (if plugin does not have `serialize` method)\n\n### test\n\nWrite `test` so it can receive `val` argument of any type. To serialize **objects** which have certain properties, then a guarded expression like `val != null && …` or more concise `val && …` prevents the following errors:\n\n- `TypeError: Cannot read property 'whatever' of null`\n- `TypeError: Cannot read property 'whatever' of undefined`\n\nFor example, `test` method of built-in `ReactElement` plugin:\n\n```js\nconst elementSymbol = Symbol.for('react.element');\nconst test = val => val && val.$$typeof === elementSymbol;\n```\n\nPay attention to efficiency in `test` because `pretty-format` calls it often.\n\n### serialize\n\nThe **improved** interface is available in **version 21** or later.\n\nWrite `serialize` to return a string, given the arguments:\n\n- `val` which “passed the test”\n- unchanging `config` object: derived from `options`\n- current `indentation` string: concatenate to `indent` from `config`\n- current `depth` number: compare to `maxDepth` from `config`\n- current `refs` array: find circular references in objects\n- `printer` callback function: serialize children\n\n### config\n\n| key | type | description |\n| :------------------ | :-------- | :------------------------------------------------------ |\n| `callToJSON` | `boolean` | call `toJSON` method (if it exists) on objects |\n| `colors` | `Object` | escape codes for colors to highlight syntax |\n| `escapeRegex` | `boolean` | escape special characters in regular expressions |\n| `escapeString` | `boolean` | escape special characters in strings |\n| `indent` | `string` | spaces in each level of indentation |\n| `maxDepth` | `number` | levels to print in arrays, objects, elements, and so on |\n| `min` | `boolean` | minimize added space: no indentation nor line breaks |\n| `plugins` | `array` | plugins to serialize application-specific data types |\n| `printFunctionName` | `boolean` | include or omit the name of a function |\n| `spacingInner` | `strong` | spacing to separate items in a list |\n| `spacingOuter` | `strong` | spacing to enclose a list of items |\n\nEach property of `colors` in `config` corresponds to a property of `theme` in `options`:\n\n- the key is the same (for example, `tag`)\n- the value in `colors` is a object with `open` and `close` properties whose values are escape codes from [ansi-styles](https://github.com/chalk/ansi-styles) for the color value in `theme` (for example, `'cyan'`)\n\nSome properties in `config` are derived from `min` in `options`:\n\n- `spacingInner` and `spacingOuter` are **newline** if `min` is `false`\n- `spacingInner` is **space** and `spacingOuter` is **empty string** if `min` is `true`\n\n### Example of serialize and test\n\nThis plugin is a pattern you can apply to serialize composite data types. Of course, `pretty-format` does not need a plugin to serialize arrays :)\n\n```js\n// We reused more code when we factored out a function for child items\n// that is independent of depth, name, and enclosing punctuation (see below).\nconst SEPARATOR = ',';\nfunction serializeItems(items, config, indentation, depth, refs, printer) {\n if (items.length === 0) {\n return '';\n }\n const indentationItems = indentation + config.indent;\n return (\n config.spacingOuter +\n items\n .map(\n item =>\n indentationItems +\n printer(item, config, indentationItems, depth, refs), // callback\n )\n .join(SEPARATOR + config.spacingInner) +\n (config.min ? '' : SEPARATOR) + // following the last item\n config.spacingOuter +\n indentation\n );\n}\n\nconst plugin = {\n test(val) {\n return Array.isArray(val);\n },\n serialize(array, config, indentation, depth, refs, printer) {\n const name = array.constructor.name;\n return ++depth > config.maxDepth\n ? '[' + name + ']'\n : (config.min ? '' : name + ' ') +\n '[' +\n serializeItems(array, config, indentation, depth, refs, printer) +\n ']';\n },\n};\n```\n\n```js\nconst val = {\n filter: 'completed',\n items: [\n {\n text: 'Write test',\n completed: true,\n },\n {\n text: 'Write serialize',\n completed: true,\n },\n ],\n};\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n plugins: [plugin],\n }),\n);\n/*\nObject {\n \"filter\": \"completed\",\n \"items\": Array [\n Object {\n \"completed\": true,\n \"text\": \"Write test\",\n },\n Object {\n \"completed\": true,\n \"text\": \"Write serialize\",\n },\n ],\n}\n*/\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n indent: 4,\n plugins: [plugin],\n }),\n);\n/*\nObject {\n \"filter\": \"completed\",\n \"items\": Array [\n Object {\n \"completed\": true,\n \"text\": \"Write test\",\n },\n Object {\n \"completed\": true,\n \"text\": \"Write serialize\",\n },\n ],\n}\n*/\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n maxDepth: 1,\n plugins: [plugin],\n }),\n);\n/*\nObject {\n \"filter\": \"completed\",\n \"items\": [Array],\n}\n*/\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n min: true,\n plugins: [plugin],\n }),\n);\n/*\n{\"filter\": \"completed\", \"items\": [{\"completed\": true, \"text\": \"Write test\"}, {\"completed\": true, \"text\": \"Write serialize\"}]}\n*/\n```\n\n### print\n\nThe **original** interface is adequate for plugins:\n\n- that **do not** depend on options other than `highlight` or `min`\n- that **do not** depend on `depth` or `refs` in recursive traversal, and\n- if values either\n - do **not** require indentation, or\n - do **not** occur as children of JavaScript data structures (for example, array)\n\nWrite `print` to return a string, given the arguments:\n\n- `val` which “passed the test”\n- current `printer(valChild)` callback function: serialize children\n- current `indenter(lines)` callback function: indent lines at the next level\n- unchanging `config` object: derived from `options`\n- unchanging `colors` object: derived from `options`\n\nThe 3 properties of `config` are `min` in `options` and:\n\n- `spacing` and `edgeSpacing` are **newline** if `min` is `false`\n- `spacing` is **space** and `edgeSpacing` is **empty string** if `min` is `true`\n\nEach property of `colors` corresponds to a property of `theme` in `options`:\n\n- the key is the same (for example, `tag`)\n- the value in `colors` is a object with `open` and `close` properties whose values are escape codes from [ansi-styles](https://github.com/chalk/ansi-styles) for the color value in `theme` (for example, `'cyan'`)\n\n### Example of print and test\n\nThis plugin prints functions with the **number of named arguments** excluding rest argument.\n\n```js\nconst plugin = {\n print(val) {\n return `[Function ${val.name || 'anonymous'} ${val.length}]`;\n },\n test(val) {\n return typeof val === 'function';\n },\n};\n```\n\n```js\nconst val = {\n onClick(event) {},\n render() {},\n};\n\nprettyFormat(val, {\n plugins: [plugin],\n});\n/*\nObject {\n \"onClick\": [Function onClick 1],\n \"render\": [Function render 0],\n}\n*/\n\nprettyFormat(val);\n/*\nObject {\n \"onClick\": [Function onClick],\n \"render\": [Function render],\n}\n*/\n```\n\nThis plugin **ignores** the `printFunctionName` option. That limitation of the original `print` interface is a reason to use the improved `serialize` interface, described above.\n\n```js\nprettyFormat(val, {\n plugins: [pluginOld],\n printFunctionName: false,\n});\n/*\nObject {\n \"onClick\": [Function onClick 1],\n \"render\": [Function render 0],\n}\n*/\n\nprettyFormat(val, {\n printFunctionName: false,\n});\n/*\nObject {\n \"onClick\": [Function],\n \"render\": [Function],\n}\n*/\n```\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/facebook/jest/issues"},"homepage":"https://github.com/facebook/jest#readme","_id":"pretty-format@24.0.0-alpha.10","_npmVersion":"5.6.0","_nodeVersion":"8.11.3","_npmUser":{"name":"rubennorte","email":"rubennorte@gmail.com"},"dist":{"integrity":"sha512-yIn+Bzkggxxboxhk655bjfI98x58fNk0NKllCjYVFZ1wmGWZ5G8w0Sfzt1pUKzFA2uFnOEccdX7+AB3IPZ9fzw==","shasum":"9e6b234714171b275148e36ad6524c8b6ab984b5","tarball":"http://localhost:4545/npm/registry/pretty-format/pretty-format-24.0.0-alpha.10.tgz","fileCount":17,"unpackedSize":392238,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcNimfCRA9TVsSAnZWagAAKY0QAJ54VHFjcYFQF/bfSdnB\npNQrWnn2iYm1sDQ2GjstIqaZKI502wUdfDBBbxJYUv2cDGgYpQBGZV873EsQ\nejks6Oi9vnfWzcA+IFZiLkGf8erA/XmKz1ivSzzqXESiMoRaabpR75ZJb1uG\ng8A0DFG517QvYklJ2aXv1Y50gSpm1MNJA48qi0eGvm0WMJex3oGdcHklMDpv\nrmxgSV4TrwkKxtU/T18OqArnHdQOKKPPhx9ysErS1hRDOiGoQR4J56I5j9+C\nGD2TmUkUyRQ3b1zJ3iMFX6cb632zO9eNO1lFcfaUllAiid7SqcyLIs0FD5d0\nvUkpSa8v50jBX6RRWz8q1eKSGchDCvx/xwZriq7X7yXK3ZLyic1f68l2zlXq\njO9fjkOfr9NZgXRGCgbj1FIiiJTsqBuVdzygrLma/tDePwrSs5XRirr3PA3/\nRT2wR9gOwXr+9vVmi6fR65P02YDJIzEDxHULaA8INIqXaOGkvdyrHv6Y4wH0\nQFpqctNskpKPm6hfSI+HD34sDJByYCzCF4pe7yP+7mptDICPP1zl3G1cK8wF\nMzmS/DC446P6bmWAc43Ru60VK0fUK2U/2WwQzL6ceGzt6Nac6SPQQ1dibot7\nO9bOTWNSio/cV7Z50BtTJxADa1Vcrt7OsckZVXy790j1HeleYLLoqvjzpFeC\ni/k3\r\n=XD2q\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD3v3usg0BfM0Cf95trDPUSG8X5ObbKR7pt2ggwREQ18QIhAK91F7D42X4VfKlE7vB0sR1ubXVkaeTc0ZVlsBfptfhD"}]},"maintainers":[{"email":"aaron@abramov.io","name":"aaronabramov"},{"email":"christoph.pojer@gmail.com","name":"cpojer"},{"email":"opensource+npm@fb.com","name":"fb"},{"email":"jean@lauliac.com","name":"jeanlauliac"},{"email":"mjesun@hotmail.com","name":"mjesun"},{"email":"rubennorte@gmail.com","name":"rubennorte"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pretty-format_24.0.0-alpha.10_1547053470936_0.439009740803185"},"_hasShrinkwrap":false},"24.0.0-alpha.11":{"name":"pretty-format","version":"24.0.0-alpha.11","repository":{"type":"git","url":"git+https://github.com/facebook/jest.git"},"license":"MIT","description":"Stringify any JavaScript value.","main":"build/index.js","browser":"build-es5/index.js","author":{"name":"James Kyle","email":"me@thejameskyle.com"},"dependencies":{"ansi-regex":"^4.0.0","ansi-styles":"^3.2.0"},"devDependencies":{"immutable":"4.0.0-rc.9","react":"*","react-dom":"*","react-test-renderer":"*"},"engines":{"node":">= 6"},"gitHead":"6a066c6afe2ae08669a27d3b703a6cf0d898e7b7","readme":"# pretty-format\n\n> Stringify any JavaScript value.\n\n- Supports all built-in JavaScript types\n - primitive types: `Boolean`, `null`, `Number`, `String`, `Symbol`, `undefined`\n - other non-collection types: `Date`, `Error`, `Function`, `RegExp`\n - collection types:\n - `arguments`, `Array`, `ArrayBuffer`, `DataView`, `Float32Array`, `Float64Array`, `Int8Array`, `Int16Array`, `Int32Array`, `Uint8Array`, `Uint8ClampedArray`, `Uint16Array`, `Uint32Array`,\n - `Map`, `Set`, `WeakMap`, `WeakSet`\n - `Object`\n- [Blazingly fast](https://gist.github.com/thejameskyle/2b04ffe4941aafa8f970de077843a8fd)\n - similar performance to `JSON.stringify` in v8\n - significantly faster than `util.format` in Node.js\n- Serialize application-specific data types with built-in or user-defined plugins\n\n## Installation\n\n```sh\n$ yarn add pretty-format\n```\n\n## Usage\n\n```js\nconst prettyFormat = require('pretty-format'); // CommonJS\n```\n\n```js\nimport prettyFormat from 'pretty-format'; // ES2015 modules\n```\n\n```js\nconst val = {object: {}};\nval.circularReference = val;\nval[Symbol('foo')] = 'foo';\nval.map = new Map([['prop', 'value']]);\nval.array = [-0, Infinity, NaN];\n\nconsole.log(prettyFormat(val));\n/*\nObject {\n \"array\": Array [\n -0,\n Infinity,\n NaN,\n ],\n \"circularReference\": [Circular],\n \"map\": Map {\n \"prop\" => \"value\",\n },\n \"object\": Object {},\n Symbol(foo): \"foo\",\n}\n*/\n```\n\n## Usage with options\n\n```js\nfunction onClick() {}\n\nconsole.log(prettyFormat(onClick));\n/*\n[Function onClick]\n*/\n\nconst options = {\n printFunctionName: false,\n};\nconsole.log(prettyFormat(onClick, options));\n/*\n[Function]\n*/\n```\n\n| key | type | default | description |\n| :------------------ | :-------- | :--------- | :------------------------------------------------------ |\n| `callToJSON` | `boolean` | `true` | call `toJSON` method (if it exists) on objects |\n| `escapeRegex` | `boolean` | `false` | escape special characters in regular expressions |\n| `escapeString` | `boolean` | `true` | escape special characters in strings |\n| `highlight` | `boolean` | `false` | highlight syntax with colors in terminal (some plugins) |\n| `indent` | `number` | `2` | spaces in each level of indentation |\n| `maxDepth` | `number` | `Infinity` | levels to print in arrays, objects, elements, and so on |\n| `min` | `boolean` | `false` | minimize added space: no indentation nor line breaks |\n| `plugins` | `array` | `[]` | plugins to serialize application-specific data types |\n| `printFunctionName` | `boolean` | `true` | include or omit the name of a function |\n| `theme` | `object` | | colors to highlight syntax in terminal |\n\nProperty values of `theme` are from [ansi-styles colors](https://github.com/chalk/ansi-styles#colors)\n\n```js\nconst DEFAULT_THEME = {\n comment: 'gray',\n content: 'reset',\n prop: 'yellow',\n tag: 'cyan',\n value: 'green',\n};\n```\n\n## Usage with plugins\n\nThe `pretty-format` package provides some built-in plugins, including:\n\n- `ReactElement` for elements from `react`\n- `ReactTestComponent` for test objects from `react-test-renderer`\n\n```js\n// CommonJS\nconst prettyFormat = require('pretty-format');\nconst ReactElement = prettyFormat.plugins.ReactElement;\nconst ReactTestComponent = prettyFormat.plugins.ReactTestComponent;\n\nconst React = require('react');\nconst renderer = require('react-test-renderer');\n```\n\n```js\n// ES2015 modules and destructuring assignment\nimport prettyFormat from 'pretty-format';\nconst {ReactElement, ReactTestComponent} = prettyFormat.plugins;\n\nimport React from 'react';\nimport renderer from 'react-test-renderer';\n```\n\n```js\nconst onClick = () => {};\nconst element = React.createElement('button', {onClick}, 'Hello World');\n\nconst formatted1 = prettyFormat(element, {\n plugins: [ReactElement],\n printFunctionName: false,\n});\nconst formatted2 = prettyFormat(renderer.create(element).toJSON(), {\n plugins: [ReactTestComponent],\n printFunctionName: false,\n});\n/*\n\n*/\n```\n\n## Usage in Jest\n\nFor snapshot tests, Jest uses `pretty-format` with options that include some of its built-in plugins. For this purpose, plugins are also known as **snapshot serializers**.\n\nTo serialize application-specific data types, you can add modules to `devDependencies` of a project, and then:\n\nIn an **individual** test file, you can add a module as follows. It precedes any modules from Jest configuration.\n\n```js\nimport serializer from 'my-serializer-module';\nexpect.addSnapshotSerializer(serializer);\n\n// tests which have `expect(value).toMatchSnapshot()` assertions\n```\n\nFor **all** test files, you can specify modules in Jest configuration. They precede built-in plugins for React, HTML, and Immutable.js data types. For example, in a `package.json` file:\n\n```json\n{\n \"jest\": {\n \"snapshotSerializers\": [\"my-serializer-module\"]\n }\n}\n```\n\n## Writing plugins\n\nA plugin is a JavaScript object.\n\nIf `options` has a `plugins` array: for the first plugin whose `test(val)` method returns a truthy value, then `prettyFormat(val, options)` returns the result from either:\n\n- `serialize(val, …)` method of the **improved** interface (available in **version 21** or later)\n- `print(val, …)` method of the **original** interface (if plugin does not have `serialize` method)\n\n### test\n\nWrite `test` so it can receive `val` argument of any type. To serialize **objects** which have certain properties, then a guarded expression like `val != null && …` or more concise `val && …` prevents the following errors:\n\n- `TypeError: Cannot read property 'whatever' of null`\n- `TypeError: Cannot read property 'whatever' of undefined`\n\nFor example, `test` method of built-in `ReactElement` plugin:\n\n```js\nconst elementSymbol = Symbol.for('react.element');\nconst test = val => val && val.$$typeof === elementSymbol;\n```\n\nPay attention to efficiency in `test` because `pretty-format` calls it often.\n\n### serialize\n\nThe **improved** interface is available in **version 21** or later.\n\nWrite `serialize` to return a string, given the arguments:\n\n- `val` which “passed the test”\n- unchanging `config` object: derived from `options`\n- current `indentation` string: concatenate to `indent` from `config`\n- current `depth` number: compare to `maxDepth` from `config`\n- current `refs` array: find circular references in objects\n- `printer` callback function: serialize children\n\n### config\n\n| key | type | description |\n| :------------------ | :-------- | :------------------------------------------------------ |\n| `callToJSON` | `boolean` | call `toJSON` method (if it exists) on objects |\n| `colors` | `Object` | escape codes for colors to highlight syntax |\n| `escapeRegex` | `boolean` | escape special characters in regular expressions |\n| `escapeString` | `boolean` | escape special characters in strings |\n| `indent` | `string` | spaces in each level of indentation |\n| `maxDepth` | `number` | levels to print in arrays, objects, elements, and so on |\n| `min` | `boolean` | minimize added space: no indentation nor line breaks |\n| `plugins` | `array` | plugins to serialize application-specific data types |\n| `printFunctionName` | `boolean` | include or omit the name of a function |\n| `spacingInner` | `strong` | spacing to separate items in a list |\n| `spacingOuter` | `strong` | spacing to enclose a list of items |\n\nEach property of `colors` in `config` corresponds to a property of `theme` in `options`:\n\n- the key is the same (for example, `tag`)\n- the value in `colors` is a object with `open` and `close` properties whose values are escape codes from [ansi-styles](https://github.com/chalk/ansi-styles) for the color value in `theme` (for example, `'cyan'`)\n\nSome properties in `config` are derived from `min` in `options`:\n\n- `spacingInner` and `spacingOuter` are **newline** if `min` is `false`\n- `spacingInner` is **space** and `spacingOuter` is **empty string** if `min` is `true`\n\n### Example of serialize and test\n\nThis plugin is a pattern you can apply to serialize composite data types. Of course, `pretty-format` does not need a plugin to serialize arrays :)\n\n```js\n// We reused more code when we factored out a function for child items\n// that is independent of depth, name, and enclosing punctuation (see below).\nconst SEPARATOR = ',';\nfunction serializeItems(items, config, indentation, depth, refs, printer) {\n if (items.length === 0) {\n return '';\n }\n const indentationItems = indentation + config.indent;\n return (\n config.spacingOuter +\n items\n .map(\n item =>\n indentationItems +\n printer(item, config, indentationItems, depth, refs), // callback\n )\n .join(SEPARATOR + config.spacingInner) +\n (config.min ? '' : SEPARATOR) + // following the last item\n config.spacingOuter +\n indentation\n );\n}\n\nconst plugin = {\n test(val) {\n return Array.isArray(val);\n },\n serialize(array, config, indentation, depth, refs, printer) {\n const name = array.constructor.name;\n return ++depth > config.maxDepth\n ? '[' + name + ']'\n : (config.min ? '' : name + ' ') +\n '[' +\n serializeItems(array, config, indentation, depth, refs, printer) +\n ']';\n },\n};\n```\n\n```js\nconst val = {\n filter: 'completed',\n items: [\n {\n text: 'Write test',\n completed: true,\n },\n {\n text: 'Write serialize',\n completed: true,\n },\n ],\n};\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n plugins: [plugin],\n }),\n);\n/*\nObject {\n \"filter\": \"completed\",\n \"items\": Array [\n Object {\n \"completed\": true,\n \"text\": \"Write test\",\n },\n Object {\n \"completed\": true,\n \"text\": \"Write serialize\",\n },\n ],\n}\n*/\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n indent: 4,\n plugins: [plugin],\n }),\n);\n/*\nObject {\n \"filter\": \"completed\",\n \"items\": Array [\n Object {\n \"completed\": true,\n \"text\": \"Write test\",\n },\n Object {\n \"completed\": true,\n \"text\": \"Write serialize\",\n },\n ],\n}\n*/\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n maxDepth: 1,\n plugins: [plugin],\n }),\n);\n/*\nObject {\n \"filter\": \"completed\",\n \"items\": [Array],\n}\n*/\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n min: true,\n plugins: [plugin],\n }),\n);\n/*\n{\"filter\": \"completed\", \"items\": [{\"completed\": true, \"text\": \"Write test\"}, {\"completed\": true, \"text\": \"Write serialize\"}]}\n*/\n```\n\n### print\n\nThe **original** interface is adequate for plugins:\n\n- that **do not** depend on options other than `highlight` or `min`\n- that **do not** depend on `depth` or `refs` in recursive traversal, and\n- if values either\n - do **not** require indentation, or\n - do **not** occur as children of JavaScript data structures (for example, array)\n\nWrite `print` to return a string, given the arguments:\n\n- `val` which “passed the test”\n- current `printer(valChild)` callback function: serialize children\n- current `indenter(lines)` callback function: indent lines at the next level\n- unchanging `config` object: derived from `options`\n- unchanging `colors` object: derived from `options`\n\nThe 3 properties of `config` are `min` in `options` and:\n\n- `spacing` and `edgeSpacing` are **newline** if `min` is `false`\n- `spacing` is **space** and `edgeSpacing` is **empty string** if `min` is `true`\n\nEach property of `colors` corresponds to a property of `theme` in `options`:\n\n- the key is the same (for example, `tag`)\n- the value in `colors` is a object with `open` and `close` properties whose values are escape codes from [ansi-styles](https://github.com/chalk/ansi-styles) for the color value in `theme` (for example, `'cyan'`)\n\n### Example of print and test\n\nThis plugin prints functions with the **number of named arguments** excluding rest argument.\n\n```js\nconst plugin = {\n print(val) {\n return `[Function ${val.name || 'anonymous'} ${val.length}]`;\n },\n test(val) {\n return typeof val === 'function';\n },\n};\n```\n\n```js\nconst val = {\n onClick(event) {},\n render() {},\n};\n\nprettyFormat(val, {\n plugins: [plugin],\n});\n/*\nObject {\n \"onClick\": [Function onClick 1],\n \"render\": [Function render 0],\n}\n*/\n\nprettyFormat(val);\n/*\nObject {\n \"onClick\": [Function onClick],\n \"render\": [Function render],\n}\n*/\n```\n\nThis plugin **ignores** the `printFunctionName` option. That limitation of the original `print` interface is a reason to use the improved `serialize` interface, described above.\n\n```js\nprettyFormat(val, {\n plugins: [pluginOld],\n printFunctionName: false,\n});\n/*\nObject {\n \"onClick\": [Function onClick 1],\n \"render\": [Function render 0],\n}\n*/\n\nprettyFormat(val, {\n printFunctionName: false,\n});\n/*\nObject {\n \"onClick\": [Function],\n \"render\": [Function],\n}\n*/\n```\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/facebook/jest/issues"},"homepage":"https://github.com/facebook/jest#readme","_id":"pretty-format@24.0.0-alpha.11","_npmVersion":"5.6.0","_nodeVersion":"8.11.3","_npmUser":{"name":"rubennorte","email":"rubennorte@gmail.com"},"dist":{"integrity":"sha512-dTLUCLYYV9RkULKbFg2U1WFsKkkarrdFtcvqirjf9EqEEC46rII8v98YlBckZk+XL7USsipKzWULuiySdQlp0A==","shasum":"5127d0bf9f712e3c9f5cc5df5ae4a2fc46dfacaa","tarball":"http://localhost:4545/npm/registry/pretty-format/pretty-format-24.0.0-alpha.11.tgz","fileCount":17,"unpackedSize":392022,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcN5BbCRA9TVsSAnZWagAAo0wP/05Ce7KL5St4c4qM3OwB\nWt7nZv/PIPXaBKSyJOJ35hgDW08P7NhyNfIQokceYx2/tKRVu4jsEkpQTjtq\nRo7ip7pxl4QPleXApp8HGE8fkQaBpxMFq0YNSwq2vOSn/XM8Zqt0TzqeI9Qg\nptMkncUZ0gFm5GezIh1pLKNj+4WhQKDLh45XyTVeb/uM0WHvyTVRZ5ZVcOsF\nFFyMIzw3vRMGaXdeh9pOYWqrdsAN8NNC+vaBXGd4dDQdyCIobwedkgI3SW+4\nnqM07nQnkB8hZxbCUga26Nt8J6nbNJBlJtU87I7ujrPcyDNreKAY+JvcOvgm\nOjthHgm8EeB3sbHVEtPJc0jRVJrCo54vjUD3y5jRt/YTOGNcgoSTM2byTM+m\nQ/iQupksHnTI3jwV2rpxJM5Ts7L+NBIQdwdke9lD0WbI9JHK4KJFZPfhmtiJ\nrEj+CIGO4sqsg8X+gcLOJkwY9/thr4ivkNKAwHvIjdyojYDyOe2tdnkLeRyC\n4Sz4yn8NwbNEjdib6qzX2wbssBuQPoqZg6yOinbTvjcj5cwsklRLAlQ5Y0Z0\nhzZkfZhqBHCErp4p7NShQvsx/N8rmtxdIwYx+Pnvwb5LqJEFAsfehOlpUccB\n5uPtljiu/4jhaW3gd1FAwTShw82G0VTqnuIC4+kueW58LLMgwEOLiFNfNpKV\nFukj\r\n=Bm8G\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDICpNB6RgJz9VNL3G2BIb6JXkRdOkgj2LqVBhz5kF8gQIgQPb0DoE7ZdmKaXEGSvPH4u2GmSHju3ALuTAf4GdXdMw="}]},"maintainers":[{"email":"aaron@abramov.io","name":"aaronabramov"},{"email":"christoph.pojer@gmail.com","name":"cpojer"},{"email":"opensource+npm@fb.com","name":"fb"},{"email":"jean@lauliac.com","name":"jeanlauliac"},{"email":"mjesun@hotmail.com","name":"mjesun"},{"email":"rubennorte@gmail.com","name":"rubennorte"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pretty-format_24.0.0-alpha.11_1547145307057_0.6328115400351251"},"_hasShrinkwrap":false},"24.0.0-alpha.12":{"name":"pretty-format","version":"24.0.0-alpha.12","repository":{"type":"git","url":"git+https://github.com/facebook/jest.git"},"license":"MIT","description":"Stringify any JavaScript value.","main":"build/index.js","browser":"build-es5/index.js","author":{"name":"James Kyle","email":"me@thejameskyle.com"},"dependencies":{"ansi-regex":"^4.0.0","ansi-styles":"^3.2.0"},"devDependencies":{"immutable":"4.0.0-rc.9","react":"*","react-dom":"*","react-test-renderer":"*"},"engines":{"node":">= 6"},"gitHead":"4f2bcb861d1f0fb150c05970362e52a38c31f67e","readme":"# pretty-format\n\n> Stringify any JavaScript value.\n\n- Supports all built-in JavaScript types\n - primitive types: `Boolean`, `null`, `Number`, `String`, `Symbol`, `undefined`\n - other non-collection types: `Date`, `Error`, `Function`, `RegExp`\n - collection types:\n - `arguments`, `Array`, `ArrayBuffer`, `DataView`, `Float32Array`, `Float64Array`, `Int8Array`, `Int16Array`, `Int32Array`, `Uint8Array`, `Uint8ClampedArray`, `Uint16Array`, `Uint32Array`,\n - `Map`, `Set`, `WeakMap`, `WeakSet`\n - `Object`\n- [Blazingly fast](https://gist.github.com/thejameskyle/2b04ffe4941aafa8f970de077843a8fd)\n - similar performance to `JSON.stringify` in v8\n - significantly faster than `util.format` in Node.js\n- Serialize application-specific data types with built-in or user-defined plugins\n\n## Installation\n\n```sh\n$ yarn add pretty-format\n```\n\n## Usage\n\n```js\nconst prettyFormat = require('pretty-format'); // CommonJS\n```\n\n```js\nimport prettyFormat from 'pretty-format'; // ES2015 modules\n```\n\n```js\nconst val = {object: {}};\nval.circularReference = val;\nval[Symbol('foo')] = 'foo';\nval.map = new Map([['prop', 'value']]);\nval.array = [-0, Infinity, NaN];\n\nconsole.log(prettyFormat(val));\n/*\nObject {\n \"array\": Array [\n -0,\n Infinity,\n NaN,\n ],\n \"circularReference\": [Circular],\n \"map\": Map {\n \"prop\" => \"value\",\n },\n \"object\": Object {},\n Symbol(foo): \"foo\",\n}\n*/\n```\n\n## Usage with options\n\n```js\nfunction onClick() {}\n\nconsole.log(prettyFormat(onClick));\n/*\n[Function onClick]\n*/\n\nconst options = {\n printFunctionName: false,\n};\nconsole.log(prettyFormat(onClick, options));\n/*\n[Function]\n*/\n```\n\n| key | type | default | description |\n| :------------------ | :-------- | :--------- | :------------------------------------------------------ |\n| `callToJSON` | `boolean` | `true` | call `toJSON` method (if it exists) on objects |\n| `escapeRegex` | `boolean` | `false` | escape special characters in regular expressions |\n| `escapeString` | `boolean` | `true` | escape special characters in strings |\n| `highlight` | `boolean` | `false` | highlight syntax with colors in terminal (some plugins) |\n| `indent` | `number` | `2` | spaces in each level of indentation |\n| `maxDepth` | `number` | `Infinity` | levels to print in arrays, objects, elements, and so on |\n| `min` | `boolean` | `false` | minimize added space: no indentation nor line breaks |\n| `plugins` | `array` | `[]` | plugins to serialize application-specific data types |\n| `printFunctionName` | `boolean` | `true` | include or omit the name of a function |\n| `theme` | `object` | | colors to highlight syntax in terminal |\n\nProperty values of `theme` are from [ansi-styles colors](https://github.com/chalk/ansi-styles#colors)\n\n```js\nconst DEFAULT_THEME = {\n comment: 'gray',\n content: 'reset',\n prop: 'yellow',\n tag: 'cyan',\n value: 'green',\n};\n```\n\n## Usage with plugins\n\nThe `pretty-format` package provides some built-in plugins, including:\n\n- `ReactElement` for elements from `react`\n- `ReactTestComponent` for test objects from `react-test-renderer`\n\n```js\n// CommonJS\nconst prettyFormat = require('pretty-format');\nconst ReactElement = prettyFormat.plugins.ReactElement;\nconst ReactTestComponent = prettyFormat.plugins.ReactTestComponent;\n\nconst React = require('react');\nconst renderer = require('react-test-renderer');\n```\n\n```js\n// ES2015 modules and destructuring assignment\nimport prettyFormat from 'pretty-format';\nconst {ReactElement, ReactTestComponent} = prettyFormat.plugins;\n\nimport React from 'react';\nimport renderer from 'react-test-renderer';\n```\n\n```js\nconst onClick = () => {};\nconst element = React.createElement('button', {onClick}, 'Hello World');\n\nconst formatted1 = prettyFormat(element, {\n plugins: [ReactElement],\n printFunctionName: false,\n});\nconst formatted2 = prettyFormat(renderer.create(element).toJSON(), {\n plugins: [ReactTestComponent],\n printFunctionName: false,\n});\n/*\n\n*/\n```\n\n## Usage in Jest\n\nFor snapshot tests, Jest uses `pretty-format` with options that include some of its built-in plugins. For this purpose, plugins are also known as **snapshot serializers**.\n\nTo serialize application-specific data types, you can add modules to `devDependencies` of a project, and then:\n\nIn an **individual** test file, you can add a module as follows. It precedes any modules from Jest configuration.\n\n```js\nimport serializer from 'my-serializer-module';\nexpect.addSnapshotSerializer(serializer);\n\n// tests which have `expect(value).toMatchSnapshot()` assertions\n```\n\nFor **all** test files, you can specify modules in Jest configuration. They precede built-in plugins for React, HTML, and Immutable.js data types. For example, in a `package.json` file:\n\n```json\n{\n \"jest\": {\n \"snapshotSerializers\": [\"my-serializer-module\"]\n }\n}\n```\n\n## Writing plugins\n\nA plugin is a JavaScript object.\n\nIf `options` has a `plugins` array: for the first plugin whose `test(val)` method returns a truthy value, then `prettyFormat(val, options)` returns the result from either:\n\n- `serialize(val, …)` method of the **improved** interface (available in **version 21** or later)\n- `print(val, …)` method of the **original** interface (if plugin does not have `serialize` method)\n\n### test\n\nWrite `test` so it can receive `val` argument of any type. To serialize **objects** which have certain properties, then a guarded expression like `val != null && …` or more concise `val && …` prevents the following errors:\n\n- `TypeError: Cannot read property 'whatever' of null`\n- `TypeError: Cannot read property 'whatever' of undefined`\n\nFor example, `test` method of built-in `ReactElement` plugin:\n\n```js\nconst elementSymbol = Symbol.for('react.element');\nconst test = val => val && val.$$typeof === elementSymbol;\n```\n\nPay attention to efficiency in `test` because `pretty-format` calls it often.\n\n### serialize\n\nThe **improved** interface is available in **version 21** or later.\n\nWrite `serialize` to return a string, given the arguments:\n\n- `val` which “passed the test”\n- unchanging `config` object: derived from `options`\n- current `indentation` string: concatenate to `indent` from `config`\n- current `depth` number: compare to `maxDepth` from `config`\n- current `refs` array: find circular references in objects\n- `printer` callback function: serialize children\n\n### config\n\n| key | type | description |\n| :------------------ | :-------- | :------------------------------------------------------ |\n| `callToJSON` | `boolean` | call `toJSON` method (if it exists) on objects |\n| `colors` | `Object` | escape codes for colors to highlight syntax |\n| `escapeRegex` | `boolean` | escape special characters in regular expressions |\n| `escapeString` | `boolean` | escape special characters in strings |\n| `indent` | `string` | spaces in each level of indentation |\n| `maxDepth` | `number` | levels to print in arrays, objects, elements, and so on |\n| `min` | `boolean` | minimize added space: no indentation nor line breaks |\n| `plugins` | `array` | plugins to serialize application-specific data types |\n| `printFunctionName` | `boolean` | include or omit the name of a function |\n| `spacingInner` | `strong` | spacing to separate items in a list |\n| `spacingOuter` | `strong` | spacing to enclose a list of items |\n\nEach property of `colors` in `config` corresponds to a property of `theme` in `options`:\n\n- the key is the same (for example, `tag`)\n- the value in `colors` is a object with `open` and `close` properties whose values are escape codes from [ansi-styles](https://github.com/chalk/ansi-styles) for the color value in `theme` (for example, `'cyan'`)\n\nSome properties in `config` are derived from `min` in `options`:\n\n- `spacingInner` and `spacingOuter` are **newline** if `min` is `false`\n- `spacingInner` is **space** and `spacingOuter` is **empty string** if `min` is `true`\n\n### Example of serialize and test\n\nThis plugin is a pattern you can apply to serialize composite data types. Of course, `pretty-format` does not need a plugin to serialize arrays :)\n\n```js\n// We reused more code when we factored out a function for child items\n// that is independent of depth, name, and enclosing punctuation (see below).\nconst SEPARATOR = ',';\nfunction serializeItems(items, config, indentation, depth, refs, printer) {\n if (items.length === 0) {\n return '';\n }\n const indentationItems = indentation + config.indent;\n return (\n config.spacingOuter +\n items\n .map(\n item =>\n indentationItems +\n printer(item, config, indentationItems, depth, refs), // callback\n )\n .join(SEPARATOR + config.spacingInner) +\n (config.min ? '' : SEPARATOR) + // following the last item\n config.spacingOuter +\n indentation\n );\n}\n\nconst plugin = {\n test(val) {\n return Array.isArray(val);\n },\n serialize(array, config, indentation, depth, refs, printer) {\n const name = array.constructor.name;\n return ++depth > config.maxDepth\n ? '[' + name + ']'\n : (config.min ? '' : name + ' ') +\n '[' +\n serializeItems(array, config, indentation, depth, refs, printer) +\n ']';\n },\n};\n```\n\n```js\nconst val = {\n filter: 'completed',\n items: [\n {\n text: 'Write test',\n completed: true,\n },\n {\n text: 'Write serialize',\n completed: true,\n },\n ],\n};\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n plugins: [plugin],\n }),\n);\n/*\nObject {\n \"filter\": \"completed\",\n \"items\": Array [\n Object {\n \"completed\": true,\n \"text\": \"Write test\",\n },\n Object {\n \"completed\": true,\n \"text\": \"Write serialize\",\n },\n ],\n}\n*/\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n indent: 4,\n plugins: [plugin],\n }),\n);\n/*\nObject {\n \"filter\": \"completed\",\n \"items\": Array [\n Object {\n \"completed\": true,\n \"text\": \"Write test\",\n },\n Object {\n \"completed\": true,\n \"text\": \"Write serialize\",\n },\n ],\n}\n*/\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n maxDepth: 1,\n plugins: [plugin],\n }),\n);\n/*\nObject {\n \"filter\": \"completed\",\n \"items\": [Array],\n}\n*/\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n min: true,\n plugins: [plugin],\n }),\n);\n/*\n{\"filter\": \"completed\", \"items\": [{\"completed\": true, \"text\": \"Write test\"}, {\"completed\": true, \"text\": \"Write serialize\"}]}\n*/\n```\n\n### print\n\nThe **original** interface is adequate for plugins:\n\n- that **do not** depend on options other than `highlight` or `min`\n- that **do not** depend on `depth` or `refs` in recursive traversal, and\n- if values either\n - do **not** require indentation, or\n - do **not** occur as children of JavaScript data structures (for example, array)\n\nWrite `print` to return a string, given the arguments:\n\n- `val` which “passed the test”\n- current `printer(valChild)` callback function: serialize children\n- current `indenter(lines)` callback function: indent lines at the next level\n- unchanging `config` object: derived from `options`\n- unchanging `colors` object: derived from `options`\n\nThe 3 properties of `config` are `min` in `options` and:\n\n- `spacing` and `edgeSpacing` are **newline** if `min` is `false`\n- `spacing` is **space** and `edgeSpacing` is **empty string** if `min` is `true`\n\nEach property of `colors` corresponds to a property of `theme` in `options`:\n\n- the key is the same (for example, `tag`)\n- the value in `colors` is a object with `open` and `close` properties whose values are escape codes from [ansi-styles](https://github.com/chalk/ansi-styles) for the color value in `theme` (for example, `'cyan'`)\n\n### Example of print and test\n\nThis plugin prints functions with the **number of named arguments** excluding rest argument.\n\n```js\nconst plugin = {\n print(val) {\n return `[Function ${val.name || 'anonymous'} ${val.length}]`;\n },\n test(val) {\n return typeof val === 'function';\n },\n};\n```\n\n```js\nconst val = {\n onClick(event) {},\n render() {},\n};\n\nprettyFormat(val, {\n plugins: [plugin],\n});\n/*\nObject {\n \"onClick\": [Function onClick 1],\n \"render\": [Function render 0],\n}\n*/\n\nprettyFormat(val);\n/*\nObject {\n \"onClick\": [Function onClick],\n \"render\": [Function render],\n}\n*/\n```\n\nThis plugin **ignores** the `printFunctionName` option. That limitation of the original `print` interface is a reason to use the improved `serialize` interface, described above.\n\n```js\nprettyFormat(val, {\n plugins: [pluginOld],\n printFunctionName: false,\n});\n/*\nObject {\n \"onClick\": [Function onClick 1],\n \"render\": [Function render 0],\n}\n*/\n\nprettyFormat(val, {\n printFunctionName: false,\n});\n/*\nObject {\n \"onClick\": [Function],\n \"render\": [Function],\n}\n*/\n```\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/facebook/jest/issues"},"homepage":"https://github.com/facebook/jest#readme","_id":"pretty-format@24.0.0-alpha.12","_npmVersion":"5.6.0","_nodeVersion":"8.11.3","_npmUser":{"name":"rubennorte","email":"rubennorte@gmail.com"},"dist":{"integrity":"sha512-M8gO614z38RgJSbOp6J8havxGPms+wen1oVtK6Es4/GS3coTO4mxY3660/qCaWG5Mj96nl9cgshMMfPqW8dPVg==","shasum":"eb3e3ccadbe7fe823bf5604de9e123abdf9b2d35","tarball":"http://localhost:4545/npm/registry/pretty-format/pretty-format-24.0.0-alpha.12.tgz","fileCount":17,"unpackedSize":392022,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcOK+/CRA9TVsSAnZWagAAiioQAJg1fiyz83J0rEYAeAqo\nccxTvZp/DzH3K9JrGNlp4w/aVzgnXU1Mybo4QO39orFiIE4ROU/hCMtDdC7r\nCHe+dexmPJY4UVI3Ul2k1SIrOaP4ZBU26RnTuCRbjJ9gsquxD/BeEg+xyE5N\nJUh4pnvSPqKN4YEyhVJeqA4IAI1N6Xq0vThnVMm9aOLJFf/mqL0R+r2abh16\nZQIaChgIIHKrwXTdM7GT2WqXBIg/HK2+PYnMBMUzaw3JjlVqYRpjDrbWrJEP\nkpyxZxq/6ejbsQ++rnWZBxmOLeLxceihL96iuYJjKwZO1zf5AinKdmUSFBW2\nXa+keZGkWYBx+T6p9PGetgsVWKumiSKaJg8R/N8x4a7X3lIypimc/wqZqfU8\nRqEfK66yuu4Wi5LZbCbjQwx4DZQG8lf89znSXW4NADysxGdMtC0kA0ThBjZg\n3eBNkDeCNQMRhE8I6gGZ7L+anJEl/QFCwzNUUDD9Ddfs0EybgxZpL3TIvZWb\n1F1Rt61niBcUNucGpX0kFvbLS0M1YS4ilWCWO9CeRoDT0PlVo1JvSx1buNDh\nQjuw79hgg6Lr3ZiEuj9/YEyaffICNma0WHP/TmDDpIkUqPYwKh8VOcNZpwaw\nv1OvM+9C23RgxET3IH6HodmWXpojdeHzM41HdN93owOOEnrVZuFig641mWwf\nbVYn\r\n=J1sm\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDmZ5RydDVyPK8MvMKp8tKRreKxkdgDL1oCCpQ1/zRVoAiBb6JN0aOp76Ne4m3jGWTqGID52pTvea8mN+aBL2Uhdxw=="}]},"maintainers":[{"email":"aaron@abramov.io","name":"aaronabramov"},{"email":"christoph.pojer@gmail.com","name":"cpojer"},{"email":"opensource+npm@fb.com","name":"fb"},{"email":"jean@lauliac.com","name":"jeanlauliac"},{"email":"mjesun@hotmail.com","name":"mjesun"},{"email":"rubennorte@gmail.com","name":"rubennorte"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pretty-format_24.0.0-alpha.12_1547218879190_0.3313568015150097"},"_hasShrinkwrap":false},"24.0.0-alpha.13":{"name":"pretty-format","version":"24.0.0-alpha.13","repository":{"type":"git","url":"git+https://github.com/facebook/jest.git","directory":"packages/pretty-format"},"license":"MIT","description":"Stringify any JavaScript value.","main":"build/index.js","browser":"build-es5/index.js","author":{"name":"James Kyle","email":"me@thejameskyle.com"},"dependencies":{"ansi-regex":"^4.0.0","ansi-styles":"^3.2.0"},"devDependencies":{"immutable":"4.0.0-rc.9","react":"*","react-dom":"*","react-test-renderer":"*"},"engines":{"node":">= 6"},"gitHead":"6de22dde9a10f775adc7b6f80080bdd224f6ae31","readme":"# pretty-format\n\n> Stringify any JavaScript value.\n\n- Supports all built-in JavaScript types\n - primitive types: `Boolean`, `null`, `Number`, `String`, `Symbol`, `undefined`\n - other non-collection types: `Date`, `Error`, `Function`, `RegExp`\n - collection types:\n - `arguments`, `Array`, `ArrayBuffer`, `DataView`, `Float32Array`, `Float64Array`, `Int8Array`, `Int16Array`, `Int32Array`, `Uint8Array`, `Uint8ClampedArray`, `Uint16Array`, `Uint32Array`,\n - `Map`, `Set`, `WeakMap`, `WeakSet`\n - `Object`\n- [Blazingly fast](https://gist.github.com/thejameskyle/2b04ffe4941aafa8f970de077843a8fd)\n - similar performance to `JSON.stringify` in v8\n - significantly faster than `util.format` in Node.js\n- Serialize application-specific data types with built-in or user-defined plugins\n\n## Installation\n\n```sh\n$ yarn add pretty-format\n```\n\n## Usage\n\n```js\nconst prettyFormat = require('pretty-format'); // CommonJS\n```\n\n```js\nimport prettyFormat from 'pretty-format'; // ES2015 modules\n```\n\n```js\nconst val = {object: {}};\nval.circularReference = val;\nval[Symbol('foo')] = 'foo';\nval.map = new Map([['prop', 'value']]);\nval.array = [-0, Infinity, NaN];\n\nconsole.log(prettyFormat(val));\n/*\nObject {\n \"array\": Array [\n -0,\n Infinity,\n NaN,\n ],\n \"circularReference\": [Circular],\n \"map\": Map {\n \"prop\" => \"value\",\n },\n \"object\": Object {},\n Symbol(foo): \"foo\",\n}\n*/\n```\n\n## Usage with options\n\n```js\nfunction onClick() {}\n\nconsole.log(prettyFormat(onClick));\n/*\n[Function onClick]\n*/\n\nconst options = {\n printFunctionName: false,\n};\nconsole.log(prettyFormat(onClick, options));\n/*\n[Function]\n*/\n```\n\n| key | type | default | description |\n| :------------------ | :-------- | :--------- | :------------------------------------------------------ |\n| `callToJSON` | `boolean` | `true` | call `toJSON` method (if it exists) on objects |\n| `escapeRegex` | `boolean` | `false` | escape special characters in regular expressions |\n| `escapeString` | `boolean` | `true` | escape special characters in strings |\n| `highlight` | `boolean` | `false` | highlight syntax with colors in terminal (some plugins) |\n| `indent` | `number` | `2` | spaces in each level of indentation |\n| `maxDepth` | `number` | `Infinity` | levels to print in arrays, objects, elements, and so on |\n| `min` | `boolean` | `false` | minimize added space: no indentation nor line breaks |\n| `plugins` | `array` | `[]` | plugins to serialize application-specific data types |\n| `printFunctionName` | `boolean` | `true` | include or omit the name of a function |\n| `theme` | `object` | | colors to highlight syntax in terminal |\n\nProperty values of `theme` are from [ansi-styles colors](https://github.com/chalk/ansi-styles#colors)\n\n```js\nconst DEFAULT_THEME = {\n comment: 'gray',\n content: 'reset',\n prop: 'yellow',\n tag: 'cyan',\n value: 'green',\n};\n```\n\n## Usage with plugins\n\nThe `pretty-format` package provides some built-in plugins, including:\n\n- `ReactElement` for elements from `react`\n- `ReactTestComponent` for test objects from `react-test-renderer`\n\n```js\n// CommonJS\nconst prettyFormat = require('pretty-format');\nconst ReactElement = prettyFormat.plugins.ReactElement;\nconst ReactTestComponent = prettyFormat.plugins.ReactTestComponent;\n\nconst React = require('react');\nconst renderer = require('react-test-renderer');\n```\n\n```js\n// ES2015 modules and destructuring assignment\nimport prettyFormat from 'pretty-format';\nconst {ReactElement, ReactTestComponent} = prettyFormat.plugins;\n\nimport React from 'react';\nimport renderer from 'react-test-renderer';\n```\n\n```js\nconst onClick = () => {};\nconst element = React.createElement('button', {onClick}, 'Hello World');\n\nconst formatted1 = prettyFormat(element, {\n plugins: [ReactElement],\n printFunctionName: false,\n});\nconst formatted2 = prettyFormat(renderer.create(element).toJSON(), {\n plugins: [ReactTestComponent],\n printFunctionName: false,\n});\n/*\n\n*/\n```\n\n## Usage in Jest\n\nFor snapshot tests, Jest uses `pretty-format` with options that include some of its built-in plugins. For this purpose, plugins are also known as **snapshot serializers**.\n\nTo serialize application-specific data types, you can add modules to `devDependencies` of a project, and then:\n\nIn an **individual** test file, you can add a module as follows. It precedes any modules from Jest configuration.\n\n```js\nimport serializer from 'my-serializer-module';\nexpect.addSnapshotSerializer(serializer);\n\n// tests which have `expect(value).toMatchSnapshot()` assertions\n```\n\nFor **all** test files, you can specify modules in Jest configuration. They precede built-in plugins for React, HTML, and Immutable.js data types. For example, in a `package.json` file:\n\n```json\n{\n \"jest\": {\n \"snapshotSerializers\": [\"my-serializer-module\"]\n }\n}\n```\n\n## Writing plugins\n\nA plugin is a JavaScript object.\n\nIf `options` has a `plugins` array: for the first plugin whose `test(val)` method returns a truthy value, then `prettyFormat(val, options)` returns the result from either:\n\n- `serialize(val, …)` method of the **improved** interface (available in **version 21** or later)\n- `print(val, …)` method of the **original** interface (if plugin does not have `serialize` method)\n\n### test\n\nWrite `test` so it can receive `val` argument of any type. To serialize **objects** which have certain properties, then a guarded expression like `val != null && …` or more concise `val && …` prevents the following errors:\n\n- `TypeError: Cannot read property 'whatever' of null`\n- `TypeError: Cannot read property 'whatever' of undefined`\n\nFor example, `test` method of built-in `ReactElement` plugin:\n\n```js\nconst elementSymbol = Symbol.for('react.element');\nconst test = val => val && val.$$typeof === elementSymbol;\n```\n\nPay attention to efficiency in `test` because `pretty-format` calls it often.\n\n### serialize\n\nThe **improved** interface is available in **version 21** or later.\n\nWrite `serialize` to return a string, given the arguments:\n\n- `val` which “passed the test”\n- unchanging `config` object: derived from `options`\n- current `indentation` string: concatenate to `indent` from `config`\n- current `depth` number: compare to `maxDepth` from `config`\n- current `refs` array: find circular references in objects\n- `printer` callback function: serialize children\n\n### config\n\n| key | type | description |\n| :------------------ | :-------- | :------------------------------------------------------ |\n| `callToJSON` | `boolean` | call `toJSON` method (if it exists) on objects |\n| `colors` | `Object` | escape codes for colors to highlight syntax |\n| `escapeRegex` | `boolean` | escape special characters in regular expressions |\n| `escapeString` | `boolean` | escape special characters in strings |\n| `indent` | `string` | spaces in each level of indentation |\n| `maxDepth` | `number` | levels to print in arrays, objects, elements, and so on |\n| `min` | `boolean` | minimize added space: no indentation nor line breaks |\n| `plugins` | `array` | plugins to serialize application-specific data types |\n| `printFunctionName` | `boolean` | include or omit the name of a function |\n| `spacingInner` | `strong` | spacing to separate items in a list |\n| `spacingOuter` | `strong` | spacing to enclose a list of items |\n\nEach property of `colors` in `config` corresponds to a property of `theme` in `options`:\n\n- the key is the same (for example, `tag`)\n- the value in `colors` is a object with `open` and `close` properties whose values are escape codes from [ansi-styles](https://github.com/chalk/ansi-styles) for the color value in `theme` (for example, `'cyan'`)\n\nSome properties in `config` are derived from `min` in `options`:\n\n- `spacingInner` and `spacingOuter` are **newline** if `min` is `false`\n- `spacingInner` is **space** and `spacingOuter` is **empty string** if `min` is `true`\n\n### Example of serialize and test\n\nThis plugin is a pattern you can apply to serialize composite data types. Of course, `pretty-format` does not need a plugin to serialize arrays :)\n\n```js\n// We reused more code when we factored out a function for child items\n// that is independent of depth, name, and enclosing punctuation (see below).\nconst SEPARATOR = ',';\nfunction serializeItems(items, config, indentation, depth, refs, printer) {\n if (items.length === 0) {\n return '';\n }\n const indentationItems = indentation + config.indent;\n return (\n config.spacingOuter +\n items\n .map(\n item =>\n indentationItems +\n printer(item, config, indentationItems, depth, refs), // callback\n )\n .join(SEPARATOR + config.spacingInner) +\n (config.min ? '' : SEPARATOR) + // following the last item\n config.spacingOuter +\n indentation\n );\n}\n\nconst plugin = {\n test(val) {\n return Array.isArray(val);\n },\n serialize(array, config, indentation, depth, refs, printer) {\n const name = array.constructor.name;\n return ++depth > config.maxDepth\n ? '[' + name + ']'\n : (config.min ? '' : name + ' ') +\n '[' +\n serializeItems(array, config, indentation, depth, refs, printer) +\n ']';\n },\n};\n```\n\n```js\nconst val = {\n filter: 'completed',\n items: [\n {\n text: 'Write test',\n completed: true,\n },\n {\n text: 'Write serialize',\n completed: true,\n },\n ],\n};\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n plugins: [plugin],\n }),\n);\n/*\nObject {\n \"filter\": \"completed\",\n \"items\": Array [\n Object {\n \"completed\": true,\n \"text\": \"Write test\",\n },\n Object {\n \"completed\": true,\n \"text\": \"Write serialize\",\n },\n ],\n}\n*/\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n indent: 4,\n plugins: [plugin],\n }),\n);\n/*\nObject {\n \"filter\": \"completed\",\n \"items\": Array [\n Object {\n \"completed\": true,\n \"text\": \"Write test\",\n },\n Object {\n \"completed\": true,\n \"text\": \"Write serialize\",\n },\n ],\n}\n*/\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n maxDepth: 1,\n plugins: [plugin],\n }),\n);\n/*\nObject {\n \"filter\": \"completed\",\n \"items\": [Array],\n}\n*/\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n min: true,\n plugins: [plugin],\n }),\n);\n/*\n{\"filter\": \"completed\", \"items\": [{\"completed\": true, \"text\": \"Write test\"}, {\"completed\": true, \"text\": \"Write serialize\"}]}\n*/\n```\n\n### print\n\nThe **original** interface is adequate for plugins:\n\n- that **do not** depend on options other than `highlight` or `min`\n- that **do not** depend on `depth` or `refs` in recursive traversal, and\n- if values either\n - do **not** require indentation, or\n - do **not** occur as children of JavaScript data structures (for example, array)\n\nWrite `print` to return a string, given the arguments:\n\n- `val` which “passed the test”\n- current `printer(valChild)` callback function: serialize children\n- current `indenter(lines)` callback function: indent lines at the next level\n- unchanging `config` object: derived from `options`\n- unchanging `colors` object: derived from `options`\n\nThe 3 properties of `config` are `min` in `options` and:\n\n- `spacing` and `edgeSpacing` are **newline** if `min` is `false`\n- `spacing` is **space** and `edgeSpacing` is **empty string** if `min` is `true`\n\nEach property of `colors` corresponds to a property of `theme` in `options`:\n\n- the key is the same (for example, `tag`)\n- the value in `colors` is a object with `open` and `close` properties whose values are escape codes from [ansi-styles](https://github.com/chalk/ansi-styles) for the color value in `theme` (for example, `'cyan'`)\n\n### Example of print and test\n\nThis plugin prints functions with the **number of named arguments** excluding rest argument.\n\n```js\nconst plugin = {\n print(val) {\n return `[Function ${val.name || 'anonymous'} ${val.length}]`;\n },\n test(val) {\n return typeof val === 'function';\n },\n};\n```\n\n```js\nconst val = {\n onClick(event) {},\n render() {},\n};\n\nprettyFormat(val, {\n plugins: [plugin],\n});\n/*\nObject {\n \"onClick\": [Function onClick 1],\n \"render\": [Function render 0],\n}\n*/\n\nprettyFormat(val);\n/*\nObject {\n \"onClick\": [Function onClick],\n \"render\": [Function render],\n}\n*/\n```\n\nThis plugin **ignores** the `printFunctionName` option. That limitation of the original `print` interface is a reason to use the improved `serialize` interface, described above.\n\n```js\nprettyFormat(val, {\n plugins: [pluginOld],\n printFunctionName: false,\n});\n/*\nObject {\n \"onClick\": [Function onClick 1],\n \"render\": [Function render 0],\n}\n*/\n\nprettyFormat(val, {\n printFunctionName: false,\n});\n/*\nObject {\n \"onClick\": [Function],\n \"render\": [Function],\n}\n*/\n```\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/facebook/jest/issues"},"homepage":"https://github.com/facebook/jest#readme","_id":"pretty-format@24.0.0-alpha.13","_nodeVersion":"8.11.3","_npmVersion":"lerna/3.10.5/node@v8.11.3+x64 (darwin)","dist":{"integrity":"sha512-4wJ9B0CCOtBlgZ//zI57cbOvaWA1iEfngae4gHRj7ibHrUTF59aFL6GE2QW8ppX5B3wGO/vFS7jR8Wo9gnRYng==","shasum":"f1bcbcbbfafd4cc1d4d871047d56f0fedbd030d6","tarball":"http://localhost:4545/npm/registry/pretty-format/pretty-format-24.0.0-alpha.13.tgz","fileCount":18,"unpackedSize":573400,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcSIURCRA9TVsSAnZWagAAWUMP/2kngC22iZZ3RtJaS8Ml\nAZPS6eUYx75JbHmmmJ1PbJLKWEr1Qo+CkOOtXzJkulj2mdRtz2Z4LXA1iztN\nhmhDqKn9bfHiJpgeuqFIby/Sd9KtQyiaorNDB/C29MbonJsRzszVfPlAA7x9\nqvHbXk2mE2dxO5IwfrH+xefADSKPMzL15BkIs91/45wwysFbQiT9ZVdy7O6S\nMAx27OgU4Y3S4VDYGezsNxABEUH/jaUIAxwIeb+j+fdSWXhLSffu7FqHP+Ki\ng+t8QiciSjwps1m+nRCQetssPbxvcMCQusA6g1NQOEFE0NkOZxdlKJfZYgW0\nrREiPzLCzqR/2A9OqYvKNOWcWQlfn1zh5vYCARjygpeIusBK6XKjsMyZB4lz\nFbRSjd30ZzUqDgwZZAQe4qLXfQndcrdccYe8ZNC3GApS5nVfpKwL+iJrbX2i\ntfkkGRMCS8LajGY5zarlEckIEtuch1bZ+siGOgHXLxpaZuEoN0kxeQQxCuEg\ncbPpH2sf92hHHRbcW/vlT6ORkvku8bwMjL5YI+hqWwwDC+a5ZWEBw4Hsm2IW\nZXmDFNSjCTr73qaQah9hMTS0TaCugMFy43magU3Q+8bo1g+uvh9uMEZhVfrj\nChdhMghZCssxZeZbWw0IL2eEHmHSItQRjG3q9tmt+xTXcMm5ElpjHoXKqv1I\nUGj0\r\n=Pmif\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC16Gukapf0NGdjnsp5fmaLkIiCf30Tkr42jGLQ24Dz9wIgYIUihEj760jJGnhel2bRENjF9THQrflV/1AngB67qLM="}]},"maintainers":[{"email":"aaron@abramov.io","name":"aaronabramov"},{"email":"christoph.pojer@gmail.com","name":"cpojer"},{"email":"opensource+npm@fb.com","name":"fb"},{"email":"jean@lauliac.com","name":"jeanlauliac"},{"email":"mjesun@hotmail.com","name":"mjesun"},{"email":"rubennorte@gmail.com","name":"rubennorte"}],"_npmUser":{"name":"rubennorte","email":"rubennorte@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pretty-format_24.0.0-alpha.13_1548256528812_0.6154443589171268"},"_hasShrinkwrap":false},"24.0.0-alpha.15":{"name":"pretty-format","version":"24.0.0-alpha.15","repository":{"type":"git","url":"git+https://github.com/facebook/jest.git","directory":"packages/pretty-format"},"license":"MIT","description":"Stringify any JavaScript value.","main":"build/index.js","browser":"build-es5/index.js","author":{"name":"James Kyle","email":"me@thejameskyle.com"},"dependencies":{"ansi-regex":"^4.0.0","ansi-styles":"^3.2.0"},"devDependencies":{"immutable":"4.0.0-rc.9","react":"*","react-dom":"*","react-test-renderer":"*"},"engines":{"node":">= 6"},"gitHead":"28971c5f794330e8acc6861288e6daafcd32238e","readme":"# pretty-format\n\n> Stringify any JavaScript value.\n\n- Supports all built-in JavaScript types\n - primitive types: `Boolean`, `null`, `Number`, `String`, `Symbol`, `undefined`\n - other non-collection types: `Date`, `Error`, `Function`, `RegExp`\n - collection types:\n - `arguments`, `Array`, `ArrayBuffer`, `DataView`, `Float32Array`, `Float64Array`, `Int8Array`, `Int16Array`, `Int32Array`, `Uint8Array`, `Uint8ClampedArray`, `Uint16Array`, `Uint32Array`,\n - `Map`, `Set`, `WeakMap`, `WeakSet`\n - `Object`\n- [Blazingly fast](https://gist.github.com/thejameskyle/2b04ffe4941aafa8f970de077843a8fd)\n - similar performance to `JSON.stringify` in v8\n - significantly faster than `util.format` in Node.js\n- Serialize application-specific data types with built-in or user-defined plugins\n\n## Installation\n\n```sh\n$ yarn add pretty-format\n```\n\n## Usage\n\n```js\nconst prettyFormat = require('pretty-format'); // CommonJS\n```\n\n```js\nimport prettyFormat from 'pretty-format'; // ES2015 modules\n```\n\n```js\nconst val = {object: {}};\nval.circularReference = val;\nval[Symbol('foo')] = 'foo';\nval.map = new Map([['prop', 'value']]);\nval.array = [-0, Infinity, NaN];\n\nconsole.log(prettyFormat(val));\n/*\nObject {\n \"array\": Array [\n -0,\n Infinity,\n NaN,\n ],\n \"circularReference\": [Circular],\n \"map\": Map {\n \"prop\" => \"value\",\n },\n \"object\": Object {},\n Symbol(foo): \"foo\",\n}\n*/\n```\n\n## Usage with options\n\n```js\nfunction onClick() {}\n\nconsole.log(prettyFormat(onClick));\n/*\n[Function onClick]\n*/\n\nconst options = {\n printFunctionName: false,\n};\nconsole.log(prettyFormat(onClick, options));\n/*\n[Function]\n*/\n```\n\n| key | type | default | description |\n| :------------------ | :-------- | :--------- | :------------------------------------------------------ |\n| `callToJSON` | `boolean` | `true` | call `toJSON` method (if it exists) on objects |\n| `escapeRegex` | `boolean` | `false` | escape special characters in regular expressions |\n| `escapeString` | `boolean` | `true` | escape special characters in strings |\n| `highlight` | `boolean` | `false` | highlight syntax with colors in terminal (some plugins) |\n| `indent` | `number` | `2` | spaces in each level of indentation |\n| `maxDepth` | `number` | `Infinity` | levels to print in arrays, objects, elements, and so on |\n| `min` | `boolean` | `false` | minimize added space: no indentation nor line breaks |\n| `plugins` | `array` | `[]` | plugins to serialize application-specific data types |\n| `printFunctionName` | `boolean` | `true` | include or omit the name of a function |\n| `theme` | `object` | | colors to highlight syntax in terminal |\n\nProperty values of `theme` are from [ansi-styles colors](https://github.com/chalk/ansi-styles#colors)\n\n```js\nconst DEFAULT_THEME = {\n comment: 'gray',\n content: 'reset',\n prop: 'yellow',\n tag: 'cyan',\n value: 'green',\n};\n```\n\n## Usage with plugins\n\nThe `pretty-format` package provides some built-in plugins, including:\n\n- `ReactElement` for elements from `react`\n- `ReactTestComponent` for test objects from `react-test-renderer`\n\n```js\n// CommonJS\nconst prettyFormat = require('pretty-format');\nconst ReactElement = prettyFormat.plugins.ReactElement;\nconst ReactTestComponent = prettyFormat.plugins.ReactTestComponent;\n\nconst React = require('react');\nconst renderer = require('react-test-renderer');\n```\n\n```js\n// ES2015 modules and destructuring assignment\nimport prettyFormat from 'pretty-format';\nconst {ReactElement, ReactTestComponent} = prettyFormat.plugins;\n\nimport React from 'react';\nimport renderer from 'react-test-renderer';\n```\n\n```js\nconst onClick = () => {};\nconst element = React.createElement('button', {onClick}, 'Hello World');\n\nconst formatted1 = prettyFormat(element, {\n plugins: [ReactElement],\n printFunctionName: false,\n});\nconst formatted2 = prettyFormat(renderer.create(element).toJSON(), {\n plugins: [ReactTestComponent],\n printFunctionName: false,\n});\n/*\n\n*/\n```\n\n## Usage in Jest\n\nFor snapshot tests, Jest uses `pretty-format` with options that include some of its built-in plugins. For this purpose, plugins are also known as **snapshot serializers**.\n\nTo serialize application-specific data types, you can add modules to `devDependencies` of a project, and then:\n\nIn an **individual** test file, you can add a module as follows. It precedes any modules from Jest configuration.\n\n```js\nimport serializer from 'my-serializer-module';\nexpect.addSnapshotSerializer(serializer);\n\n// tests which have `expect(value).toMatchSnapshot()` assertions\n```\n\nFor **all** test files, you can specify modules in Jest configuration. They precede built-in plugins for React, HTML, and Immutable.js data types. For example, in a `package.json` file:\n\n```json\n{\n \"jest\": {\n \"snapshotSerializers\": [\"my-serializer-module\"]\n }\n}\n```\n\n## Writing plugins\n\nA plugin is a JavaScript object.\n\nIf `options` has a `plugins` array: for the first plugin whose `test(val)` method returns a truthy value, then `prettyFormat(val, options)` returns the result from either:\n\n- `serialize(val, …)` method of the **improved** interface (available in **version 21** or later)\n- `print(val, …)` method of the **original** interface (if plugin does not have `serialize` method)\n\n### test\n\nWrite `test` so it can receive `val` argument of any type. To serialize **objects** which have certain properties, then a guarded expression like `val != null && …` or more concise `val && …` prevents the following errors:\n\n- `TypeError: Cannot read property 'whatever' of null`\n- `TypeError: Cannot read property 'whatever' of undefined`\n\nFor example, `test` method of built-in `ReactElement` plugin:\n\n```js\nconst elementSymbol = Symbol.for('react.element');\nconst test = val => val && val.$$typeof === elementSymbol;\n```\n\nPay attention to efficiency in `test` because `pretty-format` calls it often.\n\n### serialize\n\nThe **improved** interface is available in **version 21** or later.\n\nWrite `serialize` to return a string, given the arguments:\n\n- `val` which “passed the test”\n- unchanging `config` object: derived from `options`\n- current `indentation` string: concatenate to `indent` from `config`\n- current `depth` number: compare to `maxDepth` from `config`\n- current `refs` array: find circular references in objects\n- `printer` callback function: serialize children\n\n### config\n\n| key | type | description |\n| :------------------ | :-------- | :------------------------------------------------------ |\n| `callToJSON` | `boolean` | call `toJSON` method (if it exists) on objects |\n| `colors` | `Object` | escape codes for colors to highlight syntax |\n| `escapeRegex` | `boolean` | escape special characters in regular expressions |\n| `escapeString` | `boolean` | escape special characters in strings |\n| `indent` | `string` | spaces in each level of indentation |\n| `maxDepth` | `number` | levels to print in arrays, objects, elements, and so on |\n| `min` | `boolean` | minimize added space: no indentation nor line breaks |\n| `plugins` | `array` | plugins to serialize application-specific data types |\n| `printFunctionName` | `boolean` | include or omit the name of a function |\n| `spacingInner` | `strong` | spacing to separate items in a list |\n| `spacingOuter` | `strong` | spacing to enclose a list of items |\n\nEach property of `colors` in `config` corresponds to a property of `theme` in `options`:\n\n- the key is the same (for example, `tag`)\n- the value in `colors` is a object with `open` and `close` properties whose values are escape codes from [ansi-styles](https://github.com/chalk/ansi-styles) for the color value in `theme` (for example, `'cyan'`)\n\nSome properties in `config` are derived from `min` in `options`:\n\n- `spacingInner` and `spacingOuter` are **newline** if `min` is `false`\n- `spacingInner` is **space** and `spacingOuter` is **empty string** if `min` is `true`\n\n### Example of serialize and test\n\nThis plugin is a pattern you can apply to serialize composite data types. Of course, `pretty-format` does not need a plugin to serialize arrays :)\n\n```js\n// We reused more code when we factored out a function for child items\n// that is independent of depth, name, and enclosing punctuation (see below).\nconst SEPARATOR = ',';\nfunction serializeItems(items, config, indentation, depth, refs, printer) {\n if (items.length === 0) {\n return '';\n }\n const indentationItems = indentation + config.indent;\n return (\n config.spacingOuter +\n items\n .map(\n item =>\n indentationItems +\n printer(item, config, indentationItems, depth, refs), // callback\n )\n .join(SEPARATOR + config.spacingInner) +\n (config.min ? '' : SEPARATOR) + // following the last item\n config.spacingOuter +\n indentation\n );\n}\n\nconst plugin = {\n test(val) {\n return Array.isArray(val);\n },\n serialize(array, config, indentation, depth, refs, printer) {\n const name = array.constructor.name;\n return ++depth > config.maxDepth\n ? '[' + name + ']'\n : (config.min ? '' : name + ' ') +\n '[' +\n serializeItems(array, config, indentation, depth, refs, printer) +\n ']';\n },\n};\n```\n\n```js\nconst val = {\n filter: 'completed',\n items: [\n {\n text: 'Write test',\n completed: true,\n },\n {\n text: 'Write serialize',\n completed: true,\n },\n ],\n};\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n plugins: [plugin],\n }),\n);\n/*\nObject {\n \"filter\": \"completed\",\n \"items\": Array [\n Object {\n \"completed\": true,\n \"text\": \"Write test\",\n },\n Object {\n \"completed\": true,\n \"text\": \"Write serialize\",\n },\n ],\n}\n*/\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n indent: 4,\n plugins: [plugin],\n }),\n);\n/*\nObject {\n \"filter\": \"completed\",\n \"items\": Array [\n Object {\n \"completed\": true,\n \"text\": \"Write test\",\n },\n Object {\n \"completed\": true,\n \"text\": \"Write serialize\",\n },\n ],\n}\n*/\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n maxDepth: 1,\n plugins: [plugin],\n }),\n);\n/*\nObject {\n \"filter\": \"completed\",\n \"items\": [Array],\n}\n*/\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n min: true,\n plugins: [plugin],\n }),\n);\n/*\n{\"filter\": \"completed\", \"items\": [{\"completed\": true, \"text\": \"Write test\"}, {\"completed\": true, \"text\": \"Write serialize\"}]}\n*/\n```\n\n### print\n\nThe **original** interface is adequate for plugins:\n\n- that **do not** depend on options other than `highlight` or `min`\n- that **do not** depend on `depth` or `refs` in recursive traversal, and\n- if values either\n - do **not** require indentation, or\n - do **not** occur as children of JavaScript data structures (for example, array)\n\nWrite `print` to return a string, given the arguments:\n\n- `val` which “passed the test”\n- current `printer(valChild)` callback function: serialize children\n- current `indenter(lines)` callback function: indent lines at the next level\n- unchanging `config` object: derived from `options`\n- unchanging `colors` object: derived from `options`\n\nThe 3 properties of `config` are `min` in `options` and:\n\n- `spacing` and `edgeSpacing` are **newline** if `min` is `false`\n- `spacing` is **space** and `edgeSpacing` is **empty string** if `min` is `true`\n\nEach property of `colors` corresponds to a property of `theme` in `options`:\n\n- the key is the same (for example, `tag`)\n- the value in `colors` is a object with `open` and `close` properties whose values are escape codes from [ansi-styles](https://github.com/chalk/ansi-styles) for the color value in `theme` (for example, `'cyan'`)\n\n### Example of print and test\n\nThis plugin prints functions with the **number of named arguments** excluding rest argument.\n\n```js\nconst plugin = {\n print(val) {\n return `[Function ${val.name || 'anonymous'} ${val.length}]`;\n },\n test(val) {\n return typeof val === 'function';\n },\n};\n```\n\n```js\nconst val = {\n onClick(event) {},\n render() {},\n};\n\nprettyFormat(val, {\n plugins: [plugin],\n});\n/*\nObject {\n \"onClick\": [Function onClick 1],\n \"render\": [Function render 0],\n}\n*/\n\nprettyFormat(val);\n/*\nObject {\n \"onClick\": [Function onClick],\n \"render\": [Function render],\n}\n*/\n```\n\nThis plugin **ignores** the `printFunctionName` option. That limitation of the original `print` interface is a reason to use the improved `serialize` interface, described above.\n\n```js\nprettyFormat(val, {\n plugins: [pluginOld],\n printFunctionName: false,\n});\n/*\nObject {\n \"onClick\": [Function onClick 1],\n \"render\": [Function render 0],\n}\n*/\n\nprettyFormat(val, {\n printFunctionName: false,\n});\n/*\nObject {\n \"onClick\": [Function],\n \"render\": [Function],\n}\n*/\n```\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/facebook/jest/issues"},"homepage":"https://github.com/facebook/jest#readme","_id":"pretty-format@24.0.0-alpha.15","_nodeVersion":"8.11.3","_npmVersion":"lerna/3.10.5/node@v8.11.3+x64 (darwin)","dist":{"integrity":"sha512-wQFrzHKJviGRRS5etUeaQentUEOlbkMS4rDAatCrMNm9w6OunhOFlWXKfxWmoojBN24kZqlSoGz/FbzcNXfYZg==","shasum":"b677da08e7ff63beebc2c7cc8cec52bdafd44fd4","tarball":"http://localhost:4545/npm/registry/pretty-format/pretty-format-24.0.0-alpha.15.tgz","fileCount":18,"unpackedSize":573400,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcSfthCRA9TVsSAnZWagAA5gkQAIdJZWPrL8U343CWMtxB\nOMTZOh7icMDAfY7MF7QDG67+YEbA0MQS0yNbufDJubpZp4yTAUwSjLxx1LF9\nlPXBlpbIn+7bsBQK3wOSnXfk8oiCpxLL6wfNUcxmUpd2yXg3+BgCG9VNebYj\n6CYjy3pprHfVLkVjxR83wvldLi1cZYnSy3PBAGnIHbzXizEeNIap87jmwCf2\nx3xsy+fio9vYdSQzhuTsjFG/odiJn/jSK2JtbuwZX4re1KpXzBXpjO/p3OSz\noZ9Rxd7Vkooexvxqppe7VAoSug/dwYVNMpIKDtky6NXRrnFwrFEA/+7xJDxL\ntusbdww4gTAts88kflsLNW17T8TiwuT0PTs3kr4S25FojCJZjs4+UsdKsahZ\nDOSE8xLj0u7MUzCQkaYcKD+XLUftw3IDVEWLvxWnWQMqhC+gH2y4JBe7Tyt/\newNbkg/+HYCuK9Rt1l64b+5lF6/wktPvs0WF5kfqfnREXRGgI8VPFGy/ETVe\nQ29uc2Bni5ft/JenGiyUWMcPa/OdqV8pRnllSVCGmamg2bBy+V0628dam9ZX\nM5vxAcMnygW7p6Fr+uaZ9UVMR+mQl0h5nWscODD01C6ELfH6lO/61QTMIVHB\n5JJOb1aNwG5We9uSEx94I4R0fBZ2HopLhyKD+HfV/E3fZ20rqyCNzDFTLec9\nOXHM\r\n=ktVt\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFrcrznCf3A5g26BvI749Z5mJOMMTzJjL/iRo8m1YftFAiEAmkgfwHo0uh1nfj4EjRR5PRT4OC60EKiI91AwyvAuAck="}]},"maintainers":[{"email":"aaron@abramov.io","name":"aaronabramov"},{"email":"christoph.pojer@gmail.com","name":"cpojer"},{"email":"opensource+npm@fb.com","name":"fb"},{"email":"jean@lauliac.com","name":"jeanlauliac"},{"email":"mjesun@hotmail.com","name":"mjesun"},{"email":"rubennorte@gmail.com","name":"rubennorte"}],"_npmUser":{"name":"rubennorte","email":"rubennorte@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pretty-format_24.0.0-alpha.15_1548352352669_0.8565869268003767"},"_hasShrinkwrap":false},"24.0.0-alpha.16":{"name":"pretty-format","version":"24.0.0-alpha.16","repository":{"type":"git","url":"git+https://github.com/facebook/jest.git","directory":"packages/pretty-format"},"license":"MIT","description":"Stringify any JavaScript value.","main":"build/index.js","browser":"build-es5/index.js","author":{"name":"James Kyle","email":"me@thejameskyle.com"},"dependencies":{"ansi-regex":"^4.0.0","ansi-styles":"^3.2.0"},"devDependencies":{"immutable":"4.0.0-rc.9","react":"*","react-dom":"*","react-test-renderer":"*"},"engines":{"node":">= 6"},"gitHead":"634e5a54f46b2a62d1dc81a170562e6f4e55ad60","readme":"# pretty-format\n\n> Stringify any JavaScript value.\n\n- Supports all built-in JavaScript types\n - primitive types: `Boolean`, `null`, `Number`, `String`, `Symbol`, `undefined`\n - other non-collection types: `Date`, `Error`, `Function`, `RegExp`\n - collection types:\n - `arguments`, `Array`, `ArrayBuffer`, `DataView`, `Float32Array`, `Float64Array`, `Int8Array`, `Int16Array`, `Int32Array`, `Uint8Array`, `Uint8ClampedArray`, `Uint16Array`, `Uint32Array`,\n - `Map`, `Set`, `WeakMap`, `WeakSet`\n - `Object`\n- [Blazingly fast](https://gist.github.com/thejameskyle/2b04ffe4941aafa8f970de077843a8fd)\n - similar performance to `JSON.stringify` in v8\n - significantly faster than `util.format` in Node.js\n- Serialize application-specific data types with built-in or user-defined plugins\n\n## Installation\n\n```sh\n$ yarn add pretty-format\n```\n\n## Usage\n\n```js\nconst prettyFormat = require('pretty-format'); // CommonJS\n```\n\n```js\nimport prettyFormat from 'pretty-format'; // ES2015 modules\n```\n\n```js\nconst val = {object: {}};\nval.circularReference = val;\nval[Symbol('foo')] = 'foo';\nval.map = new Map([['prop', 'value']]);\nval.array = [-0, Infinity, NaN];\n\nconsole.log(prettyFormat(val));\n/*\nObject {\n \"array\": Array [\n -0,\n Infinity,\n NaN,\n ],\n \"circularReference\": [Circular],\n \"map\": Map {\n \"prop\" => \"value\",\n },\n \"object\": Object {},\n Symbol(foo): \"foo\",\n}\n*/\n```\n\n## Usage with options\n\n```js\nfunction onClick() {}\n\nconsole.log(prettyFormat(onClick));\n/*\n[Function onClick]\n*/\n\nconst options = {\n printFunctionName: false,\n};\nconsole.log(prettyFormat(onClick, options));\n/*\n[Function]\n*/\n```\n\n| key | type | default | description |\n| :------------------ | :-------- | :--------- | :------------------------------------------------------ |\n| `callToJSON` | `boolean` | `true` | call `toJSON` method (if it exists) on objects |\n| `escapeRegex` | `boolean` | `false` | escape special characters in regular expressions |\n| `escapeString` | `boolean` | `true` | escape special characters in strings |\n| `highlight` | `boolean` | `false` | highlight syntax with colors in terminal (some plugins) |\n| `indent` | `number` | `2` | spaces in each level of indentation |\n| `maxDepth` | `number` | `Infinity` | levels to print in arrays, objects, elements, and so on |\n| `min` | `boolean` | `false` | minimize added space: no indentation nor line breaks |\n| `plugins` | `array` | `[]` | plugins to serialize application-specific data types |\n| `printFunctionName` | `boolean` | `true` | include or omit the name of a function |\n| `theme` | `object` | | colors to highlight syntax in terminal |\n\nProperty values of `theme` are from [ansi-styles colors](https://github.com/chalk/ansi-styles#colors)\n\n```js\nconst DEFAULT_THEME = {\n comment: 'gray',\n content: 'reset',\n prop: 'yellow',\n tag: 'cyan',\n value: 'green',\n};\n```\n\n## Usage with plugins\n\nThe `pretty-format` package provides some built-in plugins, including:\n\n- `ReactElement` for elements from `react`\n- `ReactTestComponent` for test objects from `react-test-renderer`\n\n```js\n// CommonJS\nconst prettyFormat = require('pretty-format');\nconst ReactElement = prettyFormat.plugins.ReactElement;\nconst ReactTestComponent = prettyFormat.plugins.ReactTestComponent;\n\nconst React = require('react');\nconst renderer = require('react-test-renderer');\n```\n\n```js\n// ES2015 modules and destructuring assignment\nimport prettyFormat from 'pretty-format';\nconst {ReactElement, ReactTestComponent} = prettyFormat.plugins;\n\nimport React from 'react';\nimport renderer from 'react-test-renderer';\n```\n\n```js\nconst onClick = () => {};\nconst element = React.createElement('button', {onClick}, 'Hello World');\n\nconst formatted1 = prettyFormat(element, {\n plugins: [ReactElement],\n printFunctionName: false,\n});\nconst formatted2 = prettyFormat(renderer.create(element).toJSON(), {\n plugins: [ReactTestComponent],\n printFunctionName: false,\n});\n/*\n\n*/\n```\n\n## Usage in Jest\n\nFor snapshot tests, Jest uses `pretty-format` with options that include some of its built-in plugins. For this purpose, plugins are also known as **snapshot serializers**.\n\nTo serialize application-specific data types, you can add modules to `devDependencies` of a project, and then:\n\nIn an **individual** test file, you can add a module as follows. It precedes any modules from Jest configuration.\n\n```js\nimport serializer from 'my-serializer-module';\nexpect.addSnapshotSerializer(serializer);\n\n// tests which have `expect(value).toMatchSnapshot()` assertions\n```\n\nFor **all** test files, you can specify modules in Jest configuration. They precede built-in plugins for React, HTML, and Immutable.js data types. For example, in a `package.json` file:\n\n```json\n{\n \"jest\": {\n \"snapshotSerializers\": [\"my-serializer-module\"]\n }\n}\n```\n\n## Writing plugins\n\nA plugin is a JavaScript object.\n\nIf `options` has a `plugins` array: for the first plugin whose `test(val)` method returns a truthy value, then `prettyFormat(val, options)` returns the result from either:\n\n- `serialize(val, …)` method of the **improved** interface (available in **version 21** or later)\n- `print(val, …)` method of the **original** interface (if plugin does not have `serialize` method)\n\n### test\n\nWrite `test` so it can receive `val` argument of any type. To serialize **objects** which have certain properties, then a guarded expression like `val != null && …` or more concise `val && …` prevents the following errors:\n\n- `TypeError: Cannot read property 'whatever' of null`\n- `TypeError: Cannot read property 'whatever' of undefined`\n\nFor example, `test` method of built-in `ReactElement` plugin:\n\n```js\nconst elementSymbol = Symbol.for('react.element');\nconst test = val => val && val.$$typeof === elementSymbol;\n```\n\nPay attention to efficiency in `test` because `pretty-format` calls it often.\n\n### serialize\n\nThe **improved** interface is available in **version 21** or later.\n\nWrite `serialize` to return a string, given the arguments:\n\n- `val` which “passed the test”\n- unchanging `config` object: derived from `options`\n- current `indentation` string: concatenate to `indent` from `config`\n- current `depth` number: compare to `maxDepth` from `config`\n- current `refs` array: find circular references in objects\n- `printer` callback function: serialize children\n\n### config\n\n| key | type | description |\n| :------------------ | :-------- | :------------------------------------------------------ |\n| `callToJSON` | `boolean` | call `toJSON` method (if it exists) on objects |\n| `colors` | `Object` | escape codes for colors to highlight syntax |\n| `escapeRegex` | `boolean` | escape special characters in regular expressions |\n| `escapeString` | `boolean` | escape special characters in strings |\n| `indent` | `string` | spaces in each level of indentation |\n| `maxDepth` | `number` | levels to print in arrays, objects, elements, and so on |\n| `min` | `boolean` | minimize added space: no indentation nor line breaks |\n| `plugins` | `array` | plugins to serialize application-specific data types |\n| `printFunctionName` | `boolean` | include or omit the name of a function |\n| `spacingInner` | `strong` | spacing to separate items in a list |\n| `spacingOuter` | `strong` | spacing to enclose a list of items |\n\nEach property of `colors` in `config` corresponds to a property of `theme` in `options`:\n\n- the key is the same (for example, `tag`)\n- the value in `colors` is a object with `open` and `close` properties whose values are escape codes from [ansi-styles](https://github.com/chalk/ansi-styles) for the color value in `theme` (for example, `'cyan'`)\n\nSome properties in `config` are derived from `min` in `options`:\n\n- `spacingInner` and `spacingOuter` are **newline** if `min` is `false`\n- `spacingInner` is **space** and `spacingOuter` is **empty string** if `min` is `true`\n\n### Example of serialize and test\n\nThis plugin is a pattern you can apply to serialize composite data types. Of course, `pretty-format` does not need a plugin to serialize arrays :)\n\n```js\n// We reused more code when we factored out a function for child items\n// that is independent of depth, name, and enclosing punctuation (see below).\nconst SEPARATOR = ',';\nfunction serializeItems(items, config, indentation, depth, refs, printer) {\n if (items.length === 0) {\n return '';\n }\n const indentationItems = indentation + config.indent;\n return (\n config.spacingOuter +\n items\n .map(\n item =>\n indentationItems +\n printer(item, config, indentationItems, depth, refs), // callback\n )\n .join(SEPARATOR + config.spacingInner) +\n (config.min ? '' : SEPARATOR) + // following the last item\n config.spacingOuter +\n indentation\n );\n}\n\nconst plugin = {\n test(val) {\n return Array.isArray(val);\n },\n serialize(array, config, indentation, depth, refs, printer) {\n const name = array.constructor.name;\n return ++depth > config.maxDepth\n ? '[' + name + ']'\n : (config.min ? '' : name + ' ') +\n '[' +\n serializeItems(array, config, indentation, depth, refs, printer) +\n ']';\n },\n};\n```\n\n```js\nconst val = {\n filter: 'completed',\n items: [\n {\n text: 'Write test',\n completed: true,\n },\n {\n text: 'Write serialize',\n completed: true,\n },\n ],\n};\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n plugins: [plugin],\n }),\n);\n/*\nObject {\n \"filter\": \"completed\",\n \"items\": Array [\n Object {\n \"completed\": true,\n \"text\": \"Write test\",\n },\n Object {\n \"completed\": true,\n \"text\": \"Write serialize\",\n },\n ],\n}\n*/\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n indent: 4,\n plugins: [plugin],\n }),\n);\n/*\nObject {\n \"filter\": \"completed\",\n \"items\": Array [\n Object {\n \"completed\": true,\n \"text\": \"Write test\",\n },\n Object {\n \"completed\": true,\n \"text\": \"Write serialize\",\n },\n ],\n}\n*/\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n maxDepth: 1,\n plugins: [plugin],\n }),\n);\n/*\nObject {\n \"filter\": \"completed\",\n \"items\": [Array],\n}\n*/\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n min: true,\n plugins: [plugin],\n }),\n);\n/*\n{\"filter\": \"completed\", \"items\": [{\"completed\": true, \"text\": \"Write test\"}, {\"completed\": true, \"text\": \"Write serialize\"}]}\n*/\n```\n\n### print\n\nThe **original** interface is adequate for plugins:\n\n- that **do not** depend on options other than `highlight` or `min`\n- that **do not** depend on `depth` or `refs` in recursive traversal, and\n- if values either\n - do **not** require indentation, or\n - do **not** occur as children of JavaScript data structures (for example, array)\n\nWrite `print` to return a string, given the arguments:\n\n- `val` which “passed the test”\n- current `printer(valChild)` callback function: serialize children\n- current `indenter(lines)` callback function: indent lines at the next level\n- unchanging `config` object: derived from `options`\n- unchanging `colors` object: derived from `options`\n\nThe 3 properties of `config` are `min` in `options` and:\n\n- `spacing` and `edgeSpacing` are **newline** if `min` is `false`\n- `spacing` is **space** and `edgeSpacing` is **empty string** if `min` is `true`\n\nEach property of `colors` corresponds to a property of `theme` in `options`:\n\n- the key is the same (for example, `tag`)\n- the value in `colors` is a object with `open` and `close` properties whose values are escape codes from [ansi-styles](https://github.com/chalk/ansi-styles) for the color value in `theme` (for example, `'cyan'`)\n\n### Example of print and test\n\nThis plugin prints functions with the **number of named arguments** excluding rest argument.\n\n```js\nconst plugin = {\n print(val) {\n return `[Function ${val.name || 'anonymous'} ${val.length}]`;\n },\n test(val) {\n return typeof val === 'function';\n },\n};\n```\n\n```js\nconst val = {\n onClick(event) {},\n render() {},\n};\n\nprettyFormat(val, {\n plugins: [plugin],\n});\n/*\nObject {\n \"onClick\": [Function onClick 1],\n \"render\": [Function render 0],\n}\n*/\n\nprettyFormat(val);\n/*\nObject {\n \"onClick\": [Function onClick],\n \"render\": [Function render],\n}\n*/\n```\n\nThis plugin **ignores** the `printFunctionName` option. That limitation of the original `print` interface is a reason to use the improved `serialize` interface, described above.\n\n```js\nprettyFormat(val, {\n plugins: [pluginOld],\n printFunctionName: false,\n});\n/*\nObject {\n \"onClick\": [Function onClick 1],\n \"render\": [Function render 0],\n}\n*/\n\nprettyFormat(val, {\n printFunctionName: false,\n});\n/*\nObject {\n \"onClick\": [Function],\n \"render\": [Function],\n}\n*/\n```\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/facebook/jest/issues"},"homepage":"https://github.com/facebook/jest#readme","_id":"pretty-format@24.0.0-alpha.16","_nodeVersion":"8.11.3","_npmVersion":"lerna/3.10.5/node@v8.11.3+x64 (darwin)","dist":{"integrity":"sha512-PyYQTFgN2Uy8idAj2HUlCAXFkffLBQhl8eUmNnR+UWPbft5991Vk/fnQaGnP3K+f3nbBBGdewhDnBsxKXMxx3Q==","shasum":"cb681b24c5520c31458c4df9274f6f1f68815f99","tarball":"http://localhost:4545/npm/registry/pretty-format/pretty-format-24.0.0-alpha.16.tgz","fileCount":18,"unpackedSize":573400,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcSxIsCRA9TVsSAnZWagAAdY4P+QHCCW8o2OsibKE0KJWY\nUOffzt5SuToQysh4aaDLqItVBX5L/9cF8JCkel+3AUeAQnsAZrQsjzylq2Ps\nUIOAbfc7c8sGV7/mMR9ttOmL3dOmpTmvioYq3Xl+M2w6VYU8n/sRf/UzqtPK\nFQPfiRMN5CG+WE6o9/aLtcXYEoStiYv/aXLu1XVLt0yCCkJc3C46tdig82em\nA4t1XfPfJswj/jWYjNGZ1QF9vVILP89CspUHF8I9m0yvjkj2264muCkFsRrL\nCJ/WQgn2Rzzc9EFy8ittV5jx74p1nqmfRtnQebHubDV6VwcWrmnwQlvPaDzV\niEHQE9rcj2eQnTdbClc70N1A2WWDqomCSg89Aprnbc81tOdHVBO+hc7a7FFl\ndUr4Ehq6WIlvssW26Q13Vzv8O/RqR1IZoeEo5EdzZdaaxTiJp9OBkcyHByKr\nldoKJlewx7RxvSiCLjOWEb6comz2kXWb9urDnDWAnNW8Skyu7ebI642xhyTa\nngJYxEDbzq5rdjPXb/sapMTM/PinfkWXTBdv7NSN5upyoYGR/z3JeXbOlx7O\nFWPR3Aum/w9TkA7ZMeFFWCnzoFoE84PYG57W1ZPHEvYjcxqErecxZPrVyNNp\ng+AYwairJrI5NiMFqJw5rVBgHsaE0hyeStOnwu7TdYPwHh7PAfdIZYIRQkeP\naCJP\r\n=btgG\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICzwmcL5HahccLSfOWNgLgd+JD+kWnqV3KLEzTtyV1G6AiAWtSzhFsWxmWeUiUgGNc0VdtNPXxsRoP4XCLshe+oL1g=="}]},"maintainers":[{"email":"aaron@abramov.io","name":"aaronabramov"},{"email":"christoph.pojer@gmail.com","name":"cpojer"},{"email":"opensource+npm@fb.com","name":"fb"},{"email":"jean@lauliac.com","name":"jeanlauliac"},{"email":"mjesun@hotmail.com","name":"mjesun"},{"email":"rubennorte@gmail.com","name":"rubennorte"}],"_npmUser":{"name":"rubennorte","email":"rubennorte@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pretty-format_24.0.0-alpha.16_1548423723701_0.7082266533575321"},"_hasShrinkwrap":false},"24.0.0":{"name":"pretty-format","version":"24.0.0","repository":{"type":"git","url":"git+https://github.com/facebook/jest.git","directory":"packages/pretty-format"},"license":"MIT","description":"Stringify any JavaScript value.","main":"build/index.js","browser":"build-es5/index.js","author":{"name":"James Kyle","email":"me@thejameskyle.com"},"dependencies":{"ansi-regex":"^4.0.0","ansi-styles":"^3.2.0"},"devDependencies":{"immutable":"4.0.0-rc.9","react":"*","react-dom":"*","react-test-renderer":"*"},"engines":{"node":">= 6"},"gitHead":"634e5a54f46b2a62d1dc81a170562e6f4e55ad60","bugs":{"url":"https://github.com/facebook/jest/issues"},"homepage":"https://github.com/facebook/jest#readme","_id":"pretty-format@24.0.0","_nodeVersion":"8.11.3","_npmVersion":"lerna/3.10.5/node@v8.11.3+x64 (darwin)","dist":{"integrity":"sha512-LszZaKG665djUcqg5ZQq+XzezHLKrxsA86ZABTozp+oNhkdqa+tG2dX4qa6ERl5c/sRDrAa3lHmwnvKoP+OG/g==","shasum":"cb6599fd73ac088e37ed682f61291e4678f48591","tarball":"http://localhost:4545/npm/registry/pretty-format/pretty-format-24.0.0.tgz","fileCount":18,"unpackedSize":573391,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcSyWbCRA9TVsSAnZWagAA+N4QAIcRq1APgOW3er3tNwoe\nqdFyMFDrLXhrsxfy3h++Jo20xzQ4AdcBtFs2SVIkeRTJZV1fG6FMw4t+/GHj\nUc0PFpBwrzBjX+vhgUOM/6Ct0pQ3a5bdT07mrqGbaTVcGfVNSjc65KPhdy2n\nf9Xs85f4453yHV0FfupVI4++YlNgymKeI5d4Ld4KI2LsgbSNkPUo3wNC0JSS\nsQwItsMWVK3VBp+uQtUyQmJ3D/qkxdtSr1hTQDEbtD0f9za4YbX8ITHnmhYI\noicHC1SyKrgkcyORmnyyCFHhOCSUPBML6Z9H3d0tdopavcxcBj1ecjPRj7nc\nJ+fR9F5YV+o9pRfhLYCOtTVj+wSs4scr+V8Krlpzovp2nmz4Om/jUZLMxyKH\npZ8k5rCZ6DA8L59GUhX6mncNXAtbRrBGuagVQxNm8LOjUe5LatIhI708fQXW\n7V8ojeJ7Qq6OSc+5YK7ofwYyQ/25S/xbffECb26kjqIrWX+YRErKU1u/KQRT\nFu0jZwwWaywZaekO414DAXFccAKf+hb0ZG0gPVYqMNEzNVlF14xD6Mnq/B97\nPnRFIkUQbpueLIl+ZiPl2jmcUv90LRmSQeQQudux67xnQZfZ0hAFFSSvH6oW\n+YEafy304JVs59SG9BQQ1/n+ZVwaULzuLBJuHw4lE0kgCRT2Vl4O+qpAxffe\nD2eD\r\n=tLhU\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQClRd81hqmrVnLv+62XmSIAJS8MWac/ELRE7+N6a/B4wQIhAICL5V+foclJHXipAfkRnnubcVipZNkVUghQ2ym7fz7f"}]},"maintainers":[{"email":"aaron@abramov.io","name":"aaronabramov"},{"email":"christoph.pojer@gmail.com","name":"cpojer"},{"email":"opensource+npm@fb.com","name":"fb"},{"email":"jean@lauliac.com","name":"jeanlauliac"},{"email":"mjesun@hotmail.com","name":"mjesun"},{"email":"rubennorte@gmail.com","name":"rubennorte"}],"_npmUser":{"name":"rubennorte","email":"rubennorte@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pretty-format_24.0.0_1548428698756_0.3964871886317509"},"_hasShrinkwrap":false},"24.2.0-alpha.0":{"name":"pretty-format","version":"24.2.0-alpha.0","repository":{"type":"git","url":"git+https://github.com/facebook/jest.git","directory":"packages/pretty-format"},"license":"MIT","description":"Stringify any JavaScript value.","main":"build/index.js","types":"build/index.d.ts","browser":"build-es5/index.js","author":{"name":"James Kyle","email":"me@thejameskyle.com"},"dependencies":{"@jest/types":"^24.2.0-alpha.0","ansi-regex":"^4.0.0","ansi-styles":"^3.2.0"},"devDependencies":{"@types/ansi-regex":"^4.0.0","@types/ansi-styles":"^3.2.1","@types/react":"*","@types/react-test-renderer":"*","immutable":"4.0.0-rc.9","react":"*","react-dom":"*","react-test-renderer":"*"},"engines":{"node":">= 6"},"publishConfig":{"access":"public"},"gitHead":"800f2f803d01c8ae194d71b251e4965dd70e5bf2","readme":"# pretty-format\n\n> Stringify any JavaScript value.\n\n- Supports all built-in JavaScript types\n - primitive types: `Boolean`, `null`, `Number`, `String`, `Symbol`, `undefined`\n - other non-collection types: `Date`, `Error`, `Function`, `RegExp`\n - collection types:\n - `arguments`, `Array`, `ArrayBuffer`, `DataView`, `Float32Array`, `Float64Array`, `Int8Array`, `Int16Array`, `Int32Array`, `Uint8Array`, `Uint8ClampedArray`, `Uint16Array`, `Uint32Array`,\n - `Map`, `Set`, `WeakMap`, `WeakSet`\n - `Object`\n- [Blazingly fast](https://gist.github.com/thejameskyle/2b04ffe4941aafa8f970de077843a8fd)\n - similar performance to `JSON.stringify` in v8\n - significantly faster than `util.format` in Node.js\n- Serialize application-specific data types with built-in or user-defined plugins\n\n## Installation\n\n```sh\n$ yarn add pretty-format\n```\n\n## Usage\n\n```js\nconst prettyFormat = require('pretty-format'); // CommonJS\n```\n\n```js\nimport prettyFormat from 'pretty-format'; // ES2015 modules\n```\n\n```js\nconst val = {object: {}};\nval.circularReference = val;\nval[Symbol('foo')] = 'foo';\nval.map = new Map([['prop', 'value']]);\nval.array = [-0, Infinity, NaN];\n\nconsole.log(prettyFormat(val));\n/*\nObject {\n \"array\": Array [\n -0,\n Infinity,\n NaN,\n ],\n \"circularReference\": [Circular],\n \"map\": Map {\n \"prop\" => \"value\",\n },\n \"object\": Object {},\n Symbol(foo): \"foo\",\n}\n*/\n```\n\n## Usage with options\n\n```js\nfunction onClick() {}\n\nconsole.log(prettyFormat(onClick));\n/*\n[Function onClick]\n*/\n\nconst options = {\n printFunctionName: false,\n};\nconsole.log(prettyFormat(onClick, options));\n/*\n[Function]\n*/\n```\n\n| key | type | default | description |\n| :------------------ | :-------- | :--------- | :------------------------------------------------------ |\n| `callToJSON` | `boolean` | `true` | call `toJSON` method (if it exists) on objects |\n| `escapeRegex` | `boolean` | `false` | escape special characters in regular expressions |\n| `escapeString` | `boolean` | `true` | escape special characters in strings |\n| `highlight` | `boolean` | `false` | highlight syntax with colors in terminal (some plugins) |\n| `indent` | `number` | `2` | spaces in each level of indentation |\n| `maxDepth` | `number` | `Infinity` | levels to print in arrays, objects, elements, and so on |\n| `min` | `boolean` | `false` | minimize added space: no indentation nor line breaks |\n| `plugins` | `array` | `[]` | plugins to serialize application-specific data types |\n| `printFunctionName` | `boolean` | `true` | include or omit the name of a function |\n| `theme` | `object` | | colors to highlight syntax in terminal |\n\nProperty values of `theme` are from [ansi-styles colors](https://github.com/chalk/ansi-styles#colors)\n\n```js\nconst DEFAULT_THEME = {\n comment: 'gray',\n content: 'reset',\n prop: 'yellow',\n tag: 'cyan',\n value: 'green',\n};\n```\n\n## Usage with plugins\n\nThe `pretty-format` package provides some built-in plugins, including:\n\n- `ReactElement` for elements from `react`\n- `ReactTestComponent` for test objects from `react-test-renderer`\n\n```js\n// CommonJS\nconst prettyFormat = require('pretty-format');\nconst ReactElement = prettyFormat.plugins.ReactElement;\nconst ReactTestComponent = prettyFormat.plugins.ReactTestComponent;\n\nconst React = require('react');\nconst renderer = require('react-test-renderer');\n```\n\n```js\n// ES2015 modules and destructuring assignment\nimport prettyFormat from 'pretty-format';\nconst {ReactElement, ReactTestComponent} = prettyFormat.plugins;\n\nimport React from 'react';\nimport renderer from 'react-test-renderer';\n```\n\n```js\nconst onClick = () => {};\nconst element = React.createElement('button', {onClick}, 'Hello World');\n\nconst formatted1 = prettyFormat(element, {\n plugins: [ReactElement],\n printFunctionName: false,\n});\nconst formatted2 = prettyFormat(renderer.create(element).toJSON(), {\n plugins: [ReactTestComponent],\n printFunctionName: false,\n});\n/*\n\n*/\n```\n\n## Usage in Jest\n\nFor snapshot tests, Jest uses `pretty-format` with options that include some of its built-in plugins. For this purpose, plugins are also known as **snapshot serializers**.\n\nTo serialize application-specific data types, you can add modules to `devDependencies` of a project, and then:\n\nIn an **individual** test file, you can add a module as follows. It precedes any modules from Jest configuration.\n\n```js\nimport serializer from 'my-serializer-module';\nexpect.addSnapshotSerializer(serializer);\n\n// tests which have `expect(value).toMatchSnapshot()` assertions\n```\n\nFor **all** test files, you can specify modules in Jest configuration. They precede built-in plugins for React, HTML, and Immutable.js data types. For example, in a `package.json` file:\n\n```json\n{\n \"jest\": {\n \"snapshotSerializers\": [\"my-serializer-module\"]\n }\n}\n```\n\n## Writing plugins\n\nA plugin is a JavaScript object.\n\nIf `options` has a `plugins` array: for the first plugin whose `test(val)` method returns a truthy value, then `prettyFormat(val, options)` returns the result from either:\n\n- `serialize(val, …)` method of the **improved** interface (available in **version 21** or later)\n- `print(val, …)` method of the **original** interface (if plugin does not have `serialize` method)\n\n### test\n\nWrite `test` so it can receive `val` argument of any type. To serialize **objects** which have certain properties, then a guarded expression like `val != null && …` or more concise `val && …` prevents the following errors:\n\n- `TypeError: Cannot read property 'whatever' of null`\n- `TypeError: Cannot read property 'whatever' of undefined`\n\nFor example, `test` method of built-in `ReactElement` plugin:\n\n```js\nconst elementSymbol = Symbol.for('react.element');\nconst test = val => val && val.$$typeof === elementSymbol;\n```\n\nPay attention to efficiency in `test` because `pretty-format` calls it often.\n\n### serialize\n\nThe **improved** interface is available in **version 21** or later.\n\nWrite `serialize` to return a string, given the arguments:\n\n- `val` which “passed the test”\n- unchanging `config` object: derived from `options`\n- current `indentation` string: concatenate to `indent` from `config`\n- current `depth` number: compare to `maxDepth` from `config`\n- current `refs` array: find circular references in objects\n- `printer` callback function: serialize children\n\n### config\n\n| key | type | description |\n| :------------------ | :-------- | :------------------------------------------------------ |\n| `callToJSON` | `boolean` | call `toJSON` method (if it exists) on objects |\n| `colors` | `Object` | escape codes for colors to highlight syntax |\n| `escapeRegex` | `boolean` | escape special characters in regular expressions |\n| `escapeString` | `boolean` | escape special characters in strings |\n| `indent` | `string` | spaces in each level of indentation |\n| `maxDepth` | `number` | levels to print in arrays, objects, elements, and so on |\n| `min` | `boolean` | minimize added space: no indentation nor line breaks |\n| `plugins` | `array` | plugins to serialize application-specific data types |\n| `printFunctionName` | `boolean` | include or omit the name of a function |\n| `spacingInner` | `strong` | spacing to separate items in a list |\n| `spacingOuter` | `strong` | spacing to enclose a list of items |\n\nEach property of `colors` in `config` corresponds to a property of `theme` in `options`:\n\n- the key is the same (for example, `tag`)\n- the value in `colors` is a object with `open` and `close` properties whose values are escape codes from [ansi-styles](https://github.com/chalk/ansi-styles) for the color value in `theme` (for example, `'cyan'`)\n\nSome properties in `config` are derived from `min` in `options`:\n\n- `spacingInner` and `spacingOuter` are **newline** if `min` is `false`\n- `spacingInner` is **space** and `spacingOuter` is **empty string** if `min` is `true`\n\n### Example of serialize and test\n\nThis plugin is a pattern you can apply to serialize composite data types. Of course, `pretty-format` does not need a plugin to serialize arrays :)\n\n```js\n// We reused more code when we factored out a function for child items\n// that is independent of depth, name, and enclosing punctuation (see below).\nconst SEPARATOR = ',';\nfunction serializeItems(items, config, indentation, depth, refs, printer) {\n if (items.length === 0) {\n return '';\n }\n const indentationItems = indentation + config.indent;\n return (\n config.spacingOuter +\n items\n .map(\n item =>\n indentationItems +\n printer(item, config, indentationItems, depth, refs), // callback\n )\n .join(SEPARATOR + config.spacingInner) +\n (config.min ? '' : SEPARATOR) + // following the last item\n config.spacingOuter +\n indentation\n );\n}\n\nconst plugin = {\n test(val) {\n return Array.isArray(val);\n },\n serialize(array, config, indentation, depth, refs, printer) {\n const name = array.constructor.name;\n return ++depth > config.maxDepth\n ? '[' + name + ']'\n : (config.min ? '' : name + ' ') +\n '[' +\n serializeItems(array, config, indentation, depth, refs, printer) +\n ']';\n },\n};\n```\n\n```js\nconst val = {\n filter: 'completed',\n items: [\n {\n text: 'Write test',\n completed: true,\n },\n {\n text: 'Write serialize',\n completed: true,\n },\n ],\n};\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n plugins: [plugin],\n }),\n);\n/*\nObject {\n \"filter\": \"completed\",\n \"items\": Array [\n Object {\n \"completed\": true,\n \"text\": \"Write test\",\n },\n Object {\n \"completed\": true,\n \"text\": \"Write serialize\",\n },\n ],\n}\n*/\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n indent: 4,\n plugins: [plugin],\n }),\n);\n/*\nObject {\n \"filter\": \"completed\",\n \"items\": Array [\n Object {\n \"completed\": true,\n \"text\": \"Write test\",\n },\n Object {\n \"completed\": true,\n \"text\": \"Write serialize\",\n },\n ],\n}\n*/\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n maxDepth: 1,\n plugins: [plugin],\n }),\n);\n/*\nObject {\n \"filter\": \"completed\",\n \"items\": [Array],\n}\n*/\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n min: true,\n plugins: [plugin],\n }),\n);\n/*\n{\"filter\": \"completed\", \"items\": [{\"completed\": true, \"text\": \"Write test\"}, {\"completed\": true, \"text\": \"Write serialize\"}]}\n*/\n```\n\n### print\n\nThe **original** interface is adequate for plugins:\n\n- that **do not** depend on options other than `highlight` or `min`\n- that **do not** depend on `depth` or `refs` in recursive traversal, and\n- if values either\n - do **not** require indentation, or\n - do **not** occur as children of JavaScript data structures (for example, array)\n\nWrite `print` to return a string, given the arguments:\n\n- `val` which “passed the test”\n- current `printer(valChild)` callback function: serialize children\n- current `indenter(lines)` callback function: indent lines at the next level\n- unchanging `config` object: derived from `options`\n- unchanging `colors` object: derived from `options`\n\nThe 3 properties of `config` are `min` in `options` and:\n\n- `spacing` and `edgeSpacing` are **newline** if `min` is `false`\n- `spacing` is **space** and `edgeSpacing` is **empty string** if `min` is `true`\n\nEach property of `colors` corresponds to a property of `theme` in `options`:\n\n- the key is the same (for example, `tag`)\n- the value in `colors` is a object with `open` and `close` properties whose values are escape codes from [ansi-styles](https://github.com/chalk/ansi-styles) for the color value in `theme` (for example, `'cyan'`)\n\n### Example of print and test\n\nThis plugin prints functions with the **number of named arguments** excluding rest argument.\n\n```js\nconst plugin = {\n print(val) {\n return `[Function ${val.name || 'anonymous'} ${val.length}]`;\n },\n test(val) {\n return typeof val === 'function';\n },\n};\n```\n\n```js\nconst val = {\n onClick(event) {},\n render() {},\n};\n\nprettyFormat(val, {\n plugins: [plugin],\n});\n/*\nObject {\n \"onClick\": [Function onClick 1],\n \"render\": [Function render 0],\n}\n*/\n\nprettyFormat(val);\n/*\nObject {\n \"onClick\": [Function onClick],\n \"render\": [Function render],\n}\n*/\n```\n\nThis plugin **ignores** the `printFunctionName` option. That limitation of the original `print` interface is a reason to use the improved `serialize` interface, described above.\n\n```js\nprettyFormat(val, {\n plugins: [pluginOld],\n printFunctionName: false,\n});\n/*\nObject {\n \"onClick\": [Function onClick 1],\n \"render\": [Function render 0],\n}\n*/\n\nprettyFormat(val, {\n printFunctionName: false,\n});\n/*\nObject {\n \"onClick\": [Function],\n \"render\": [Function],\n}\n*/\n```\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/facebook/jest/issues"},"homepage":"https://github.com/facebook/jest#readme","_id":"pretty-format@24.2.0-alpha.0","_nodeVersion":"8.11.3","_npmVersion":"lerna/3.13.1/node@v8.11.3+x64 (darwin)","dist":{"integrity":"sha512-DIP/yjxErpfZtVj0KqQmm0mMFeTXNxRvDIIuxC0UUaUCmB/0FkmxqK3nZHiz+2d3h4t0Ip9jZevGTee6wOvktg==","shasum":"2002b94909973e765d7a05d28770eb17ade476a4","tarball":"http://localhost:4545/npm/registry/pretty-format/pretty-format-24.2.0-alpha.0.tgz","fileCount":44,"unpackedSize":596156,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcfovTCRA9TVsSAnZWagAASlYP+wRIBdBq74lZPK8TPK9+\n+YDUGqxHM36ZtYGc1u+zKprAq0hW+IXl860gVLkXNwmbY71mPRse879QOvAD\nGsX05bLODWe1i9cCXCIhMTxDSdNwvbPfUFoLmteiR0LYdm+hSA/VgQ8TGNvb\nE72rKzQ5wyzij8NVQHLU8leKLFv30jft6qHY4g3QmOUHM/iLAUW/TNWP9qle\n79XNdpcGkxkdHmkx1VKoLSK2Fu7MbXoHZQNtZNLGQX5aPS3UM8msr1Y8JgC5\nrhZ0N/ajR0r97I6b4rb0dkw6ibUdObsSzzByODZ5bOBdWHL1Jstv4iD1X8lt\nCVfuLjw+6hjPa/ijzKdevz3173r2c+O4TOrSRrbW/ef3Z9Li+jX67jPw1rBk\nQiR9tGX7QiM3f5lUq7+nPIR5sV5yWZK4A3m9e/kWbrFza3+3M780w8hiIAGa\nQoTGgsuGWZOckGwih8wQMRhwDFRZ8aQzb60Dxw2jckjnisL6UgvKdqS5izGy\n8BZAsFMXTeriBZrosSWbZC4whSKGRrAxvqvi1ttm24wff+4kP1qNjHK3LrfE\nrfxcTJZDcafcnr8IEbaydWCOHU3wFGnmJ4OAn11cFhtgkhOwYx4oNf/xl0fq\nj4l41c0yk/yy3wmOymP2CMbds3nbaSrIzNY8SO78jNADj2m/MB9U1Ihs85i7\n6mgC\r\n=zSqR\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCVDKnmrmsXnEzHgc2AhDSg+ktpBqsTQCdec8I7d7eyKAIhAJyKedyUsDaYneNqRrpAVnlhZ+C8i24UDoDOJshOiwtR"}]},"maintainers":[{"email":"aaron@abramov.io","name":"aaronabramov"},{"email":"christoph.pojer@gmail.com","name":"cpojer"},{"email":"opensource+npm@fb.com","name":"fb"},{"email":"jean@lauliac.com","name":"jeanlauliac"},{"email":"mjesun@hotmail.com","name":"mjesun"},{"email":"rubennorte@gmail.com","name":"rubennorte"}],"_npmUser":{"name":"rubennorte","email":"rubennorte@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pretty-format_24.2.0-alpha.0_1551797202724_0.37915218536956163"},"_hasShrinkwrap":false},"24.3.0":{"name":"pretty-format","version":"24.3.0","repository":{"type":"git","url":"git+https://github.com/facebook/jest.git","directory":"packages/pretty-format"},"license":"MIT","description":"Stringify any JavaScript value.","main":"build/index.js","types":"build/index.d.ts","browser":"build-es5/index.js","author":{"name":"James Kyle","email":"me@thejameskyle.com"},"dependencies":{"@jest/types":"^24.3.0","ansi-regex":"^4.0.0","ansi-styles":"^3.2.0"},"devDependencies":{"@types/ansi-regex":"^4.0.0","@types/ansi-styles":"^3.2.1","@types/react":"*","@types/react-test-renderer":"*","immutable":"4.0.0-rc.9","react":"*","react-dom":"*","react-test-renderer":"*"},"engines":{"node":">= 6"},"publishConfig":{"access":"public"},"gitHead":"3a7a4f3a3f5489ac8e07dcddf76bb949c482ec87","bugs":{"url":"https://github.com/facebook/jest/issues"},"homepage":"https://github.com/facebook/jest#readme","_id":"pretty-format@24.3.0","_nodeVersion":"8.11.3","_npmVersion":"lerna/3.13.1/node@v8.11.3+x64 (darwin)","dist":{"integrity":"sha512-oz+EQc2uda3ql4JluWTWEQgegTo9cMkVcqXxBieSV1opZ4SE1TKuFBDoSk7jGOb08UgwQVHMkVSINB8jQyUFQg==","shasum":"e7eaefecd28d714fc6425dc2d5f9ed30e1188b26","tarball":"http://localhost:4545/npm/registry/pretty-format/pretty-format-24.3.0.tgz","fileCount":44,"unpackedSize":596140,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcgRW8CRA9TVsSAnZWagAA1pcP/2AmdxUsL7zAbLrLD3+p\nT7lORL1r2hnc7j05Pkir+URB2Svpcm5XrU87gPvIHBa8xQYHBtf+c8R67AzC\nAZ0sSfnsOQ6nNB8Xli7WS2S0aQvHOtoz1aCx7hkwgtbpeJEhdzKnh8fdeq4z\nTX0y+rk5ZXvVi04kvruX7uUlhAsgDooFs5R+WaUH/LQgR8MwzFF2KKfbCW+F\nUcOwGndt1W8tNOi0DgzKNsrYz2GApHeGu20ttQmY2TXigG7jpzLG7oolhfIG\nSmN/DucsbEzZ5Z/B8M/2Du1s/wr8rDDYJJElw75Ias1WzosY2y2rsP8VE+zF\nh/AuT+gINmH7hjAdfmrWNlq3izPHB5YjpLTHFKkxwaZXMC9V3bVGSiKW4qWD\nR0R5IFvzcJOU3Aphe4XMq6s7F0uQVoBwBW+h0B8MtxZZt57NOIBhM2OibzQa\nsorrxUogYo2V7ljrTMP9jY0zod36/B+pOX8kZgSC9XvvmIjQs1kTMFbITdBX\n3QTty66Av0RbwC5I0wh6wIic5F9QpaFt6p12/1uySJSvI6z4zcaIMKhwbdYR\npJWOQuI3IOjf/hbXaYPrNy+d+Ixd7wSjqHqHkcQt/f7AywTZ1g2dOC3AfId0\nLydgBjAX2wIjHxPV4jyninSdfLAPtnONilsuBww7BuLF8F6PmYZGAMGdlut8\nqe7p\r\n=5UNq\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCSHI/hauUi9hi7gCFJJVt1QnHgwO9g1tpayMj3yCHWpAIhAN0ROVecaCnLV8v6MuilaflI0TaT7y1nClr8ehRt6Bgo"}]},"maintainers":[{"email":"aaron@abramov.io","name":"aaronabramov"},{"email":"christoph.pojer@gmail.com","name":"cpojer"},{"email":"opensource+npm@fb.com","name":"fb"},{"email":"jean@lauliac.com","name":"jeanlauliac"},{"email":"mjesun@hotmail.com","name":"mjesun"},{"email":"rubennorte@gmail.com","name":"rubennorte"}],"_npmUser":{"name":"rubennorte","email":"rubennorte@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pretty-format_24.3.0_1551963579497_0.521788719833167"},"_hasShrinkwrap":false},"24.3.1":{"name":"pretty-format","version":"24.3.1","repository":{"type":"git","url":"git+https://github.com/facebook/jest.git","directory":"packages/pretty-format"},"license":"MIT","description":"Stringify any JavaScript value.","main":"build/index.js","types":"build/index.d.ts","browser":"build-es5/index.js","author":{"name":"James Kyle","email":"me@thejameskyle.com"},"dependencies":{"@jest/types":"^24.3.0","ansi-regex":"^4.0.0","ansi-styles":"^3.2.0","react-is":"^16.8.4"},"devDependencies":{"@types/ansi-regex":"^4.0.0","@types/ansi-styles":"^3.2.1","@types/react":"*","@types/react-is":"^16.7.1","@types/react-test-renderer":"*","immutable":"4.0.0-rc.9","react":"*","react-dom":"*","react-test-renderer":"*"},"engines":{"node":">= 6"},"publishConfig":{"access":"public"},"gitHead":"65c6e9d5e398711c011078bb72648c77fc8a8cb3","bugs":{"url":"https://github.com/facebook/jest/issues"},"homepage":"https://github.com/facebook/jest#readme","_id":"pretty-format@24.3.1","_nodeVersion":"8.11.3","_npmVersion":"lerna/3.13.1/node@v8.11.3+x64 (darwin)","dist":{"integrity":"sha512-NZGH1NWS6o4i9pvRWLsxIK00JB9pqOUzVrO7yWT6vjI2thdxwvxefBJO6O5T24UAhI8P5dMceZ7x5wphgVI7Mg==","shasum":"ae4a98e93d73d86913a8a7dd1a7c3c900f8fda59","tarball":"http://localhost:4545/npm/registry/pretty-format/pretty-format-24.3.1.tgz","fileCount":44,"unpackedSize":622603,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcgaVVCRA9TVsSAnZWagAAz8IQAIynpzqNxGvuqNL03v6s\nhIyHV/m4ThzMQmxaenx0vCPbYz89P0yICDFUxlYr9NUros7pGnzaRrl5xeg3\n3GUp4AZ5GYvEKWES6QRQoVp15Gu4JTjgBoxD8DiDtQJHS8LbPmPC8i6O1hZu\nmUccpWA/sM+lPl5LWzhepcQMwvoh0we3S5jMUY/vkCRZRFkoYGtbp5QEn7Hc\n05CQRTt7xX7e2UGMCCJJk2MsZU+GfDZEcBi28jgBqA+Glq/+cYhENfagdDOC\nMBrSnCRn4WFpyIqI6lqgz/3cOCo7C25nEI4Pg8tNiD/PFCURplV0P5I73J+I\nwpDaetQ3ZR/CfPYKjF3mzWVXPQTMUu61gWasQ6b1D6zzm6/ytUp8dtYZJFWt\nLghaxmYIh9tf9tAcPmbuUSeG9n3oIFceRtLAS5rpQLUc0ngHTx03wfOho0Wu\ne7FzyAv4O+HUfTLaTASaxfeoGukjmM38s6baQ3dB4fUKKXeCAnIQpvctALaR\nqIvd1i3rZ+3uTwDJ6UFokCnTBgOMeCZWXR0NddcGdLc3IwOos1F0fJ1UiPh4\nTYGuSLhon+Swa6XfI8W7jKKY7qRHPJnXFL/RE1MZgeLV+sJUN2pmOdjZ40AR\n8tYiajZdEtCyAxOr4dNnIBVKSRE/PU2RqY/gwFBsNU7ChmCwzeTziu4Pdlkt\n7/rm\r\n=Jipz\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCrc+yStysXaRXk1CS2YSGJGI6AiMAgzmDz+cJEj3R/9wIhANk8fhl8e3KJbItVK1DBiIBwLnDoxa/tCu45C4QtTj0W"}]},"maintainers":[{"email":"aaron@abramov.io","name":"aaronabramov"},{"email":"christoph.pojer@gmail.com","name":"cpojer"},{"email":"opensource+npm@fb.com","name":"fb"},{"email":"jean@lauliac.com","name":"jeanlauliac"},{"email":"mjesun@hotmail.com","name":"mjesun"},{"email":"rubennorte@gmail.com","name":"rubennorte"}],"_npmUser":{"name":"rubennorte","email":"rubennorte@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pretty-format_24.3.1_1552000340349_0.3039072455196825"},"_hasShrinkwrap":false},"24.4.0":{"name":"pretty-format","version":"24.4.0","repository":{"type":"git","url":"git+https://github.com/facebook/jest.git","directory":"packages/pretty-format"},"license":"MIT","description":"Stringify any JavaScript value.","main":"build/index.js","types":"build/index.d.ts","browser":"build-es5/index.js","author":{"name":"James Kyle","email":"me@thejameskyle.com"},"dependencies":{"@jest/types":"^24.3.0","ansi-regex":"^4.0.0","ansi-styles":"^3.2.0","react-is":"^16.8.4"},"devDependencies":{"@types/ansi-regex":"^4.0.0","@types/ansi-styles":"^3.2.1","@types/react":"*","@types/react-is":"^16.7.1","@types/react-test-renderer":"*","immutable":"4.0.0-rc.9","react":"*","react-dom":"*","react-test-renderer":"*"},"engines":{"node":">= 6"},"publishConfig":{"access":"public"},"gitHead":"a018000fc162db3cfd0ebf9f23fdb734f05821a6","bugs":{"url":"https://github.com/facebook/jest/issues"},"homepage":"https://github.com/facebook/jest#readme","_id":"pretty-format@24.4.0","_nodeVersion":"8.11.3","_npmVersion":"lerna/3.13.1/node@v8.11.3+x64 (darwin)","dist":{"integrity":"sha512-SEXFzT01NwO4vaymwhz1/CM+wKCLOT92uqrzxIjmdRQMt7JAEuZ2eInCMvDS+4ZidEB+Rdq+fMs/Vwse8VAh1A==","shasum":"48db91969eb89f272c1bf3514bc5d5b228b3e722","tarball":"http://localhost:4545/npm/registry/pretty-format/pretty-format-24.4.0.tgz","fileCount":44,"unpackedSize":622603,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJchnduCRA9TVsSAnZWagAAtRAP/ifWu1s887EhYW/Z+oc1\nWZ3R0ZkfG23rSDieHJ2/Z6n31R297NFEPUK0mcxDk1uyurTXbLjD3Y9m/2xE\n2HlecZ8sOMEfLvxjg7TOup7IKGREQCjxKG6UeZURfnfv+4SQ4tcoc4xgVZmL\nBy35+RV3hGR0AgCFTl61l9YOQ11cMn46kRhsylf5+lMjgQ3MxRFAsQhrVIf5\nYr7Mm24DWbx8vdOCtMkmMMhVdghxRARBcKYhPqw6gsO6A8ioFVuAFWh49fJ9\nWxALtwV8gRW4NyDFT978Z4QHe46f1No46jrDJDzH9l5bLq/xEELtpjMTOAIs\nIEumtnK01Xl+zjsabGn1gVblehwrJLqrUFUduSOPbq36h7cb6GJhnjt3tmUO\n5Vve5lovRk/Ko6KrjR+mepyg615n9B2wrRKsJDwrgulEUb8vm+oJjoSG5pju\nKG5zDzPCj7IvxSXnMwcFSspswgQT5pAC/hJvenDfy+4LvpKvUlvwlZknmzN+\nPQoHr8esr2VAsPjTChEAkFpI/us17p+g+zf4wpURFzygBXNjibydjrtjGNLM\nawz9GqPvRuq1CwvwQcdiilIJGpxIoJsScZqT+Zr/rqgKUv2ySukB+wwmZfiJ\nDeK+4wEmG62THd2OmK09PCvkZbEaSYnoJxpSlUKwYccvhzqCOWZ0KYHzA/vP\nwGeU\r\n=ecFg\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEdc8lw3DMq/3DfsFV8PvTehXtyZ/jaYNZwvDsu0+eXZAiEA0bxox2Ku4jEGDV9f4tsuGmt8BgCBYu80POqJSM3RVOo="}]},"maintainers":[{"email":"aaron@abramov.io","name":"aaronabramov"},{"email":"christoph.pojer@gmail.com","name":"cpojer"},{"email":"opensource+npm@fb.com","name":"fb"},{"email":"jean@lauliac.com","name":"jeanlauliac"},{"email":"mjesun@hotmail.com","name":"mjesun"},{"email":"rubennorte@gmail.com","name":"rubennorte"}],"_npmUser":{"name":"rubennorte","email":"rubennorte@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pretty-format_24.4.0_1552316269282_0.7008450752930335"},"_hasShrinkwrap":false},"24.5.0":{"name":"pretty-format","version":"24.5.0","repository":{"type":"git","url":"git+https://github.com/facebook/jest.git","directory":"packages/pretty-format"},"license":"MIT","description":"Stringify any JavaScript value.","main":"build/index.js","types":"build/index.d.ts","browser":"build-es5/index.js","author":{"name":"James Kyle","email":"me@thejameskyle.com"},"dependencies":{"@jest/types":"^24.5.0","ansi-regex":"^4.0.0","ansi-styles":"^3.2.0","react-is":"^16.8.4"},"devDependencies":{"@types/ansi-regex":"^4.0.0","@types/ansi-styles":"^3.2.1","@types/react":"*","@types/react-is":"^16.7.1","@types/react-test-renderer":"*","immutable":"4.0.0-rc.9","react":"*","react-dom":"*","react-test-renderer":"*"},"engines":{"node":">= 6"},"publishConfig":{"access":"public"},"gitHead":"800533020f5b2f153615c821ed7cb12fd868fa6f","bugs":{"url":"https://github.com/facebook/jest/issues"},"homepage":"https://github.com/facebook/jest#readme","_id":"pretty-format@24.5.0","_nodeVersion":"8.11.3","_npmVersion":"lerna/3.13.1/node@v8.11.3+x64 (darwin)","dist":{"integrity":"sha512-/3RuSghukCf8Riu5Ncve0iI+BzVkbRU5EeUoArKARZobREycuH5O4waxvaNIloEXdb0qwgmEAed5vTpX1HNROQ==","shasum":"cc69a0281a62cd7242633fc135d6930cd889822d","tarball":"http://localhost:4545/npm/registry/pretty-format/pretty-format-24.5.0.tgz","fileCount":44,"unpackedSize":622603,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJch+AOCRA9TVsSAnZWagAA294P/jD2ZGgKwbOUWB0zKthC\nu0sLGOPQ2pBXqRw/H0hrwhNbF3cFTMVTYnC2lSNBnYgeyrJXddPgjKZLdLIJ\nb5YWEYG73AxzdrGv+lEytaL1umkiw7QU7TwdtXZLz10NeREBplC+d+ogJu0T\nFjgcmb56ccCH09PAXRZWuLBC/N2ovXO2djQp7qmj3FVO3OSgWFxtHQWyuzRK\nfK9m9N+krTwxIG8QEX/hSgIMHMEzhMzuKZAf6+q8kBxDF8dW404QeybZ8zl8\n4dhhwqMcm6oZJ/LqRaJ7BBaN8QvFmJTDtLRvnQjrFo/dzni0H1tmGnokg1cd\n+wIuyJJDtx5kY+VKdAOOZfkeJaxLATVwI//l/QF9E+d0mQm3f00kua2QmVgg\nl9cMYCVKTni5GSFB6MOx5YQ9q6lo9epEI8W0Il4AS5PC+MSrbOA+cySuygu7\nCaQuHDL9kviIydwVSFGPkhnBvA+el8181co51+s88PQYUxZT476ViMPmk4dV\nH51bUGV7t8zhoqSSVbLOFyyZH4rORJUvnIVu17lsBAP7nWC25b2eiQPcafAy\ntIaGDld+cjSYPZ7lgwrVVA2tcqp5OWlKTzpQ8pCqCjk6YL+BdHpMKjXvcjDf\nGRiTs6zddGHhs3bCGS0/fS2IC4jkMhfnnltSXkGPsWphU/rb2ES15Q9vY6fS\nbIEw\r\n=DjMX\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCNLS7Tur7dveLgWdc/OS2fEgM53hyHL6cifGcGLKwTNwIhANWtnr3vqOnLs1aQaO1a7AdqTT4SFpUfA+Lso3N/ZUjl"}]},"maintainers":[{"email":"aaron@abramov.io","name":"aaronabramov"},{"email":"christoph.pojer@gmail.com","name":"cpojer"},{"email":"opensource+npm@fb.com","name":"fb"},{"email":"jean@lauliac.com","name":"jeanlauliac"},{"email":"mjesun@hotmail.com","name":"mjesun"},{"email":"rubennorte@gmail.com","name":"rubennorte"}],"_npmUser":{"name":"rubennorte","email":"rubennorte@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pretty-format_24.5.0_1552408587076_0.3403435260679679"},"_hasShrinkwrap":false},"24.6.0":{"name":"pretty-format","version":"24.6.0","repository":{"type":"git","url":"git+https://github.com/facebook/jest.git","directory":"packages/pretty-format"},"license":"MIT","description":"Stringify any JavaScript value.","main":"build/index.js","types":"build/index.d.ts","browser":"build-es5/index.js","author":{"name":"James Kyle","email":"me@thejameskyle.com"},"dependencies":{"@jest/types":"^24.6.0","ansi-regex":"^4.0.0","ansi-styles":"^3.2.0","react-is":"^16.8.4"},"devDependencies":{"@types/ansi-regex":"^4.0.0","@types/ansi-styles":"^3.2.1","@types/react":"*","@types/react-is":"^16.7.1","@types/react-test-renderer":"*","immutable":"4.0.0-rc.9","react":"*","react-dom":"*","react-test-renderer":"*"},"engines":{"node":">= 6"},"publishConfig":{"access":"public"},"gitHead":"04e6a66d2ba8b18bee080bb28547db74a255d2c7","bugs":{"url":"https://github.com/facebook/jest/issues"},"homepage":"https://github.com/facebook/jest#readme","_id":"pretty-format@24.6.0","_nodeVersion":"8.11.3","_npmVersion":"lerna/3.13.1/node@v8.11.3+x64 (darwin)","dist":{"integrity":"sha512-xEeJZFqXgvzSEMxoZ3j4aTaax/pl1upVsfMstcIC048Id84Ve5aqX0WkAta/wFIBLDRz6Tbuj6HcoBXRNk7rtA==","shasum":"66124fe5ea5c4d473337a204ece220e8fdc9806c","tarball":"http://localhost:4545/npm/registry/pretty-format/pretty-format-24.6.0.tgz","fileCount":45,"unpackedSize":791376,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcopAPCRA9TVsSAnZWagAAxY4QAKLe/nkYNTng0Pr07MrM\nCPddOLHI3wr6NYqIysMwP/dTd6dZwKBQjoX+qmSrVZzyePlLmmqpBabZuO3h\n2KVto2/cHcQPEN3ifrlGuEbpSDbskkjoITnm5dzLr+GeyzK0PlYScVXHR3ja\nzAqtaRdSTvNRsiaF7BIuipuVv7gOAmiFId13JTB8x+hb3Hc3JpvjFSrvBmgw\nZei+FUFHXWzl2otP9DHJFqLNHMBZtXMmmulmq582VaoQQpK5bx3COsYDK4IC\n+tfl0wpQOaHWbqOZcYI6JPrWOjySK1P5VFY42+hxgnGx9vMh+U1kcS1suxuF\nFfsvJMeh4rnhMvDdIII+2EtNxENZDwODjFlrKf4C3vMpBZJFjETTw98s7ZWt\nqChApqo7ncQSAC5jb/iuY6mtJZ8qc995W7f2I/QwguzDUa3+96mM6Q7H/N3t\nXt/v6nR8CKnkL1EoagzAidWFG1kT/2zuixfWW510yD9XhD0ZJ1WBIZhWs1gl\ngEv6sWcJ0pSOK2ZMnQyucoJvl+0ajqsXP3ivHIIm/y611wr7npDJQyQoWL7+\nt1OQVi8BzlnUg9w/bk5guJHNxUoBSTJRBV7B06D+w4zjF8jg/Of8+P7KTRJd\n4kv3JGFHCGbT9d8l6KzMqMihCbQMRogdot9uRu+GRjYIhAfGB1z4DR43ochp\nCh2E\r\n=UeHv\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCID6z8RXp7k1tgJsOMldl1jGePekxNy7YbtdD/ZlV3SukAiAjmGFOyZ0yHxzNGlCWccutpMLPIdPLfxU/cI4MGLUCyA=="}]},"maintainers":[{"email":"aaron@abramov.io","name":"aaronabramov"},{"email":"christoph.pojer@gmail.com","name":"cpojer"},{"email":"opensource+npm@fb.com","name":"fb"},{"email":"jean@lauliac.com","name":"jeanlauliac"},{"email":"mjesun@hotmail.com","name":"mjesun"},{"email":"rubennorte@gmail.com","name":"rubennorte"},{"email":"scott.hovestadt@gmail.com","name":"scotthovestadt"}],"_npmUser":{"name":"rubennorte","email":"rubennorte@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pretty-format_24.6.0_1554157582735_0.10815463953542226"},"_hasShrinkwrap":false},"24.7.0":{"name":"pretty-format","version":"24.7.0","repository":{"type":"git","url":"git+https://github.com/facebook/jest.git","directory":"packages/pretty-format"},"license":"MIT","description":"Stringify any JavaScript value.","main":"build/index.js","types":"build/index.d.ts","browser":"build-es5/index.js","author":{"name":"James Kyle","email":"me@thejameskyle.com"},"dependencies":{"@jest/types":"^24.7.0","ansi-regex":"^4.0.0","ansi-styles":"^3.2.0","react-is":"^16.8.4"},"devDependencies":{"@types/ansi-regex":"^4.0.0","@types/ansi-styles":"^3.2.1","@types/react":"*","@types/react-is":"^16.7.1","@types/react-test-renderer":"*","immutable":"4.0.0-rc.9","react":"*","react-dom":"*","react-test-renderer":"*"},"engines":{"node":">= 6"},"publishConfig":{"access":"public"},"gitHead":"eb0413622542bc0f70c32950d9daeeab9f6802ac","bugs":{"url":"https://github.com/facebook/jest/issues"},"homepage":"https://github.com/facebook/jest#readme","_id":"pretty-format@24.7.0","_nodeVersion":"11.12.0","_npmVersion":"lerna/3.13.1/node@v11.12.0+x64 (darwin)","dist":{"integrity":"sha512-apen5cjf/U4dj7tHetpC7UEFCvtAgnNZnBDkfPv3fokzIqyOJckAG9OlAPC1BlFALnqT/lGB2tl9EJjlK6eCsA==","shasum":"d23106bc2edcd776079c2daa5da02bcb12ed0c10","tarball":"http://localhost:4545/npm/registry/pretty-format/pretty-format-24.7.0.tgz","fileCount":45,"unpackedSize":775050,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcpC6mCRA9TVsSAnZWagAAZBQP/0NYct5cIFkRC9jgK5tA\n5Ra7ErtFJs1UvSjIsAgtAWzjQX15RSRLaQLF75eTp09mcYbaPMxLaJHxNcDp\n9XWhsewLD0uMTmYbmzLuOWctE9nJeeEPbCVh1nGpOUzHuEqyvtK9ECUfEQwv\nL1Npw4a350N0UwbTRNEXcPDHIpU5+jHwBsWnLfZYVs2KBrS5qSdjUYSdVplF\nh/ET9jR6fyFSLegHjjhwOifNMd7a6+Palxo5JrKysn2fl0rAOihjGbjUKJq8\nIHXmytYLqNkAKV1oBrmsaiC0JxDXFCgbdZA4RArUkKfJL8OUUaMU8BansQNk\n/4yvh7Ier2e9B7xY/1iTnHhLMvGy+le+YWTGljaAUxDuirdIek3M7rFIUe/D\nwMAMdV9yeM96aSKr4/F2Yw2HsypKL7C936qixleI5VbInzl0NTzuLe+OYuSb\nd9pR25lDBlbCFYmMLjnit0TQm7lRigD3otQQhHSmB2BHlM+iUTEYqs0oexDb\nLRpY3CiaeObvBR8D1uFHVxQ8YoSH/GRDjBjqHJsIp3H+dHNRikOtbfnzwFjH\n4Ebc2pt6Meio+cwnZguKuSnZQxdJdQWrqgvcXrFkGLZ06OO+VT4QMpLudxgh\nSfvtK3tLrL/lKvpv5/rcg7eF4lUH0xsAfYOAQosuogBs/G1ggXygD3vGPwzs\nTKKL\r\n=0eeS\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCID5wtI70xlGs+U+GINasQ0uA27B0uH1/7oXXc+EXWh6IAiEAkBLBDRfpoRE4kFf7NGXG25241GS0j3JJaBtXJV+MjFA="}]},"maintainers":[{"email":"aaron@abramov.io","name":"aaronabramov"},{"email":"christoph.pojer@gmail.com","name":"cpojer"},{"email":"opensource+npm@fb.com","name":"fb"},{"email":"jean@lauliac.com","name":"jeanlauliac"},{"email":"mjesun@hotmail.com","name":"mjesun"},{"email":"rubennorte@gmail.com","name":"rubennorte"},{"email":"scott.hovestadt@gmail.com","name":"scotthovestadt"}],"_npmUser":{"name":"scotthovestadt","email":"scott.hovestadt@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pretty-format_24.7.0_1554263717891_0.10220866426617281"},"_hasShrinkwrap":false},"24.8.0":{"name":"pretty-format","version":"24.8.0","repository":{"type":"git","url":"git+https://github.com/facebook/jest.git","directory":"packages/pretty-format"},"license":"MIT","description":"Stringify any JavaScript value.","main":"build/index.js","types":"build/index.d.ts","browser":"build-es5/index.js","author":{"name":"James Kyle","email":"me@thejameskyle.com"},"dependencies":{"@jest/types":"^24.8.0","ansi-regex":"^4.0.0","ansi-styles":"^3.2.0","react-is":"^16.8.4"},"devDependencies":{"@types/ansi-regex":"^4.0.0","@types/ansi-styles":"^3.2.1","@types/react":"*","@types/react-is":"^16.7.1","@types/react-test-renderer":"*","immutable":"4.0.0-rc.9","react":"*","react-dom":"*","react-test-renderer":"*"},"engines":{"node":">= 6"},"publishConfig":{"access":"public"},"gitHead":"845728f24b3ef41e450595c384e9b5c9fdf248a4","bugs":{"url":"https://github.com/facebook/jest/issues"},"homepage":"https://github.com/facebook/jest#readme","_id":"pretty-format@24.8.0","_nodeVersion":"11.12.0","_npmVersion":"lerna/3.13.1/node@v11.12.0+x64 (darwin)","dist":{"integrity":"sha512-P952T7dkrDEplsR+TuY7q3VXDae5Sr7zmQb12JU/NDQa/3CH7/QW0yvqLcGN6jL+zQFKaoJcPc+yJxMTGmosqw==","shasum":"8dae7044f58db7cb8be245383b565a963e3c27f2","tarball":"http://localhost:4545/npm/registry/pretty-format/pretty-format-24.8.0.tgz","fileCount":45,"unpackedSize":777296,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJczkQuCRA9TVsSAnZWagAAAD8QAKNQruzhB2kqd1afY0cK\nMGKQN+EpZ0oxOQgcTd9Kbvu1YEJdww5U+/oywnfFllTp/pE0feHxWxsrMWxf\n1OJJA1XpkX8fvRYUm31QelayY10Q6FDf0muFAXKVxSiPJ56Hc3tuhJ8RPVCR\nQ94+c3+1i8jKLqVUUpmA+JA85udP8fDPEZDZKnoCJbg84qC5Lv9J7FCl9hQm\nAkrzyxF/aNoCcNTWavJzoPXIqlKTDQaMMz/QbF2jXf+VEou/n67y1SBJrCIm\nGejWAPK9I+0Zx7j66sq5Y2jDo8wOAX8kIFr99CwxeVN0xgYilPybOVTRBXul\n7aDZwUoyGbJLR/FsQbjoFi36VeGXb0SKdpqMBHwSgHNbgTOhNlAuBBq+J7Rq\n1FSocmS35D8px9yqP5zWCmAeKi/7QPVuDvcnv9McPBCYYIHyR6S+lGizwZp/\naKczIAypp3tPz1AyicaJnKztk38c60E6p00TPOISn6DHr11gql8hapcCtqT6\nURn2Pa0EkO2t2vCyQG+coLt2yxaY96JDtF5uJ3WtHjKzt90hJv8BqfeztKVz\nHEHfzUrANIw9t71CEestIrcFkp50OPQTqvT0L/6cXf+fKUL3enMmC0Bw6Qwv\nzMLEl7bj8geeMOJ+/OxgYW0K+n6On29tXL/ymyPFqVLHHzhJc3WHnjT1KZDH\nLEPF\r\n=61kO\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCH25Aa4oDmdmOQKwZtevYKQ0BuUuVnaT46ao8n/IUe3gIhAKXc3VEkwAqzFMA4EHYIyAv2H8ypitKtFgnwFMwMp+k6"}]},"maintainers":[{"email":"aaron@abramov.io","name":"aaronabramov"},{"email":"christoph.pojer@gmail.com","name":"cpojer"},{"email":"opensource+npm@fb.com","name":"fb"},{"email":"jean@lauliac.com","name":"jeanlauliac"},{"email":"mjesun@hotmail.com","name":"mjesun"},{"email":"rubennorte@gmail.com","name":"rubennorte"},{"email":"scott.hovestadt@gmail.com","name":"scotthovestadt"}],"_npmUser":{"name":"scotthovestadt","email":"scott.hovestadt@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pretty-format_24.8.0_1557021741471_0.5377404816199578"},"_hasShrinkwrap":false},"24.9.0":{"name":"pretty-format","version":"24.9.0","repository":{"type":"git","url":"git+https://github.com/facebook/jest.git","directory":"packages/pretty-format"},"license":"MIT","description":"Stringify any JavaScript value.","main":"build/index.js","types":"build/index.d.ts","browser":"build-es5/index.js","author":{"name":"James Kyle","email":"me@thejameskyle.com"},"dependencies":{"@jest/types":"^24.9.0","ansi-regex":"^4.0.0","ansi-styles":"^3.2.0","react-is":"^16.8.4"},"devDependencies":{"@types/ansi-regex":"^4.0.0","@types/ansi-styles":"^3.2.1","@types/react":"*","@types/react-is":"^16.7.1","@types/react-test-renderer":"*","immutable":"4.0.0-rc.9","react":"*","react-dom":"*","react-test-renderer":"*"},"engines":{"node":">= 6"},"publishConfig":{"access":"public"},"gitHead":"9ad0f4bc6b8bdd94989804226c28c9960d9da7d1","bugs":{"url":"https://github.com/facebook/jest/issues"},"homepage":"https://github.com/facebook/jest#readme","_id":"pretty-format@24.9.0","_nodeVersion":"11.12.0","_npmVersion":"lerna/3.15.0/node@v11.12.0+x64 (darwin)","dist":{"integrity":"sha512-00ZMZUiHaJrNfk33guavqgvfJS30sLYf0f8+Srklv0AMPodGGHcoHgksZ3OThYnIvOd+8yMCn0YiEOogjlgsnA==","shasum":"12fac31b37019a4eea3c11aa9a959eb7628aa7c9","tarball":"http://localhost:4545/npm/registry/pretty-format/pretty-format-24.9.0.tgz","fileCount":43,"unpackedSize":622851,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdVkVrCRA9TVsSAnZWagAAF3UP/i3Pq0YrEHpvSYLccSou\n5RGRywnHlTNkORl5nIeTlowBHBjjWmkFaVa9D6ZOTK+/peYZHtr3UjmqE8ft\nuR2bdiNfNK8DtQ36FY/byefd1BiUXmYQWmMNzff6SyGfWj2KLihcFJK6/Kaz\nuBzZgbnV2+CiwtkmL0KtINZ7UKxM2Jq7bZVrpQX4raACyWjyFcIeqHz5wrgm\nRWtHpUZxG4Rkvl/MsSw8Rmua2sH1ge4zUHjfNM0NP5R+V3xNi1tG7VUidn5i\n7I8zcPjtaviJBl+DQBh2O67s8H5pu3h7cR6qSj9Y0o/xGcKaXYLHmIUlYMzy\nPMeFauqhSKQSh3qznd3C8DSmzb0wsNW9KGjVVBPeLotgFGfscrEd3Slz+y6R\nMWGRyBSxdM1B2Oye0XYEg5th+3sWayruoLM8JoWjV/pKGa3CAyPR4lKmcfma\n0YqY9DksQXka+0Mj8vCybGoFOY/jtosWrYRgSwnLd1QKSPopChuJnJiA5ahG\nBzuZ9unw9AjbSLvAVXr5vsE6s3p66IsNK5KEjqphNINqQyXCno9e4lSGVw0a\nxXj/Aj9AGLuhXpOZ6tHzMhu4ey8HO+quBwReEYci1Mcpl4uwa0Lf0H0Xnrru\nwVotFnXro2FqFDTVIDy6dA09gukOrDkx1C6fprYDiDn4UN5VxQybA/KfEzl1\nl8tq\r\n=rnIn\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCW7ucsr7PnTLpI5t+sJcb7PxoeKEbS4d7LnoPUOsfDfgIhAO4bZTLBnFxiRU4y7fJcgRswRD/xGGsi+k+dZAFzupoa"}]},"maintainers":[{"email":"aaron@abramov.io","name":"aaronabramov"},{"email":"christoph.pojer@gmail.com","name":"cpojer"},{"email":"opensource+npm@fb.com","name":"fb"},{"email":"jean@lauliac.com","name":"jeanlauliac"},{"email":"rubennorte@gmail.com","name":"rubennorte"},{"email":"scott.hovestadt@gmail.com","name":"scotthovestadt"}],"_npmUser":{"name":"scotthovestadt","email":"scott.hovestadt@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pretty-format_24.9.0_1565934954829_0.4757742416820441"},"_hasShrinkwrap":false},"25.0.0":{"name":"pretty-format","version":"25.0.0","repository":{"type":"git","url":"git+https://github.com/facebook/jest.git","directory":"packages/pretty-format"},"license":"MIT","description":"Stringify any JavaScript value.","main":"build/index.js","types":"build/index.d.ts","browser":"build-es5/index.js","author":{"name":"James Kyle","email":"me@thejameskyle.com"},"dependencies":{"@jest/types":"^25.0.0","ansi-regex":"^4.0.0","ansi-styles":"^4.0.0","react-is":"^16.8.4"},"devDependencies":{"@types/ansi-regex":"^4.0.0","@types/ansi-styles":"^3.2.1","@types/react":"*","@types/react-is":"^16.7.1","@types/react-test-renderer":"*","immutable":"4.0.0-rc.9","react":"*","react-dom":"*","react-test-renderer":"*"},"engines":{"node":">= 8"},"publishConfig":{"access":"public"},"gitHead":"ff9269be05fd8316e95232198fce3463bf2f270e","readme":"# pretty-format\n\nStringify any JavaScript value.\n\n- Serialize built-in JavaScript types.\n- Serialize application-specific data types with built-in or user-defined plugins.\n\n## Installation\n\n```sh\n$ yarn add pretty-format\n```\n\n## Usage\n\n```js\nconst prettyFormat = require('pretty-format'); // CommonJS\n```\n\n```js\nimport prettyFormat from 'pretty-format'; // ES2015 modules\n```\n\n```js\nconst val = {object: {}};\nval.circularReference = val;\nval[Symbol('foo')] = 'foo';\nval.map = new Map([['prop', 'value']]);\nval.array = [-0, Infinity, NaN];\n\nconsole.log(prettyFormat(val));\n/*\nObject {\n \"array\": Array [\n -0,\n Infinity,\n NaN,\n ],\n \"circularReference\": [Circular],\n \"map\": Map {\n \"prop\" => \"value\",\n },\n \"object\": Object {},\n Symbol(foo): \"foo\",\n}\n*/\n```\n\n## Usage with options\n\n```js\nfunction onClick() {}\n\nconsole.log(prettyFormat(onClick));\n/*\n[Function onClick]\n*/\n\nconst options = {\n printFunctionName: false,\n};\nconsole.log(prettyFormat(onClick, options));\n/*\n[Function]\n*/\n```\n\n\n| key | type | default | description |\n| :------------------ | :-------- | :--------- | :------------------------------------------------------ |\n| `callToJSON` | `boolean` | `true` | call `toJSON` method (if it exists) on objects |\n| `escapeRegex` | `boolean` | `false` | escape special characters in regular expressions |\n| `escapeString` | `boolean` | `true` | escape special characters in strings |\n| `highlight` | `boolean` | `false` | highlight syntax with colors in terminal (some plugins) |\n| `indent` | `number` | `2` | spaces in each level of indentation |\n| `maxDepth` | `number` | `Infinity` | levels to print in arrays, objects, elements, and so on |\n| `min` | `boolean` | `false` | minimize added space: no indentation nor line breaks |\n| `plugins` | `array` | `[]` | plugins to serialize application-specific data types |\n| `printFunctionName` | `boolean` | `true` | include or omit the name of a function |\n| `theme` | `object` | | colors to highlight syntax in terminal |\n\nProperty values of `theme` are from [ansi-styles colors](https://github.com/chalk/ansi-styles#colors)\n\n```js\nconst DEFAULT_THEME = {\n comment: 'gray',\n content: 'reset',\n prop: 'yellow',\n tag: 'cyan',\n value: 'green',\n};\n```\n\n## Usage with plugins\n\nThe `pretty-format` package provides some built-in plugins, including:\n\n- `ReactElement` for elements from `react`\n- `ReactTestComponent` for test objects from `react-test-renderer`\n\n```js\n// CommonJS\nconst prettyFormat = require('pretty-format');\nconst ReactElement = prettyFormat.plugins.ReactElement;\nconst ReactTestComponent = prettyFormat.plugins.ReactTestComponent;\n\nconst React = require('react');\nconst renderer = require('react-test-renderer');\n```\n\n```js\n// ES2015 modules and destructuring assignment\nimport prettyFormat from 'pretty-format';\nconst {ReactElement, ReactTestComponent} = prettyFormat.plugins;\n\nimport React from 'react';\nimport renderer from 'react-test-renderer';\n```\n\n```js\nconst onClick = () => {};\nconst element = React.createElement('button', {onClick}, 'Hello World');\n\nconst formatted1 = prettyFormat(element, {\n plugins: [ReactElement],\n printFunctionName: false,\n});\nconst formatted2 = prettyFormat(renderer.create(element).toJSON(), {\n plugins: [ReactTestComponent],\n printFunctionName: false,\n});\n/*\n\n*/\n```\n\n## Usage in Jest\n\nFor snapshot tests, Jest uses `pretty-format` with options that include some of its built-in plugins. For this purpose, plugins are also known as **snapshot serializers**.\n\nTo serialize application-specific data types, you can add modules to `devDependencies` of a project, and then:\n\nIn an **individual** test file, you can add a module as follows. It precedes any modules from Jest configuration.\n\n```js\nimport serializer from 'my-serializer-module';\nexpect.addSnapshotSerializer(serializer);\n\n// tests which have `expect(value).toMatchSnapshot()` assertions\n```\n\nFor **all** test files, you can specify modules in Jest configuration. They precede built-in plugins for React, HTML, and Immutable.js data types. For example, in a `package.json` file:\n\n```json\n{\n \"jest\": {\n \"snapshotSerializers\": [\"my-serializer-module\"]\n }\n}\n```\n\n## Writing plugins\n\nA plugin is a JavaScript object.\n\nIf `options` has a `plugins` array: for the first plugin whose `test(val)` method returns a truthy value, then `prettyFormat(val, options)` returns the result from either:\n\n- `serialize(val, …)` method of the **improved** interface (available in **version 21** or later)\n- `print(val, …)` method of the **original** interface (if plugin does not have `serialize` method)\n\n### test\n\nWrite `test` so it can receive `val` argument of any type. To serialize **objects** which have certain properties, then a guarded expression like `val != null && …` or more concise `val && …` prevents the following errors:\n\n- `TypeError: Cannot read property 'whatever' of null`\n- `TypeError: Cannot read property 'whatever' of undefined`\n\nFor example, `test` method of built-in `ReactElement` plugin:\n\n```js\nconst elementSymbol = Symbol.for('react.element');\nconst test = val => val && val.$$typeof === elementSymbol;\n```\n\nPay attention to efficiency in `test` because `pretty-format` calls it often.\n\n### serialize\n\nThe **improved** interface is available in **version 21** or later.\n\nWrite `serialize` to return a string, given the arguments:\n\n- `val` which “passed the test”\n- unchanging `config` object: derived from `options`\n- current `indentation` string: concatenate to `indent` from `config`\n- current `depth` number: compare to `maxDepth` from `config`\n- current `refs` array: find circular references in objects\n- `printer` callback function: serialize children\n\n### config\n\n\n| key | type | description |\n| :------------------ | :-------- | :------------------------------------------------------ |\n| `callToJSON` | `boolean` | call `toJSON` method (if it exists) on objects |\n| `colors` | `Object` | escape codes for colors to highlight syntax |\n| `escapeRegex` | `boolean` | escape special characters in regular expressions |\n| `escapeString` | `boolean` | escape special characters in strings |\n| `indent` | `string` | spaces in each level of indentation |\n| `maxDepth` | `number` | levels to print in arrays, objects, elements, and so on |\n| `min` | `boolean` | minimize added space: no indentation nor line breaks |\n| `plugins` | `array` | plugins to serialize application-specific data types |\n| `printFunctionName` | `boolean` | include or omit the name of a function |\n| `spacingInner` | `strong` | spacing to separate items in a list |\n| `spacingOuter` | `strong` | spacing to enclose a list of items |\n\nEach property of `colors` in `config` corresponds to a property of `theme` in `options`:\n\n- the key is the same (for example, `tag`)\n- the value in `colors` is a object with `open` and `close` properties whose values are escape codes from [ansi-styles](https://github.com/chalk/ansi-styles) for the color value in `theme` (for example, `'cyan'`)\n\nSome properties in `config` are derived from `min` in `options`:\n\n- `spacingInner` and `spacingOuter` are **newline** if `min` is `false`\n- `spacingInner` is **space** and `spacingOuter` is **empty string** if `min` is `true`\n\n### Example of serialize and test\n\nThis plugin is a pattern you can apply to serialize composite data types. Of course, `pretty-format` does not need a plugin to serialize arrays :)\n\n```js\n// We reused more code when we factored out a function for child items\n// that is independent of depth, name, and enclosing punctuation (see below).\nconst SEPARATOR = ',';\nfunction serializeItems(items, config, indentation, depth, refs, printer) {\n if (items.length === 0) {\n return '';\n }\n const indentationItems = indentation + config.indent;\n return (\n config.spacingOuter +\n items\n .map(\n item =>\n indentationItems +\n printer(item, config, indentationItems, depth, refs), // callback\n )\n .join(SEPARATOR + config.spacingInner) +\n (config.min ? '' : SEPARATOR) + // following the last item\n config.spacingOuter +\n indentation\n );\n}\n\nconst plugin = {\n test(val) {\n return Array.isArray(val);\n },\n serialize(array, config, indentation, depth, refs, printer) {\n const name = array.constructor.name;\n return ++depth > config.maxDepth\n ? '[' + name + ']'\n : (config.min ? '' : name + ' ') +\n '[' +\n serializeItems(array, config, indentation, depth, refs, printer) +\n ']';\n },\n};\n```\n\n```js\nconst val = {\n filter: 'completed',\n items: [\n {\n text: 'Write test',\n completed: true,\n },\n {\n text: 'Write serialize',\n completed: true,\n },\n ],\n};\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n plugins: [plugin],\n }),\n);\n/*\nObject {\n \"filter\": \"completed\",\n \"items\": Array [\n Object {\n \"completed\": true,\n \"text\": \"Write test\",\n },\n Object {\n \"completed\": true,\n \"text\": \"Write serialize\",\n },\n ],\n}\n*/\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n indent: 4,\n plugins: [plugin],\n }),\n);\n/*\nObject {\n \"filter\": \"completed\",\n \"items\": Array [\n Object {\n \"completed\": true,\n \"text\": \"Write test\",\n },\n Object {\n \"completed\": true,\n \"text\": \"Write serialize\",\n },\n ],\n}\n*/\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n maxDepth: 1,\n plugins: [plugin],\n }),\n);\n/*\nObject {\n \"filter\": \"completed\",\n \"items\": [Array],\n}\n*/\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n min: true,\n plugins: [plugin],\n }),\n);\n/*\n{\"filter\": \"completed\", \"items\": [{\"completed\": true, \"text\": \"Write test\"}, {\"completed\": true, \"text\": \"Write serialize\"}]}\n*/\n```\n\n### print\n\nThe **original** interface is adequate for plugins:\n\n- that **do not** depend on options other than `highlight` or `min`\n- that **do not** depend on `depth` or `refs` in recursive traversal, and\n- if values either\n - do **not** require indentation, or\n - do **not** occur as children of JavaScript data structures (for example, array)\n\nWrite `print` to return a string, given the arguments:\n\n- `val` which “passed the test”\n- current `printer(valChild)` callback function: serialize children\n- current `indenter(lines)` callback function: indent lines at the next level\n- unchanging `config` object: derived from `options`\n- unchanging `colors` object: derived from `options`\n\nThe 3 properties of `config` are `min` in `options` and:\n\n- `spacing` and `edgeSpacing` are **newline** if `min` is `false`\n- `spacing` is **space** and `edgeSpacing` is **empty string** if `min` is `true`\n\nEach property of `colors` corresponds to a property of `theme` in `options`:\n\n- the key is the same (for example, `tag`)\n- the value in `colors` is a object with `open` and `close` properties whose values are escape codes from [ansi-styles](https://github.com/chalk/ansi-styles) for the color value in `theme` (for example, `'cyan'`)\n\n### Example of print and test\n\nThis plugin prints functions with the **number of named arguments** excluding rest argument.\n\n```js\nconst plugin = {\n print(val) {\n return `[Function ${val.name || 'anonymous'} ${val.length}]`;\n },\n test(val) {\n return typeof val === 'function';\n },\n};\n```\n\n```js\nconst val = {\n onClick(event) {},\n render() {},\n};\n\nprettyFormat(val, {\n plugins: [plugin],\n});\n/*\nObject {\n \"onClick\": [Function onClick 1],\n \"render\": [Function render 0],\n}\n*/\n\nprettyFormat(val);\n/*\nObject {\n \"onClick\": [Function onClick],\n \"render\": [Function render],\n}\n*/\n```\n\nThis plugin **ignores** the `printFunctionName` option. That limitation of the original `print` interface is a reason to use the improved `serialize` interface, described above.\n\n```js\nprettyFormat(val, {\n plugins: [pluginOld],\n printFunctionName: false,\n});\n/*\nObject {\n \"onClick\": [Function onClick 1],\n \"render\": [Function render 0],\n}\n*/\n\nprettyFormat(val, {\n printFunctionName: false,\n});\n/*\nObject {\n \"onClick\": [Function],\n \"render\": [Function],\n}\n*/\n```\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/facebook/jest/issues"},"homepage":"https://github.com/facebook/jest#readme","_id":"pretty-format@25.0.0","_nodeVersion":"11.12.0","_npmVersion":"lerna/3.16.4/node@v11.12.0+x64 (darwin)","dist":{"integrity":"sha512-0neOC1g/eAISiEeRzK2QRF/8U5o1EE3jZwuHSc49qYMdCLgckxeK7bnMw31YdbP34zcWYD4nvWnldNZ+S3okMw==","shasum":"d127ef4972649531cc6eeb55c9e0d250350c48e7","tarball":"http://localhost:4545/npm/registry/pretty-format/pretty-format-25.0.0.tgz","fileCount":43,"unpackedSize":629265,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdXgrRCRA9TVsSAnZWagAAugsP/3gmLpV0F7Y6y+Z6bs6j\nn39XaMuWHdn3AZQfQTf+p3ha/UaRzanhqUE/orNCCdX5jHzsiPRYSuFBFurB\nEpmIMdq8NhcsMqCnTsBkpIr/bas9zIDvRbJ6s/jAQhgb05qy14YdbaAGmjNW\np/S74yI1ZazdxvCkvbRtBJg8GiaXOyPbgwU9NYKQx4UgvNKfAZCvXQGsSfuo\njvYRhoL1L7h0Q4E8/I69OpN1olc31dmnigC1Yyx4gkxu2uf7+krl6+7JL0cx\nfm9nKN3p78ipWat1qZYFBuV51HN2+2ivz0Ydk/1lWR6FRAfRWqFzvGup9/l8\nacgyWkKllrX33q8Lru/oSVs9UCSlIDcnhNJKoslFXcRJ12EakyjLgvVUeRPA\n1QZbpPWU2c7vo0SnjyV9+S5K5eZIbA+OMTBRbUD4IizfbaWWTZzt7cL6ka8o\nMT58Nm0Ju+KeAeCXONtEHS4oRKrHVOdeYuJGJ4qte31uj9sOlFeLpjzXY0S1\nJQoC9R5paGDtxm5Q5ZK5EMUDsWOD9vTmuyaLGpvOpH93Pi/VYEtPWL1p+5+p\nGpQT/rdS3xp1I571P4fsFEZW6kYIrLgG8SJxrs0H7M8rsnWYc5W9Oms4fg2x\nCBNdNXdMApkQ+vWuQKrHKEZZYLGqQow3uIz4xuyHRHsv/bJGhd+EgX4OMgd+\nYAS+\r\n=RJIc\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFiFvcqXpDg6v7+At3/kWUGqDHh821tX8rok/IU5wNEfAiEAyrGiHHbk1IKmHqN8nGk1AuGMzsYeUnX4jqSeQFc7FZ8="}]},"maintainers":[{"email":"aaron@abramov.io","name":"aaronabramov"},{"email":"christoph.pojer@gmail.com","name":"cpojer"},{"email":"opensource+npm@fb.com","name":"fb"},{"email":"jean@lauliac.com","name":"jeanlauliac"},{"email":"rubennorte@gmail.com","name":"rubennorte"},{"email":"scott.hovestadt@gmail.com","name":"scotthovestadt"}],"_npmUser":{"name":"scotthovestadt","email":"scott.hovestadt@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pretty-format_25.0.0_1566444240697_0.5785760721309063"},"_hasShrinkwrap":false},"25.1.0":{"name":"pretty-format","version":"25.1.0","repository":{"type":"git","url":"git+https://github.com/facebook/jest.git","directory":"packages/pretty-format"},"license":"MIT","description":"Stringify any JavaScript value.","main":"build/index.js","types":"build/index.d.ts","browser":"build-es5/index.js","author":{"name":"James Kyle","email":"me@thejameskyle.com"},"dependencies":{"@jest/types":"^25.1.0","ansi-regex":"^5.0.0","ansi-styles":"^4.0.0","react-is":"^16.12.0"},"devDependencies":{"@types/react":"*","@types/react-is":"^16.7.1","@types/react-test-renderer":"*","immutable":"4.0.0-rc.9","react":"*","react-dom":"*","react-test-renderer":"*"},"engines":{"node":">= 8.3"},"publishConfig":{"access":"public"},"gitHead":"170eee11d03b0ed5c60077982fdbc3bafd403638","bugs":{"url":"https://github.com/facebook/jest/issues"},"homepage":"https://github.com/facebook/jest#readme","_id":"pretty-format@25.1.0","_nodeVersion":"10.16.0","_npmVersion":"lerna/3.20.2/node@v10.16.0+x64 (darwin)","dist":{"integrity":"sha512-46zLRSGLd02Rp+Lhad9zzuNZ+swunitn8zIpfD2B4OPCRLXbM87RJT2aBLBWYOznNUML/2l/ReMyWNC80PJBUQ==","shasum":"ed869bdaec1356fc5ae45de045e2c8ec7b07b0c8","tarball":"http://localhost:4545/npm/registry/pretty-format/pretty-format-25.1.0.tgz","fileCount":43,"unpackedSize":631920,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeJ56JCRA9TVsSAnZWagAAZugP/RyvEjmlTk8bWfvt1saF\n9F6tqNQi46afqAkUma0EoM1HxIC216Q52u0cqlvdIcDviaVygSimOo+05hTo\ndsYCItxBnGwfzM69dMBrtLcN4L2zSSmhQintl8oHtRaBQs/QdxkrXCFA6Ekd\nPQrJtbb+A+ZQb2xVeOZdYnqwjCO+/It5QXMvWjoAOETj3anuqoWJ7J6u/WmI\n7ulW582LtK6eONZIjrVyK9CUn+7/YDFH8IgE4QL5nOlfEqXBZqxisMIwW8Ng\nFONPh+1TwZoI3xtZC71LXtSTqj7/5Kq1TO9UkZzgQa90Ips3zfS3d+/WfY6D\nOsMCkzzH2nWRNE7lRRmbnAYyU5e9AaPMZdsE660cVuJm+tkd/UOBmwOTKZwV\nZabbTasabZdXvfYKkJB1lWBo7mqTL+Q6OH/OkAj1yz4D0TH9oEib0Z6B+wA6\n9CQuWokfkcX0IQmQKAoGR/Iu+ITs9XKAtpyxKc6Dp5c0YklJrf4b0lcFA0wh\nazZtFSqi5yyQYcKG8Ka5ztGE8icFdJ+3D19PtQJGdYWCWWKLI5Ozx6ZMUwnX\nH/5JHdBjxrBEdN9WPHvW4v4/BhDoNPLNUCP/nUX72mP5NIjv0QjukyZiNGrp\np/eMIG0b1p1crT4aHj//eAz9JMeBBfl3qUg04GJ8RSfGEFdRgewid6rlMLvE\nn+gH\r\n=qIpj\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDCntmBpTZ/m5mt8NS8whWE8nl3QOWISg0qF8RK11O/eAIhAO1Of0SVU+tVc1zCoJvL/sXylQGaZ1Wfgr4Zx/gs9Viy"}]},"maintainers":[{"email":"aaron@abramov.io","name":"aaronabramov"},{"email":"christoph.pojer@gmail.com","name":"cpojer"},{"email":"davidzilburg@gmail.com","name":"davidzilburg"},{"email":"opensource+npm@fb.com","name":"fb"},{"email":"rubennorte@gmail.com","name":"rubennorte"},{"email":"scott.hovestadt@gmail.com","name":"scotthovestadt"}],"_npmUser":{"name":"davidzilburg","email":"davidzilburg@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pretty-format_25.1.0_1579654793256_0.9387436370817765"},"_hasShrinkwrap":false},"25.2.0-alpha.86":{"name":"pretty-format","version":"25.2.0-alpha.86","repository":{"type":"git","url":"git+https://github.com/facebook/jest.git","directory":"packages/pretty-format"},"license":"MIT","description":"Stringify any JavaScript value.","main":"build/index.js","types":"build/index.d.ts","browser":"build-es5/index.js","author":{"name":"James Kyle","email":"me@thejameskyle.com"},"dependencies":{"@jest/types":"^25.2.0-alpha.86+cd98198c9","ansi-regex":"^5.0.0","ansi-styles":"^4.0.0","react-is":"^16.12.0"},"devDependencies":{"@types/react":"*","@types/react-is":"^16.7.1","@types/react-test-renderer":"*","immutable":"4.0.0-rc.9","react":"*","react-dom":"*","react-test-renderer":"*"},"engines":{"node":">= 8.3"},"publishConfig":{"access":"public"},"gitHead":"cd98198c9397d8b69c55155d7b224d62ef117a90","readme":"# pretty-format\n\nStringify any JavaScript value.\n\n- Serialize built-in JavaScript types.\n- Serialize application-specific data types with built-in or user-defined plugins.\n\n## Installation\n\n```sh\n$ yarn add pretty-format\n```\n\n## Usage\n\n```js\nconst prettyFormat = require('pretty-format'); // CommonJS\n```\n\n```js\nimport prettyFormat from 'pretty-format'; // ES2015 modules\n```\n\n```js\nconst val = {object: {}};\nval.circularReference = val;\nval[Symbol('foo')] = 'foo';\nval.map = new Map([['prop', 'value']]);\nval.array = [-0, Infinity, NaN];\n\nconsole.log(prettyFormat(val));\n/*\nObject {\n \"array\": Array [\n -0,\n Infinity,\n NaN,\n ],\n \"circularReference\": [Circular],\n \"map\": Map {\n \"prop\" => \"value\",\n },\n \"object\": Object {},\n Symbol(foo): \"foo\",\n}\n*/\n```\n\n## Usage with options\n\n```js\nfunction onClick() {}\n\nconsole.log(prettyFormat(onClick));\n/*\n[Function onClick]\n*/\n\nconst options = {\n printFunctionName: false,\n};\nconsole.log(prettyFormat(onClick, options));\n/*\n[Function]\n*/\n```\n\n\n| key | type | default | description |\n| :------------------ | :-------- | :--------- | :------------------------------------------------------ |\n| `callToJSON` | `boolean` | `true` | call `toJSON` method (if it exists) on objects |\n| `escapeRegex` | `boolean` | `false` | escape special characters in regular expressions |\n| `escapeString` | `boolean` | `true` | escape special characters in strings |\n| `highlight` | `boolean` | `false` | highlight syntax with colors in terminal (some plugins) |\n| `indent` | `number` | `2` | spaces in each level of indentation |\n| `maxDepth` | `number` | `Infinity` | levels to print in arrays, objects, elements, and so on |\n| `min` | `boolean` | `false` | minimize added space: no indentation nor line breaks |\n| `plugins` | `array` | `[]` | plugins to serialize application-specific data types |\n| `printFunctionName` | `boolean` | `true` | include or omit the name of a function |\n| `theme` | `object` | | colors to highlight syntax in terminal |\n\nProperty values of `theme` are from [ansi-styles colors](https://github.com/chalk/ansi-styles#colors)\n\n```js\nconst DEFAULT_THEME = {\n comment: 'gray',\n content: 'reset',\n prop: 'yellow',\n tag: 'cyan',\n value: 'green',\n};\n```\n\n## Usage with plugins\n\nThe `pretty-format` package provides some built-in plugins, including:\n\n- `ReactElement` for elements from `react`\n- `ReactTestComponent` for test objects from `react-test-renderer`\n\n```js\n// CommonJS\nconst prettyFormat = require('pretty-format');\nconst ReactElement = prettyFormat.plugins.ReactElement;\nconst ReactTestComponent = prettyFormat.plugins.ReactTestComponent;\n\nconst React = require('react');\nconst renderer = require('react-test-renderer');\n```\n\n```js\n// ES2015 modules and destructuring assignment\nimport prettyFormat from 'pretty-format';\nconst {ReactElement, ReactTestComponent} = prettyFormat.plugins;\n\nimport React from 'react';\nimport renderer from 'react-test-renderer';\n```\n\n```js\nconst onClick = () => {};\nconst element = React.createElement('button', {onClick}, 'Hello World');\n\nconst formatted1 = prettyFormat(element, {\n plugins: [ReactElement],\n printFunctionName: false,\n});\nconst formatted2 = prettyFormat(renderer.create(element).toJSON(), {\n plugins: [ReactTestComponent],\n printFunctionName: false,\n});\n/*\n\n*/\n```\n\n## Usage in Jest\n\nFor snapshot tests, Jest uses `pretty-format` with options that include some of its built-in plugins. For this purpose, plugins are also known as **snapshot serializers**.\n\nTo serialize application-specific data types, you can add modules to `devDependencies` of a project, and then:\n\nIn an **individual** test file, you can add a module as follows. It precedes any modules from Jest configuration.\n\n```js\nimport serializer from 'my-serializer-module';\nexpect.addSnapshotSerializer(serializer);\n\n// tests which have `expect(value).toMatchSnapshot()` assertions\n```\n\nFor **all** test files, you can specify modules in Jest configuration. They precede built-in plugins for React, HTML, and Immutable.js data types. For example, in a `package.json` file:\n\n```json\n{\n \"jest\": {\n \"snapshotSerializers\": [\"my-serializer-module\"]\n }\n}\n```\n\n## Writing plugins\n\nA plugin is a JavaScript object.\n\nIf `options` has a `plugins` array: for the first plugin whose `test(val)` method returns a truthy value, then `prettyFormat(val, options)` returns the result from either:\n\n- `serialize(val, …)` method of the **improved** interface (available in **version 21** or later)\n- `print(val, …)` method of the **original** interface (if plugin does not have `serialize` method)\n\n### test\n\nWrite `test` so it can receive `val` argument of any type. To serialize **objects** which have certain properties, then a guarded expression like `val != null && …` or more concise `val && …` prevents the following errors:\n\n- `TypeError: Cannot read property 'whatever' of null`\n- `TypeError: Cannot read property 'whatever' of undefined`\n\nFor example, `test` method of built-in `ReactElement` plugin:\n\n```js\nconst elementSymbol = Symbol.for('react.element');\nconst test = val => val && val.$$typeof === elementSymbol;\n```\n\nPay attention to efficiency in `test` because `pretty-format` calls it often.\n\n### serialize\n\nThe **improved** interface is available in **version 21** or later.\n\nWrite `serialize` to return a string, given the arguments:\n\n- `val` which “passed the test”\n- unchanging `config` object: derived from `options`\n- current `indentation` string: concatenate to `indent` from `config`\n- current `depth` number: compare to `maxDepth` from `config`\n- current `refs` array: find circular references in objects\n- `printer` callback function: serialize children\n\n### config\n\n\n| key | type | description |\n| :------------------ | :-------- | :------------------------------------------------------ |\n| `callToJSON` | `boolean` | call `toJSON` method (if it exists) on objects |\n| `colors` | `Object` | escape codes for colors to highlight syntax |\n| `escapeRegex` | `boolean` | escape special characters in regular expressions |\n| `escapeString` | `boolean` | escape special characters in strings |\n| `indent` | `string` | spaces in each level of indentation |\n| `maxDepth` | `number` | levels to print in arrays, objects, elements, and so on |\n| `min` | `boolean` | minimize added space: no indentation nor line breaks |\n| `plugins` | `array` | plugins to serialize application-specific data types |\n| `printFunctionName` | `boolean` | include or omit the name of a function |\n| `spacingInner` | `strong` | spacing to separate items in a list |\n| `spacingOuter` | `strong` | spacing to enclose a list of items |\n\nEach property of `colors` in `config` corresponds to a property of `theme` in `options`:\n\n- the key is the same (for example, `tag`)\n- the value in `colors` is a object with `open` and `close` properties whose values are escape codes from [ansi-styles](https://github.com/chalk/ansi-styles) for the color value in `theme` (for example, `'cyan'`)\n\nSome properties in `config` are derived from `min` in `options`:\n\n- `spacingInner` and `spacingOuter` are **newline** if `min` is `false`\n- `spacingInner` is **space** and `spacingOuter` is **empty string** if `min` is `true`\n\n### Example of serialize and test\n\nThis plugin is a pattern you can apply to serialize composite data types. Side note: `pretty-format` does not need a plugin to serialize arrays.\n\n```js\n// We reused more code when we factored out a function for child items\n// that is independent of depth, name, and enclosing punctuation (see below).\nconst SEPARATOR = ',';\nfunction serializeItems(items, config, indentation, depth, refs, printer) {\n if (items.length === 0) {\n return '';\n }\n const indentationItems = indentation + config.indent;\n return (\n config.spacingOuter +\n items\n .map(\n item =>\n indentationItems +\n printer(item, config, indentationItems, depth, refs), // callback\n )\n .join(SEPARATOR + config.spacingInner) +\n (config.min ? '' : SEPARATOR) + // following the last item\n config.spacingOuter +\n indentation\n );\n}\n\nconst plugin = {\n test(val) {\n return Array.isArray(val);\n },\n serialize(array, config, indentation, depth, refs, printer) {\n const name = array.constructor.name;\n return ++depth > config.maxDepth\n ? '[' + name + ']'\n : (config.min ? '' : name + ' ') +\n '[' +\n serializeItems(array, config, indentation, depth, refs, printer) +\n ']';\n },\n};\n```\n\n```js\nconst val = {\n filter: 'completed',\n items: [\n {\n text: 'Write test',\n completed: true,\n },\n {\n text: 'Write serialize',\n completed: true,\n },\n ],\n};\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n plugins: [plugin],\n }),\n);\n/*\nObject {\n \"filter\": \"completed\",\n \"items\": Array [\n Object {\n \"completed\": true,\n \"text\": \"Write test\",\n },\n Object {\n \"completed\": true,\n \"text\": \"Write serialize\",\n },\n ],\n}\n*/\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n indent: 4,\n plugins: [plugin],\n }),\n);\n/*\nObject {\n \"filter\": \"completed\",\n \"items\": Array [\n Object {\n \"completed\": true,\n \"text\": \"Write test\",\n },\n Object {\n \"completed\": true,\n \"text\": \"Write serialize\",\n },\n ],\n}\n*/\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n maxDepth: 1,\n plugins: [plugin],\n }),\n);\n/*\nObject {\n \"filter\": \"completed\",\n \"items\": [Array],\n}\n*/\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n min: true,\n plugins: [plugin],\n }),\n);\n/*\n{\"filter\": \"completed\", \"items\": [{\"completed\": true, \"text\": \"Write test\"}, {\"completed\": true, \"text\": \"Write serialize\"}]}\n*/\n```\n\n### print\n\nThe **original** interface is adequate for plugins:\n\n- that **do not** depend on options other than `highlight` or `min`\n- that **do not** depend on `depth` or `refs` in recursive traversal, and\n- if values either\n - do **not** require indentation, or\n - do **not** occur as children of JavaScript data structures (for example, array)\n\nWrite `print` to return a string, given the arguments:\n\n- `val` which “passed the test”\n- current `printer(valChild)` callback function: serialize children\n- current `indenter(lines)` callback function: indent lines at the next level\n- unchanging `config` object: derived from `options`\n- unchanging `colors` object: derived from `options`\n\nThe 3 properties of `config` are `min` in `options` and:\n\n- `spacing` and `edgeSpacing` are **newline** if `min` is `false`\n- `spacing` is **space** and `edgeSpacing` is **empty string** if `min` is `true`\n\nEach property of `colors` corresponds to a property of `theme` in `options`:\n\n- the key is the same (for example, `tag`)\n- the value in `colors` is a object with `open` and `close` properties whose values are escape codes from [ansi-styles](https://github.com/chalk/ansi-styles) for the color value in `theme` (for example, `'cyan'`)\n\n### Example of print and test\n\nThis plugin prints functions with the **number of named arguments** excluding rest argument.\n\n```js\nconst plugin = {\n print(val) {\n return `[Function ${val.name || 'anonymous'} ${val.length}]`;\n },\n test(val) {\n return typeof val === 'function';\n },\n};\n```\n\n```js\nconst val = {\n onClick(event) {},\n render() {},\n};\n\nprettyFormat(val, {\n plugins: [plugin],\n});\n/*\nObject {\n \"onClick\": [Function onClick 1],\n \"render\": [Function render 0],\n}\n*/\n\nprettyFormat(val);\n/*\nObject {\n \"onClick\": [Function onClick],\n \"render\": [Function render],\n}\n*/\n```\n\nThis plugin **ignores** the `printFunctionName` option. That limitation of the original `print` interface is a reason to use the improved `serialize` interface, described above.\n\n```js\nprettyFormat(val, {\n plugins: [pluginOld],\n printFunctionName: false,\n});\n/*\nObject {\n \"onClick\": [Function onClick 1],\n \"render\": [Function render 0],\n}\n*/\n\nprettyFormat(val, {\n printFunctionName: false,\n});\n/*\nObject {\n \"onClick\": [Function],\n \"render\": [Function],\n}\n*/\n```\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/facebook/jest/issues"},"homepage":"https://github.com/facebook/jest#readme","_id":"pretty-format@25.2.0-alpha.86","_nodeVersion":"12.14.1","_npmVersion":"lerna/3.20.2/node@v12.14.1+x64 (darwin)","dist":{"integrity":"sha512-rtrVlB3GRFLvf8jTx9gFU+J26hFPi+WDZUt3vp+5xrH2AaKUZqR6E1gSbhCW3AwkgQiXtCYUc3UwFaJAZeb9XA==","shasum":"1ccedddb8246e99c6ad06fd8efd25461125a39ec","tarball":"http://localhost:4545/npm/registry/pretty-format/pretty-format-25.2.0-alpha.86.tgz","fileCount":41,"unpackedSize":365085,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJee5HsCRA9TVsSAnZWagAAaqQP/1HNlDePCG8CMaVWb0sq\nfkALHvFL0HdzCrgKAyNDkwZQWivx+22VPADmW+HSTO4+g2tVWaKQzChuLHZH\nBHb3j0k5iq3k70n/zw9ClOpDSVbfIBFywc9xwZHaOmw79AQDL65l4HkL3PuZ\nM9hix0q63/rMflxrHkllSDxRwnOrHqNFCQjphcqcfSlWIAgHNVDgmQgYP84h\nltKzwiW0WdWtg+1PKnslRjzPKiY3OcT8Lo+ZQq4XdPC/BVD9FH0FXMY7PTI8\nODKQpqXmzUem1I7DzrYwMzimCsRQEfMyIPPykIR6CKDUCEL+C6JuM3DdV16y\nrIfjHn2ZczlOleQZi/OGoTReB5HBrTQopifGGXepC9tApE267FIkwQHu+DgG\nVHVXGWUUq4bjDqkS/ntNrjCb4x2xGqRW5tPPAgxp+ArsOdiuXfPRiwWPGnzv\nvD+l9O9nKUgroG6rzs0KoPp7I7/st5AUGkXHzMBWjrMip1rQhU741MDgfUDg\nOtcXBtmBLIiJZ5EsgLuptbDa5IyHScaS+v4SKuzQLpi8US/QoLtKfKxF/Z3S\n++yZbIT+WkP1CBM8ApGQs7QDDl0rzsde20np7nKdVuKEwIUvBxqdixMicOw6\nW7l9zdBAbAW0ngcN+AaTMX+qRmTifV8lk5fuCCqEVJ8AHZnE5XJ01B89Qpgs\nwTjf\r\n=RbTF\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFkzWAaA/fZuJCI3R+5oAzWalossRcXh9BMEt4v5rZ/LAiAZOvlYM8LVjJKDPKkGSdbWTHQEMzxppQRyhg0/ltQsFQ=="}]},"maintainers":[{"email":"aaron@abramov.io","name":"aaronabramov"},{"email":"christoph.pojer@gmail.com","name":"cpojer"},{"email":"davidzilburg@gmail.com","name":"davidzilburg"},{"email":"opensource+npm@fb.com","name":"fb"},{"email":"rubennorte@gmail.com","name":"rubennorte"},{"email":"scott.hovestadt@gmail.com","name":"scotthovestadt"},{"email":"sbekkhus91@gmail.com","name":"simenb"}],"_npmUser":{"name":"simenb","email":"sbekkhus91@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pretty-format_25.2.0-alpha.86_1585156587794_0.14831469129049846"},"_hasShrinkwrap":false},"25.2.0":{"name":"pretty-format","version":"25.2.0","repository":{"type":"git","url":"git+https://github.com/facebook/jest.git","directory":"packages/pretty-format"},"license":"MIT","description":"Stringify any JavaScript value.","main":"build/index.js","types":"build/index.d.ts","browser":"build-es5/index.js","author":{"name":"James Kyle","email":"me@thejameskyle.com"},"dependencies":{"@jest/types":"^25.2.0","ansi-regex":"^5.0.0","ansi-styles":"^4.0.0","react-is":"^16.12.0"},"devDependencies":{"@types/react":"*","@types/react-is":"^16.7.1","@types/react-test-renderer":"*","immutable":"4.0.0-rc.9","react":"*","react-dom":"*","react-test-renderer":"*"},"engines":{"node":">= 8.3"},"publishConfig":{"access":"public"},"gitHead":"9f0339c1c762e39f869f7df63e88470287728b93","bugs":{"url":"https://github.com/facebook/jest/issues"},"homepage":"https://github.com/facebook/jest#readme","_id":"pretty-format@25.2.0","_nodeVersion":"12.14.1","_npmVersion":"lerna/3.20.2/node@v12.14.1+x64 (darwin)","dist":{"integrity":"sha512-BzmuH01b/lm0nl3M7Lcnku9Cv2UNMk9FgIrAiSuIus2QrjzV7Lf2DW+88SgEQUXQNkYWGtBV1289AuF6yMCtCQ==","shasum":"645003fb5da71a0ded46c90007dff0e03857de7d","tarball":"http://localhost:4545/npm/registry/pretty-format/pretty-format-25.2.0.tgz","fileCount":41,"unpackedSize":365047,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJee5urCRA9TVsSAnZWagAA5fsP/iVweLr+cx5jOfU8Lm4q\nlryfU27N1r9LUUk1IYI1RpAZHV529Q/khKXW6iKwXczwhMi1ahSv9Mm3Zqy3\nVSu3THKYCTriSBITe4fppoUPOYinEk2nBEaPwzhg16ViDQUJsMZcqoM7WYXg\nmLKtOpjpjufUJWS6OoUqaFzaxl0+tsM0g3izD3pAu3rMdFLBcj2IcYoIwbrc\nTTb7M0bp5yuWV1BKKddVGd6x0qQXIjPZNjzxkwETzE6JLpwzwMC8/ifuydRV\n68UTBpBnz2ZXj+ynzNvWn91CVl913keDRTuAMALR/vpY30NTXzUKN0WIIQ/r\ndY/L/BrhaxkUx4Icf3GQV9OH2imraccq7MjTzqtlZ7Ty+pgmq6x+UtmypRla\nq4aJkCBfM0g5SeSwuZea0kF/4B8NsFdZzCfvmE21tywkXXAA1rVCebipLn5K\n1/0ktXpaQqiIN4/xJQc0O5TQ+gUfG8VfSWQJo86r68j4qZQa/pIwUMQOJ355\nbJc1qIZaSxvnDBHNzfxcrBvFSI0YBrH8ExE2cmYq4HdWZNmO6jh5b57S7ud5\nEyASoDsEc6mMCa8Wj7cyt2NFtaGtDH3GYC0IQIDKFc8Wyf/C6ZuQW1lOX7v0\nApXnz7YWjcnDVmSqw6HJRnSHrgw6LaKPsYPEz68QCoqAerN+P0GUm2aW5Ugn\ndY8h\r\n=T9N5\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCBFpeM+Q2QXUQWviu1eYmCi4LOfQkpfSvXm9PDIFxoZgIgOSbIuZtJVkvdorDydMXjG4tXkx7t1Xv39e7p3yB38D0="}]},"maintainers":[{"email":"aaron@abramov.io","name":"aaronabramov"},{"email":"christoph.pojer@gmail.com","name":"cpojer"},{"email":"davidzilburg@gmail.com","name":"davidzilburg"},{"email":"opensource+npm@fb.com","name":"fb"},{"email":"rubennorte@gmail.com","name":"rubennorte"},{"email":"scott.hovestadt@gmail.com","name":"scotthovestadt"},{"email":"sbekkhus91@gmail.com","name":"simenb"}],"_npmUser":{"name":"simenb","email":"sbekkhus91@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pretty-format_25.2.0_1585159083399_0.26118180077433273"},"_hasShrinkwrap":false},"25.2.1-alpha.1":{"name":"pretty-format","version":"25.2.1-alpha.1","repository":{"type":"git","url":"git+https://github.com/facebook/jest.git","directory":"packages/pretty-format"},"license":"MIT","description":"Stringify any JavaScript value.","main":"build/index.js","types":"build/index.d.ts","typesVersions":{"<3.8":{"*":["ts3.4/*"]}},"browser":"build-es5/index.js","author":{"name":"James Kyle","email":"me@thejameskyle.com"},"dependencies":{"@jest/types":"^25.2.1-alpha.1+5cc2ccdac","ansi-regex":"^5.0.0","ansi-styles":"^4.0.0","react-is":"^16.12.0"},"devDependencies":{"@types/react":"*","@types/react-is":"^16.7.1","@types/react-test-renderer":"*","immutable":"4.0.0-rc.9","react":"*","react-dom":"*","react-test-renderer":"*"},"engines":{"node":">= 8.3"},"publishConfig":{"access":"public"},"gitHead":"5cc2ccdacb1b2433581222252e43cb5a1f6861a9","readme":"# pretty-format\n\nStringify any JavaScript value.\n\n- Serialize built-in JavaScript types.\n- Serialize application-specific data types with built-in or user-defined plugins.\n\n## Installation\n\n```sh\n$ yarn add pretty-format\n```\n\n## Usage\n\n```js\nconst prettyFormat = require('pretty-format'); // CommonJS\n```\n\n```js\nimport prettyFormat from 'pretty-format'; // ES2015 modules\n```\n\n```js\nconst val = {object: {}};\nval.circularReference = val;\nval[Symbol('foo')] = 'foo';\nval.map = new Map([['prop', 'value']]);\nval.array = [-0, Infinity, NaN];\n\nconsole.log(prettyFormat(val));\n/*\nObject {\n \"array\": Array [\n -0,\n Infinity,\n NaN,\n ],\n \"circularReference\": [Circular],\n \"map\": Map {\n \"prop\" => \"value\",\n },\n \"object\": Object {},\n Symbol(foo): \"foo\",\n}\n*/\n```\n\n## Usage with options\n\n```js\nfunction onClick() {}\n\nconsole.log(prettyFormat(onClick));\n/*\n[Function onClick]\n*/\n\nconst options = {\n printFunctionName: false,\n};\nconsole.log(prettyFormat(onClick, options));\n/*\n[Function]\n*/\n```\n\n\n| key | type | default | description |\n| :------------------ | :-------- | :--------- | :------------------------------------------------------ |\n| `callToJSON` | `boolean` | `true` | call `toJSON` method (if it exists) on objects |\n| `escapeRegex` | `boolean` | `false` | escape special characters in regular expressions |\n| `escapeString` | `boolean` | `true` | escape special characters in strings |\n| `highlight` | `boolean` | `false` | highlight syntax with colors in terminal (some plugins) |\n| `indent` | `number` | `2` | spaces in each level of indentation |\n| `maxDepth` | `number` | `Infinity` | levels to print in arrays, objects, elements, and so on |\n| `min` | `boolean` | `false` | minimize added space: no indentation nor line breaks |\n| `plugins` | `array` | `[]` | plugins to serialize application-specific data types |\n| `printFunctionName` | `boolean` | `true` | include or omit the name of a function |\n| `theme` | `object` | | colors to highlight syntax in terminal |\n\nProperty values of `theme` are from [ansi-styles colors](https://github.com/chalk/ansi-styles#colors)\n\n```js\nconst DEFAULT_THEME = {\n comment: 'gray',\n content: 'reset',\n prop: 'yellow',\n tag: 'cyan',\n value: 'green',\n};\n```\n\n## Usage with plugins\n\nThe `pretty-format` package provides some built-in plugins, including:\n\n- `ReactElement` for elements from `react`\n- `ReactTestComponent` for test objects from `react-test-renderer`\n\n```js\n// CommonJS\nconst prettyFormat = require('pretty-format');\nconst ReactElement = prettyFormat.plugins.ReactElement;\nconst ReactTestComponent = prettyFormat.plugins.ReactTestComponent;\n\nconst React = require('react');\nconst renderer = require('react-test-renderer');\n```\n\n```js\n// ES2015 modules and destructuring assignment\nimport prettyFormat from 'pretty-format';\nconst {ReactElement, ReactTestComponent} = prettyFormat.plugins;\n\nimport React from 'react';\nimport renderer from 'react-test-renderer';\n```\n\n```js\nconst onClick = () => {};\nconst element = React.createElement('button', {onClick}, 'Hello World');\n\nconst formatted1 = prettyFormat(element, {\n plugins: [ReactElement],\n printFunctionName: false,\n});\nconst formatted2 = prettyFormat(renderer.create(element).toJSON(), {\n plugins: [ReactTestComponent],\n printFunctionName: false,\n});\n/*\n\n*/\n```\n\n## Usage in Jest\n\nFor snapshot tests, Jest uses `pretty-format` with options that include some of its built-in plugins. For this purpose, plugins are also known as **snapshot serializers**.\n\nTo serialize application-specific data types, you can add modules to `devDependencies` of a project, and then:\n\nIn an **individual** test file, you can add a module as follows. It precedes any modules from Jest configuration.\n\n```js\nimport serializer from 'my-serializer-module';\nexpect.addSnapshotSerializer(serializer);\n\n// tests which have `expect(value).toMatchSnapshot()` assertions\n```\n\nFor **all** test files, you can specify modules in Jest configuration. They precede built-in plugins for React, HTML, and Immutable.js data types. For example, in a `package.json` file:\n\n```json\n{\n \"jest\": {\n \"snapshotSerializers\": [\"my-serializer-module\"]\n }\n}\n```\n\n## Writing plugins\n\nA plugin is a JavaScript object.\n\nIf `options` has a `plugins` array: for the first plugin whose `test(val)` method returns a truthy value, then `prettyFormat(val, options)` returns the result from either:\n\n- `serialize(val, …)` method of the **improved** interface (available in **version 21** or later)\n- `print(val, …)` method of the **original** interface (if plugin does not have `serialize` method)\n\n### test\n\nWrite `test` so it can receive `val` argument of any type. To serialize **objects** which have certain properties, then a guarded expression like `val != null && …` or more concise `val && …` prevents the following errors:\n\n- `TypeError: Cannot read property 'whatever' of null`\n- `TypeError: Cannot read property 'whatever' of undefined`\n\nFor example, `test` method of built-in `ReactElement` plugin:\n\n```js\nconst elementSymbol = Symbol.for('react.element');\nconst test = val => val && val.$$typeof === elementSymbol;\n```\n\nPay attention to efficiency in `test` because `pretty-format` calls it often.\n\n### serialize\n\nThe **improved** interface is available in **version 21** or later.\n\nWrite `serialize` to return a string, given the arguments:\n\n- `val` which “passed the test”\n- unchanging `config` object: derived from `options`\n- current `indentation` string: concatenate to `indent` from `config`\n- current `depth` number: compare to `maxDepth` from `config`\n- current `refs` array: find circular references in objects\n- `printer` callback function: serialize children\n\n### config\n\n\n| key | type | description |\n| :------------------ | :-------- | :------------------------------------------------------ |\n| `callToJSON` | `boolean` | call `toJSON` method (if it exists) on objects |\n| `colors` | `Object` | escape codes for colors to highlight syntax |\n| `escapeRegex` | `boolean` | escape special characters in regular expressions |\n| `escapeString` | `boolean` | escape special characters in strings |\n| `indent` | `string` | spaces in each level of indentation |\n| `maxDepth` | `number` | levels to print in arrays, objects, elements, and so on |\n| `min` | `boolean` | minimize added space: no indentation nor line breaks |\n| `plugins` | `array` | plugins to serialize application-specific data types |\n| `printFunctionName` | `boolean` | include or omit the name of a function |\n| `spacingInner` | `strong` | spacing to separate items in a list |\n| `spacingOuter` | `strong` | spacing to enclose a list of items |\n\nEach property of `colors` in `config` corresponds to a property of `theme` in `options`:\n\n- the key is the same (for example, `tag`)\n- the value in `colors` is a object with `open` and `close` properties whose values are escape codes from [ansi-styles](https://github.com/chalk/ansi-styles) for the color value in `theme` (for example, `'cyan'`)\n\nSome properties in `config` are derived from `min` in `options`:\n\n- `spacingInner` and `spacingOuter` are **newline** if `min` is `false`\n- `spacingInner` is **space** and `spacingOuter` is **empty string** if `min` is `true`\n\n### Example of serialize and test\n\nThis plugin is a pattern you can apply to serialize composite data types. Side note: `pretty-format` does not need a plugin to serialize arrays.\n\n```js\n// We reused more code when we factored out a function for child items\n// that is independent of depth, name, and enclosing punctuation (see below).\nconst SEPARATOR = ',';\nfunction serializeItems(items, config, indentation, depth, refs, printer) {\n if (items.length === 0) {\n return '';\n }\n const indentationItems = indentation + config.indent;\n return (\n config.spacingOuter +\n items\n .map(\n item =>\n indentationItems +\n printer(item, config, indentationItems, depth, refs), // callback\n )\n .join(SEPARATOR + config.spacingInner) +\n (config.min ? '' : SEPARATOR) + // following the last item\n config.spacingOuter +\n indentation\n );\n}\n\nconst plugin = {\n test(val) {\n return Array.isArray(val);\n },\n serialize(array, config, indentation, depth, refs, printer) {\n const name = array.constructor.name;\n return ++depth > config.maxDepth\n ? '[' + name + ']'\n : (config.min ? '' : name + ' ') +\n '[' +\n serializeItems(array, config, indentation, depth, refs, printer) +\n ']';\n },\n};\n```\n\n```js\nconst val = {\n filter: 'completed',\n items: [\n {\n text: 'Write test',\n completed: true,\n },\n {\n text: 'Write serialize',\n completed: true,\n },\n ],\n};\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n plugins: [plugin],\n }),\n);\n/*\nObject {\n \"filter\": \"completed\",\n \"items\": Array [\n Object {\n \"completed\": true,\n \"text\": \"Write test\",\n },\n Object {\n \"completed\": true,\n \"text\": \"Write serialize\",\n },\n ],\n}\n*/\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n indent: 4,\n plugins: [plugin],\n }),\n);\n/*\nObject {\n \"filter\": \"completed\",\n \"items\": Array [\n Object {\n \"completed\": true,\n \"text\": \"Write test\",\n },\n Object {\n \"completed\": true,\n \"text\": \"Write serialize\",\n },\n ],\n}\n*/\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n maxDepth: 1,\n plugins: [plugin],\n }),\n);\n/*\nObject {\n \"filter\": \"completed\",\n \"items\": [Array],\n}\n*/\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n min: true,\n plugins: [plugin],\n }),\n);\n/*\n{\"filter\": \"completed\", \"items\": [{\"completed\": true, \"text\": \"Write test\"}, {\"completed\": true, \"text\": \"Write serialize\"}]}\n*/\n```\n\n### print\n\nThe **original** interface is adequate for plugins:\n\n- that **do not** depend on options other than `highlight` or `min`\n- that **do not** depend on `depth` or `refs` in recursive traversal, and\n- if values either\n - do **not** require indentation, or\n - do **not** occur as children of JavaScript data structures (for example, array)\n\nWrite `print` to return a string, given the arguments:\n\n- `val` which “passed the test”\n- current `printer(valChild)` callback function: serialize children\n- current `indenter(lines)` callback function: indent lines at the next level\n- unchanging `config` object: derived from `options`\n- unchanging `colors` object: derived from `options`\n\nThe 3 properties of `config` are `min` in `options` and:\n\n- `spacing` and `edgeSpacing` are **newline** if `min` is `false`\n- `spacing` is **space** and `edgeSpacing` is **empty string** if `min` is `true`\n\nEach property of `colors` corresponds to a property of `theme` in `options`:\n\n- the key is the same (for example, `tag`)\n- the value in `colors` is a object with `open` and `close` properties whose values are escape codes from [ansi-styles](https://github.com/chalk/ansi-styles) for the color value in `theme` (for example, `'cyan'`)\n\n### Example of print and test\n\nThis plugin prints functions with the **number of named arguments** excluding rest argument.\n\n```js\nconst plugin = {\n print(val) {\n return `[Function ${val.name || 'anonymous'} ${val.length}]`;\n },\n test(val) {\n return typeof val === 'function';\n },\n};\n```\n\n```js\nconst val = {\n onClick(event) {},\n render() {},\n};\n\nprettyFormat(val, {\n plugins: [plugin],\n});\n/*\nObject {\n \"onClick\": [Function onClick 1],\n \"render\": [Function render 0],\n}\n*/\n\nprettyFormat(val);\n/*\nObject {\n \"onClick\": [Function onClick],\n \"render\": [Function render],\n}\n*/\n```\n\nThis plugin **ignores** the `printFunctionName` option. That limitation of the original `print` interface is a reason to use the improved `serialize` interface, described above.\n\n```js\nprettyFormat(val, {\n plugins: [pluginOld],\n printFunctionName: false,\n});\n/*\nObject {\n \"onClick\": [Function onClick 1],\n \"render\": [Function render 0],\n}\n*/\n\nprettyFormat(val, {\n printFunctionName: false,\n});\n/*\nObject {\n \"onClick\": [Function],\n \"render\": [Function],\n}\n*/\n```\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/facebook/jest/issues"},"homepage":"https://github.com/facebook/jest#readme","_id":"pretty-format@25.2.1-alpha.1","_nodeVersion":"12.14.1","_npmVersion":"lerna/3.20.2/node@v12.14.1+x64 (darwin)","dist":{"integrity":"sha512-G9Qh1p3UW8FifOzD+IdpqS8fCrHcT6vPaGZCCDZh0HCmxRc0N4aFCvkB07mzZ9j/mkcdkvCxfNAcO18mxt6JCQ==","shasum":"7e8b60ad1aaa42e955f851c1ea54e0a5912cb07a","tarball":"http://localhost:4545/npm/registry/pretty-format/pretty-format-25.2.1-alpha.1.tgz","fileCount":53,"unpackedSize":376811,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJefF+tCRA9TVsSAnZWagAAELAP/RixsuKvFXcdFdeImX3q\naWWlLLIQH1Nj7qH4y0nU/BYIgQVhyaxaft9kvIoFBpLnpPgNytbb5FS4KF3A\ntgAC82pkMrrKl9qvyKoEgLY+4kbpvaAZwW3iJTZc1ZfqtpNRnzU9K+1CQYYF\nqPvO2yO6D3mBn3CTGqxs3I+w6/42FJc+1dU9Zj+5Omo6z1AODizSHgEHjZ3x\nxjEOdV1zgBnRZxKp+Uu252K3ZvrRhFhCCR2CCzC2nMIbIuVFdZXrNqXUlfT6\nVpI2fZopjla4CQPInxDalZcMWg3Oonc32XfP4guV9CVaxhdORRZ88jsl9Yn3\nbJycrQS6ED7vs8EbUEKlYEGuKMmH5tQcf9PSVgJVQ7PIVzmWAWSOL4ZYdxSH\nHFEByAsyciA6x85FAZYt2lXF1I53l+z48FcnLSfRFsPfJHnBznBFHsXSBA8G\nnN74ug9VnHzs9IcfDBP/RvKmqqtJ9Iv8jCmI2HpvfW4+4p2eXTy7acglVetI\nB4MItTjYbhrYchUBmufxVDWOwBlvUxvpCTM4sGms2FlpE1YMlNwa76+CZXW/\na20UTamy0KJxUqTbnnPLeYNRtCImkpyi0pJPqEWcRgvSsMIZgmOYJSZlbk+j\nu4xsq49GggPR6qNynRXJcpuvIjB5fuOSrQ8lE352ih7IL4bTK9cYogb2GWkD\nwuzV\r\n=3zfR\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIA2hWZEqG8dLFJAoCLL6j1a+/0HuLMV0Eugw4Jsrxz9PAiEAqcOwgs+tEAzRWsUwDdkDfnMZLEYOyj4K3l0RcZfNf5M="}]},"maintainers":[{"email":"aaron@abramov.io","name":"aaronabramov"},{"email":"christoph.pojer@gmail.com","name":"cpojer"},{"email":"davidzilburg@gmail.com","name":"davidzilburg"},{"email":"opensource+npm@fb.com","name":"fb"},{"email":"rubennorte@gmail.com","name":"rubennorte"},{"email":"scott.hovestadt@gmail.com","name":"scotthovestadt"},{"email":"sbekkhus91@gmail.com","name":"simenb"}],"_npmUser":{"name":"simenb","email":"sbekkhus91@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pretty-format_25.2.1-alpha.1_1585209261034_0.08136996983938283"},"_hasShrinkwrap":false},"25.2.1-alpha.2":{"name":"pretty-format","version":"25.2.1-alpha.2","repository":{"type":"git","url":"git+https://github.com/facebook/jest.git","directory":"packages/pretty-format"},"license":"MIT","description":"Stringify any JavaScript value.","main":"build/index.js","types":"build/index.d.ts","typesVersions":{"<3.8":{"build/*":["build/ts3.4/*"]}},"browser":"build-es5/index.js","author":{"name":"James Kyle","email":"me@thejameskyle.com"},"dependencies":{"@jest/types":"^25.2.1-alpha.2+79b7ab67c","ansi-regex":"^5.0.0","ansi-styles":"^4.0.0","react-is":"^16.12.0"},"devDependencies":{"@types/react":"*","@types/react-is":"^16.7.1","@types/react-test-renderer":"*","immutable":"4.0.0-rc.9","react":"*","react-dom":"*","react-test-renderer":"*"},"engines":{"node":">= 8.3"},"publishConfig":{"access":"public"},"gitHead":"79b7ab67c63d3708f9689e25fbc0e8b0094bd019","readme":"# pretty-format\n\nStringify any JavaScript value.\n\n- Serialize built-in JavaScript types.\n- Serialize application-specific data types with built-in or user-defined plugins.\n\n## Installation\n\n```sh\n$ yarn add pretty-format\n```\n\n## Usage\n\n```js\nconst prettyFormat = require('pretty-format'); // CommonJS\n```\n\n```js\nimport prettyFormat from 'pretty-format'; // ES2015 modules\n```\n\n```js\nconst val = {object: {}};\nval.circularReference = val;\nval[Symbol('foo')] = 'foo';\nval.map = new Map([['prop', 'value']]);\nval.array = [-0, Infinity, NaN];\n\nconsole.log(prettyFormat(val));\n/*\nObject {\n \"array\": Array [\n -0,\n Infinity,\n NaN,\n ],\n \"circularReference\": [Circular],\n \"map\": Map {\n \"prop\" => \"value\",\n },\n \"object\": Object {},\n Symbol(foo): \"foo\",\n}\n*/\n```\n\n## Usage with options\n\n```js\nfunction onClick() {}\n\nconsole.log(prettyFormat(onClick));\n/*\n[Function onClick]\n*/\n\nconst options = {\n printFunctionName: false,\n};\nconsole.log(prettyFormat(onClick, options));\n/*\n[Function]\n*/\n```\n\n\n| key | type | default | description |\n| :------------------ | :-------- | :--------- | :------------------------------------------------------ |\n| `callToJSON` | `boolean` | `true` | call `toJSON` method (if it exists) on objects |\n| `escapeRegex` | `boolean` | `false` | escape special characters in regular expressions |\n| `escapeString` | `boolean` | `true` | escape special characters in strings |\n| `highlight` | `boolean` | `false` | highlight syntax with colors in terminal (some plugins) |\n| `indent` | `number` | `2` | spaces in each level of indentation |\n| `maxDepth` | `number` | `Infinity` | levels to print in arrays, objects, elements, and so on |\n| `min` | `boolean` | `false` | minimize added space: no indentation nor line breaks |\n| `plugins` | `array` | `[]` | plugins to serialize application-specific data types |\n| `printFunctionName` | `boolean` | `true` | include or omit the name of a function |\n| `theme` | `object` | | colors to highlight syntax in terminal |\n\nProperty values of `theme` are from [ansi-styles colors](https://github.com/chalk/ansi-styles#colors)\n\n```js\nconst DEFAULT_THEME = {\n comment: 'gray',\n content: 'reset',\n prop: 'yellow',\n tag: 'cyan',\n value: 'green',\n};\n```\n\n## Usage with plugins\n\nThe `pretty-format` package provides some built-in plugins, including:\n\n- `ReactElement` for elements from `react`\n- `ReactTestComponent` for test objects from `react-test-renderer`\n\n```js\n// CommonJS\nconst prettyFormat = require('pretty-format');\nconst ReactElement = prettyFormat.plugins.ReactElement;\nconst ReactTestComponent = prettyFormat.plugins.ReactTestComponent;\n\nconst React = require('react');\nconst renderer = require('react-test-renderer');\n```\n\n```js\n// ES2015 modules and destructuring assignment\nimport prettyFormat from 'pretty-format';\nconst {ReactElement, ReactTestComponent} = prettyFormat.plugins;\n\nimport React from 'react';\nimport renderer from 'react-test-renderer';\n```\n\n```js\nconst onClick = () => {};\nconst element = React.createElement('button', {onClick}, 'Hello World');\n\nconst formatted1 = prettyFormat(element, {\n plugins: [ReactElement],\n printFunctionName: false,\n});\nconst formatted2 = prettyFormat(renderer.create(element).toJSON(), {\n plugins: [ReactTestComponent],\n printFunctionName: false,\n});\n/*\n\n*/\n```\n\n## Usage in Jest\n\nFor snapshot tests, Jest uses `pretty-format` with options that include some of its built-in plugins. For this purpose, plugins are also known as **snapshot serializers**.\n\nTo serialize application-specific data types, you can add modules to `devDependencies` of a project, and then:\n\nIn an **individual** test file, you can add a module as follows. It precedes any modules from Jest configuration.\n\n```js\nimport serializer from 'my-serializer-module';\nexpect.addSnapshotSerializer(serializer);\n\n// tests which have `expect(value).toMatchSnapshot()` assertions\n```\n\nFor **all** test files, you can specify modules in Jest configuration. They precede built-in plugins for React, HTML, and Immutable.js data types. For example, in a `package.json` file:\n\n```json\n{\n \"jest\": {\n \"snapshotSerializers\": [\"my-serializer-module\"]\n }\n}\n```\n\n## Writing plugins\n\nA plugin is a JavaScript object.\n\nIf `options` has a `plugins` array: for the first plugin whose `test(val)` method returns a truthy value, then `prettyFormat(val, options)` returns the result from either:\n\n- `serialize(val, …)` method of the **improved** interface (available in **version 21** or later)\n- `print(val, …)` method of the **original** interface (if plugin does not have `serialize` method)\n\n### test\n\nWrite `test` so it can receive `val` argument of any type. To serialize **objects** which have certain properties, then a guarded expression like `val != null && …` or more concise `val && …` prevents the following errors:\n\n- `TypeError: Cannot read property 'whatever' of null`\n- `TypeError: Cannot read property 'whatever' of undefined`\n\nFor example, `test` method of built-in `ReactElement` plugin:\n\n```js\nconst elementSymbol = Symbol.for('react.element');\nconst test = val => val && val.$$typeof === elementSymbol;\n```\n\nPay attention to efficiency in `test` because `pretty-format` calls it often.\n\n### serialize\n\nThe **improved** interface is available in **version 21** or later.\n\nWrite `serialize` to return a string, given the arguments:\n\n- `val` which “passed the test”\n- unchanging `config` object: derived from `options`\n- current `indentation` string: concatenate to `indent` from `config`\n- current `depth` number: compare to `maxDepth` from `config`\n- current `refs` array: find circular references in objects\n- `printer` callback function: serialize children\n\n### config\n\n\n| key | type | description |\n| :------------------ | :-------- | :------------------------------------------------------ |\n| `callToJSON` | `boolean` | call `toJSON` method (if it exists) on objects |\n| `colors` | `Object` | escape codes for colors to highlight syntax |\n| `escapeRegex` | `boolean` | escape special characters in regular expressions |\n| `escapeString` | `boolean` | escape special characters in strings |\n| `indent` | `string` | spaces in each level of indentation |\n| `maxDepth` | `number` | levels to print in arrays, objects, elements, and so on |\n| `min` | `boolean` | minimize added space: no indentation nor line breaks |\n| `plugins` | `array` | plugins to serialize application-specific data types |\n| `printFunctionName` | `boolean` | include or omit the name of a function |\n| `spacingInner` | `strong` | spacing to separate items in a list |\n| `spacingOuter` | `strong` | spacing to enclose a list of items |\n\nEach property of `colors` in `config` corresponds to a property of `theme` in `options`:\n\n- the key is the same (for example, `tag`)\n- the value in `colors` is a object with `open` and `close` properties whose values are escape codes from [ansi-styles](https://github.com/chalk/ansi-styles) for the color value in `theme` (for example, `'cyan'`)\n\nSome properties in `config` are derived from `min` in `options`:\n\n- `spacingInner` and `spacingOuter` are **newline** if `min` is `false`\n- `spacingInner` is **space** and `spacingOuter` is **empty string** if `min` is `true`\n\n### Example of serialize and test\n\nThis plugin is a pattern you can apply to serialize composite data types. Side note: `pretty-format` does not need a plugin to serialize arrays.\n\n```js\n// We reused more code when we factored out a function for child items\n// that is independent of depth, name, and enclosing punctuation (see below).\nconst SEPARATOR = ',';\nfunction serializeItems(items, config, indentation, depth, refs, printer) {\n if (items.length === 0) {\n return '';\n }\n const indentationItems = indentation + config.indent;\n return (\n config.spacingOuter +\n items\n .map(\n item =>\n indentationItems +\n printer(item, config, indentationItems, depth, refs), // callback\n )\n .join(SEPARATOR + config.spacingInner) +\n (config.min ? '' : SEPARATOR) + // following the last item\n config.spacingOuter +\n indentation\n );\n}\n\nconst plugin = {\n test(val) {\n return Array.isArray(val);\n },\n serialize(array, config, indentation, depth, refs, printer) {\n const name = array.constructor.name;\n return ++depth > config.maxDepth\n ? '[' + name + ']'\n : (config.min ? '' : name + ' ') +\n '[' +\n serializeItems(array, config, indentation, depth, refs, printer) +\n ']';\n },\n};\n```\n\n```js\nconst val = {\n filter: 'completed',\n items: [\n {\n text: 'Write test',\n completed: true,\n },\n {\n text: 'Write serialize',\n completed: true,\n },\n ],\n};\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n plugins: [plugin],\n }),\n);\n/*\nObject {\n \"filter\": \"completed\",\n \"items\": Array [\n Object {\n \"completed\": true,\n \"text\": \"Write test\",\n },\n Object {\n \"completed\": true,\n \"text\": \"Write serialize\",\n },\n ],\n}\n*/\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n indent: 4,\n plugins: [plugin],\n }),\n);\n/*\nObject {\n \"filter\": \"completed\",\n \"items\": Array [\n Object {\n \"completed\": true,\n \"text\": \"Write test\",\n },\n Object {\n \"completed\": true,\n \"text\": \"Write serialize\",\n },\n ],\n}\n*/\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n maxDepth: 1,\n plugins: [plugin],\n }),\n);\n/*\nObject {\n \"filter\": \"completed\",\n \"items\": [Array],\n}\n*/\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n min: true,\n plugins: [plugin],\n }),\n);\n/*\n{\"filter\": \"completed\", \"items\": [{\"completed\": true, \"text\": \"Write test\"}, {\"completed\": true, \"text\": \"Write serialize\"}]}\n*/\n```\n\n### print\n\nThe **original** interface is adequate for plugins:\n\n- that **do not** depend on options other than `highlight` or `min`\n- that **do not** depend on `depth` or `refs` in recursive traversal, and\n- if values either\n - do **not** require indentation, or\n - do **not** occur as children of JavaScript data structures (for example, array)\n\nWrite `print` to return a string, given the arguments:\n\n- `val` which “passed the test”\n- current `printer(valChild)` callback function: serialize children\n- current `indenter(lines)` callback function: indent lines at the next level\n- unchanging `config` object: derived from `options`\n- unchanging `colors` object: derived from `options`\n\nThe 3 properties of `config` are `min` in `options` and:\n\n- `spacing` and `edgeSpacing` are **newline** if `min` is `false`\n- `spacing` is **space** and `edgeSpacing` is **empty string** if `min` is `true`\n\nEach property of `colors` corresponds to a property of `theme` in `options`:\n\n- the key is the same (for example, `tag`)\n- the value in `colors` is a object with `open` and `close` properties whose values are escape codes from [ansi-styles](https://github.com/chalk/ansi-styles) for the color value in `theme` (for example, `'cyan'`)\n\n### Example of print and test\n\nThis plugin prints functions with the **number of named arguments** excluding rest argument.\n\n```js\nconst plugin = {\n print(val) {\n return `[Function ${val.name || 'anonymous'} ${val.length}]`;\n },\n test(val) {\n return typeof val === 'function';\n },\n};\n```\n\n```js\nconst val = {\n onClick(event) {},\n render() {},\n};\n\nprettyFormat(val, {\n plugins: [plugin],\n});\n/*\nObject {\n \"onClick\": [Function onClick 1],\n \"render\": [Function render 0],\n}\n*/\n\nprettyFormat(val);\n/*\nObject {\n \"onClick\": [Function onClick],\n \"render\": [Function render],\n}\n*/\n```\n\nThis plugin **ignores** the `printFunctionName` option. That limitation of the original `print` interface is a reason to use the improved `serialize` interface, described above.\n\n```js\nprettyFormat(val, {\n plugins: [pluginOld],\n printFunctionName: false,\n});\n/*\nObject {\n \"onClick\": [Function onClick 1],\n \"render\": [Function render 0],\n}\n*/\n\nprettyFormat(val, {\n printFunctionName: false,\n});\n/*\nObject {\n \"onClick\": [Function],\n \"render\": [Function],\n}\n*/\n```\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/facebook/jest/issues"},"homepage":"https://github.com/facebook/jest#readme","_id":"pretty-format@25.2.1-alpha.2","_nodeVersion":"12.14.1","_npmVersion":"lerna/3.20.2/node@v12.14.1+x64 (darwin)","dist":{"integrity":"sha512-jYm7HsRUFpwfjwmL7Z3L+ue4uCh4BG7YO8Dw+5PZv8VW3y2Y9o2+wqT97uBLmVtVcir0XrNrivQuiJ4iTB+Trg==","shasum":"0d30e1878c8b9f39d0fa05281d574c843b867381","tarball":"http://localhost:4545/npm/registry/pretty-format/pretty-format-25.2.1-alpha.2.tgz","fileCount":77,"unpackedSize":395625,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJefGN2CRA9TVsSAnZWagAAgZ0P/1i8k3WjshFmOmAIOI3w\nOI+HlXa0ZcfCWzCTrGvpoUOkarvFNa+jAfoV12LHxrrnSqGYhfHq1xnGfdzd\nrEy/PSWYxhkM9+Zlm0q27RFzXoF9wEMW7R69KhcFIQIdesDdLNghIUocNZaD\n2djezXs6g/XWjN3EfVdm3mVq1XIk09qnbic/4ewE2/Gktft1pYUjRXEMdolf\naDOjMTEtH9DRLA12jRuNBQgorTNAu3JPfLKJmjyA/SsV2YmwhYa7l4OH20jO\n+qQp7nJnVoKq/Wl/NuyxBkT3UlMDv1LbeCbUlqvjQ92skU2xfIclZ/Y0Nt0b\ns2Iw+LlkStJ2Hb/vWdTpUyfZmgWg/HLFnBdV+/+xvNLrz7YzEjuLqkouDILX\nykFgXRtjAONgSGR4HleZaskAHuLctAjIx8v84pauYgBzv24oNOE0jbf5AlVp\nTyP0wjtejLqK9KjrfazyX7WbjMySelFCld8s0Rm6k68sxCbxdhklAsw8hiAO\njhEW7CKQpZdXmiwyGn+YEDWwJLvKsJAEiiE53Roc9/V+EEXMV8yD7J/W7rUy\n8KYhRvmq73mrcZnO7IWj3s8fFcN7MPgg2Flm4dKz2WENubAME3YVtEbX8lie\nXunn1LnffHvUnJRXLyjmgOlMMMhl0qgMFD6i20iQvFqZNg/rj4oWIop/vozU\nVf/U\r\n=z78f\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICNn2GYyX/ouWzMpwBGRNpQ55PgpBAuUZSI2rD+tU/6eAiAYi3M0SKDixJQ+qJOKJevUXgQryRnunnlF6UBY9fcv0g=="}]},"maintainers":[{"email":"aaron@abramov.io","name":"aaronabramov"},{"email":"christoph.pojer@gmail.com","name":"cpojer"},{"email":"davidzilburg@gmail.com","name":"davidzilburg"},{"email":"opensource+npm@fb.com","name":"fb"},{"email":"rubennorte@gmail.com","name":"rubennorte"},{"email":"scott.hovestadt@gmail.com","name":"scotthovestadt"},{"email":"sbekkhus91@gmail.com","name":"simenb"}],"_npmUser":{"name":"simenb","email":"sbekkhus91@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pretty-format_25.2.1-alpha.2_1585210230452_0.3280669812852628"},"_hasShrinkwrap":false},"25.2.1":{"name":"pretty-format","version":"25.2.1","repository":{"type":"git","url":"git+https://github.com/facebook/jest.git","directory":"packages/pretty-format"},"license":"MIT","description":"Stringify any JavaScript value.","main":"build/index.js","types":"build/index.d.ts","typesVersions":{"<3.8":{"build/*":["build/ts3.4/*"]}},"browser":"build-es5/index.js","author":{"name":"James Kyle","email":"me@thejameskyle.com"},"dependencies":{"@jest/types":"^25.2.1","ansi-regex":"^5.0.0","ansi-styles":"^4.0.0","react-is":"^16.12.0"},"devDependencies":{"@types/react":"*","@types/react-is":"^16.7.1","@types/react-test-renderer":"*","immutable":"4.0.0-rc.9","react":"*","react-dom":"*","react-test-renderer":"*"},"engines":{"node":">= 8.3"},"publishConfig":{"access":"public"},"gitHead":"a679390828b6c30aeaa547d8c4dc9aed6531e357","bugs":{"url":"https://github.com/facebook/jest/issues"},"homepage":"https://github.com/facebook/jest#readme","_id":"pretty-format@25.2.1","_nodeVersion":"12.14.1","_npmVersion":"lerna/3.20.2/node@v12.14.1+x64 (darwin)","dist":{"integrity":"sha512-YS+e9oGYIbEeAFgqTU8qeZ3DN2Pz0iaD81ox+iUjLIXVJWeB7Ro/2AnfxRnl/yJJ5R674d7E3jLPuh6bwg0+qw==","shasum":"3b8f7b9241faa6736cdbc32879bee18454d1318d","tarball":"http://localhost:4545/npm/registry/pretty-format/pretty-format-25.2.1.tgz","fileCount":53,"unpackedSize":375633,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJefG9XCRA9TVsSAnZWagAA5sUP/3tmOf6+8E3NYeZOHfTz\nnxJ76Vn9amXYVfNDbG4PCvd5p3zIOuYA+V0pT1KW31j+9wXStV8DyBiPPpxb\nnSYDbdveVxAUVTCZ6Ccg60M1RQb8u4EzMAS+EDS2SfJmS4HIODpsP3tKmcwn\ni+7JyNp25diQSx2EaGiW00JYK6XEmCJhAqukVFm0dbqHVAd9rcUZYRH6XZ2B\n9iKOiYy0xm0UsZdufl77VnI+6NhJ0wi/jDkcAPA3x0uJRbNtLByIOwEM42Ns\n9N8DilF7qWFvbrCC9lKqKrBm+cOfbl/FE0BwL0wrk4PdLlRPqzQiK91rraYJ\nXtVfOZUBv7EyhWbOdB/Ada+37j8ENXCTYtzSgnLFL3XQdX5wjvyqN1b22Sjv\ncXA3EBhI/4Wcn6Re9KbhX6ljCiBPa1yScmBJNpWZlB0Hc+XK50et19muAtrH\nS05z5kfw6cOyCiDRrQR6ar8rpb72n1OWh1stLF8sGK0T4l2QBZNipGTXSoYZ\nfMleDPBUT22sKMNxV1POTjjuV02irmUI+2+UzpJpSOwIUBX2WCvQ125gGrpw\n2CXLBw25uMtQ3pQWngzJm7lyIBLqHi9gnzoCCEFokbLU+x8KE0HU2k94GKtG\n+Qs1EihYu0p6picgfi7XK7wWV1yJzpnBR+hdx1Z7aI9sryibw8tgM/EsM3Cl\nXQHA\r\n=5gwo\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCEtLkwzSI6jH4yTI8DHFnyvSnhQPk+Nq/q0PFwk26WZAIgPfgJdNCcdEt9qup+Ww74AIRYlA2fh1BNjgcDsYt4Pmw="}]},"maintainers":[{"email":"aaron@abramov.io","name":"aaronabramov"},{"email":"christoph.pojer@gmail.com","name":"cpojer"},{"email":"davidzilburg@gmail.com","name":"davidzilburg"},{"email":"opensource+npm@fb.com","name":"fb"},{"email":"rubennorte@gmail.com","name":"rubennorte"},{"email":"scott.hovestadt@gmail.com","name":"scotthovestadt"},{"email":"sbekkhus91@gmail.com","name":"simenb"}],"_npmUser":{"name":"simenb","email":"sbekkhus91@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pretty-format_25.2.1_1585213271441_0.8557830050456996"},"_hasShrinkwrap":false},"25.2.3":{"name":"pretty-format","version":"25.2.3","repository":{"type":"git","url":"git+https://github.com/facebook/jest.git","directory":"packages/pretty-format"},"license":"MIT","description":"Stringify any JavaScript value.","main":"build/index.js","types":"build/index.d.ts","typesVersions":{"<3.8":{"build/*":["build/ts3.4/*"]}},"browser":"build-es5/index.js","author":{"name":"James Kyle","email":"me@thejameskyle.com"},"dependencies":{"@jest/types":"^25.2.3","ansi-regex":"^5.0.0","ansi-styles":"^4.0.0","react-is":"^16.12.0"},"devDependencies":{"@types/react":"*","@types/react-is":"^16.7.1","@types/react-test-renderer":"*","immutable":"4.0.0-rc.9","react":"*","react-dom":"*","react-test-renderer":"*"},"engines":{"node":">= 8.3"},"publishConfig":{"access":"public"},"gitHead":"6f8bf80c38567ba076ae979af2dedb42b285b2d5","bugs":{"url":"https://github.com/facebook/jest/issues"},"homepage":"https://github.com/facebook/jest#readme","_id":"pretty-format@25.2.3","_nodeVersion":"12.14.1","_npmVersion":"lerna/3.20.2/node@v12.14.1+x64 (darwin)","dist":{"integrity":"sha512-IP4+5UOAVGoyqC/DiomOeHBUKN6q00gfyT2qpAsRH64tgOKB2yF7FHJXC18OCiU0/YFierACup/zdCOWw0F/0w==","shasum":"ba6e9603a0d80fa2e470b1fed55de1f9bfd81421","tarball":"http://localhost:4545/npm/registry/pretty-format/pretty-format-25.2.3.tgz","fileCount":53,"unpackedSize":375633,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJefQ+OCRA9TVsSAnZWagAAojQP/i+wB1bbD5f4p7Pj3J/1\n+Ut9WeqeqAKz5TQXfSnDyEmL+IPX9KrNfc/h3ydO29abqwkrvGUh5+GtK+Rb\nH1L2d502gDqFJTJ90gufl/GILHV+uruArYYpij2+kjZQyzsKHvsl3MgofQcv\nRrJ7iFNqW/1j7fD9Glo2NysIFljK/mhHy7YxSWv7dDH5GirMSvM8dCxtnm9H\nkN1WEaG78OuLuvP3pgtS7H1oxsOqeuF4tru2toQSNzrqBfroBnOMBVYS4CsM\nTdyNDNWbLSIt6+IAlZIUagkmuWCRXLYulzdKR2Tkj94swqWK3oXTSlfhYY/x\n8qYBiLZfg9+MbMXeVlt/baD9jjpa3hAUTP2fqqRiiUEwcaiEwBvwXPHXS0SV\ngKAEA76MLGK8GMQtbuZ1dgqwRGbNgRTgwdz5gnR7o8IYlUBGoy/Tqur1boL8\nxSRVNL4qUNcIHh9YDJLi2+eNq3js4qnMWeVf2Fvav07cBF1SBLEoQ/XmyBDG\nn1nLLSVcZ/jpz8MILp5NDBPZAjLsAUgUTn0dQnirG/KAg6GKdfbv2YqvYQcw\n2k1WPUGb83xo3a8BmOJzohzcE4Cx5whGth/RySa60KEb6fHlYILDQtqg4XVZ\nGngKDsktYNBU4SGP/k6h4a+9hG6eaoUw74ScdmiMLgDMjfKlUxe7/7eEpMb2\nccFy\r\n=rGmy\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICerWQzIzlOv5DcRD6MLrfWvnDqgNfs/EUwNSOfb2DQWAiBf2feMr/jZAwxXwMjoVjUGetPyY9hNIGaYQkXlYzT7Zg=="}]},"maintainers":[{"email":"aaron@abramov.io","name":"aaronabramov"},{"email":"christoph.pojer@gmail.com","name":"cpojer"},{"email":"davidzilburg@gmail.com","name":"davidzilburg"},{"email":"opensource+npm@fb.com","name":"fb"},{"email":"rubennorte@gmail.com","name":"rubennorte"},{"email":"scott.hovestadt@gmail.com","name":"scotthovestadt"},{"email":"sbekkhus91@gmail.com","name":"simenb"}],"_npmUser":{"name":"simenb","email":"sbekkhus91@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pretty-format_25.2.3_1585254286302_0.8069525036328202"},"_hasShrinkwrap":false},"25.2.5":{"name":"pretty-format","version":"25.2.5","repository":{"type":"git","url":"git+https://github.com/facebook/jest.git","directory":"packages/pretty-format"},"license":"MIT","description":"Stringify any JavaScript value.","main":"build/index.js","types":"build/index.d.ts","typesVersions":{"<3.8":{"build/*":["build/ts3.4/*"]}},"browser":"build-es5/index.js","author":{"name":"James Kyle","email":"me@thejameskyle.com"},"dependencies":{"@jest/types":"^25.2.5","ansi-regex":"^5.0.0","ansi-styles":"^4.0.0","react-is":"^16.12.0"},"devDependencies":{"@types/react":"*","@types/react-is":"^16.7.1","@types/react-test-renderer":"*","immutable":"4.0.0-rc.9","react":"*","react-dom":"*","react-test-renderer":"*"},"engines":{"node":">= 8.3"},"publishConfig":{"access":"public"},"gitHead":"964ec0ea0754caa2d8bef16dc89c1f926971f5eb","bugs":{"url":"https://github.com/facebook/jest/issues"},"homepage":"https://github.com/facebook/jest#readme","_id":"pretty-format@25.2.5","_nodeVersion":"12.14.1","_npmVersion":"lerna/3.20.2/node@v12.14.1+x64 (darwin)","dist":{"integrity":"sha512-EhVA7iUKzLlK8KaWmyAUWdxGkHMQkEXd/nPwsqsudKs21ZKAa4JZlfz9GJy6JNx07h0SmWcqLMCPvOc+vmk6qA==","shasum":"cf43adf52cd479188b6a78b279f770e7e6b271e0","tarball":"http://localhost:4545/npm/registry/pretty-format/pretty-format-25.2.5.tgz","fileCount":52,"unpackedSize":272362,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJehb0JCRA9TVsSAnZWagAA80UP/2/84kKjpw3GSwR+M1pK\nhtg66UYsp1BqBPIAbe7tERI2VyMuTp5V1RbQ/piUhQC/672dE0ah1dtAg8ym\n91kFl7AqHL3I7xL8azXbTpDzagYvE2ycX7vz7HV2R3zoSaf4Z8ZIJ0C+HedF\n9iliqrDVJM+uqLMwvVpKxuUO2Xay+ODYa2hyMnY03dFUxr+rm/mQzhR+yZVS\n9Sic/DPKRRLSlAVUcoC8Od28c8qIddH7bSgx23+c/W7D089jK0RfnIDzEH8F\nog1EwhK9DYE9aBoqcwarlQy1OJeJjBqc/+ZzFxK7caPR0a9hH0QlpJ0zDyTC\nOVJXvCNLLp3Wtv8YxU4w+oF43i6j6KdiW7JiZYk/aS9L1fFu1AId/bP68Ia7\nDopKutSlPgvErTgD9LJ57igtJ2SA2h3HY8OTUUkBa3mHx6afJ0C0Pw+iByKY\ndABCk3R/sSOujxQIhW/12oQmkpp5Vde1eVpblsEL+cHNEd3KijfT4iRwNihb\na8IlOBco+G7H/6bisA1CZwNA1DNiHAU7VG1U/Xud7mAEZP9XbdnhHJpAqYMw\nnAn+JR1/o6z4ZStCIoxXpnpGoba/PC3IhFWn8L4R6gCYYfvLxBN5gEQeELka\nDuqr5crO9tjZ/9COwQXj7mdPtzPODIGC4GOMJjTjpKGEAqLjwFajuTp8GEON\nyfiP\r\n=D8fX\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFFSXQ1+m2qk8LCGoUax4sRR+5QNCdbqkGrKmA95trelAiEAxWaj2P6kpdNGft4ZK355NLlhEPyq+bdVY8sVY1dsSa0="}]},"maintainers":[{"email":"aaron@abramov.io","name":"aaronabramov"},{"email":"christoph.pojer@gmail.com","name":"cpojer"},{"email":"davidzilburg@gmail.com","name":"davidzilburg"},{"email":"opensource+npm@fb.com","name":"fb"},{"email":"rubennorte@gmail.com","name":"rubennorte"},{"email":"scott.hovestadt@gmail.com","name":"scotthovestadt"},{"email":"sbekkhus91@gmail.com","name":"simenb"}],"_npmUser":{"name":"simenb","email":"sbekkhus91@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pretty-format_25.2.5_1585822984548_0.6111607829865207"},"_hasShrinkwrap":false,"deprecated":"Faulty publish, please use 25.2.6 or newer"},"25.2.6":{"name":"pretty-format","version":"25.2.6","repository":{"type":"git","url":"git+https://github.com/facebook/jest.git","directory":"packages/pretty-format"},"license":"MIT","description":"Stringify any JavaScript value.","main":"build/index.js","types":"build/index.d.ts","typesVersions":{"<3.8":{"build/*":["build/ts3.4/*"]}},"browser":"build-es5/index.js","author":{"name":"James Kyle","email":"me@thejameskyle.com"},"dependencies":{"@jest/types":"^25.2.6","ansi-regex":"^5.0.0","ansi-styles":"^4.0.0","react-is":"^16.12.0"},"devDependencies":{"@types/react":"*","@types/react-is":"^16.7.1","@types/react-test-renderer":"*","immutable":"4.0.0-rc.9","react":"*","react-dom":"*","react-test-renderer":"*"},"engines":{"node":">= 8.3"},"publishConfig":{"access":"public"},"gitHead":"43207b743df164e9e58bd483dd9167b9084da18b","bugs":{"url":"https://github.com/facebook/jest/issues"},"homepage":"https://github.com/facebook/jest#readme","_id":"pretty-format@25.2.6","_nodeVersion":"12.14.1","_npmVersion":"lerna/3.20.2/node@v12.14.1+x64 (darwin)","dist":{"integrity":"sha512-DEiWxLBaCHneffrIT4B+TpMvkV9RNvvJrd3lY9ew1CEQobDzEXmYT1mg0hJhljZty7kCc10z13ohOFAE8jrUDg==","shasum":"542a1c418d019bbf1cca2e3620443bc1323cb8d7","tarball":"http://localhost:4545/npm/registry/pretty-format/pretty-format-25.2.6.tgz","fileCount":53,"unpackedSize":375633,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJehb58CRA9TVsSAnZWagAAaa0QAITEawlRjfda7M/uG6tw\nKa5k1Nl7s3CL5E1uIOPzKifBZ6pkLs3a7G4tveJb81HeJrnMrL8LKoqfJ4H7\nZTr8ST/TCvF183ZwHKTLp+9V47AVJFv1/SuxUg9Eb3n3rOq1uJv5hLAgN2q7\njy+uRyAxM9ouJ2laqD1DTjc3RegSxI+pQKPl8p/zMSrdv2h7EoOmTxbaVL54\n7T3GxoPkIuKXXsYz/QyhrQ+00sn1DEGekO8Pt/JyaL1jHsL5MBztaUho/RlA\nhi4XKQRtcQajs49QHEpf4On0yihRKUwtr828M+02yqGUyqeGcb3mWEIKep43\nSekCgTa7917j6MTZXS2TcKc/zbzctSS+/qoEAOcPtDdqQ2ZbcAkoS+eV08Kb\n8LsNsyTRJGoZ4P4Gn9T9b59ZvyJdvCMdvgLtPGbQdr9YZRfBeKErP2t1a6ny\nt3TC2UpL/LE7HizHl29chb+yj5QILSA2Q+9uG2UHdmuNOnLSg3MwXd7YWExN\nZl5UZTvW5GVDT5XpCmEMaSS6d9M8+xgMOekhI/cheHdKWgs6jRevLGl50Cgt\nFYzjV2A2pHG50JX5/nEotRWWYSbejH60CPneUl6i4BKk4NuAIi1CoebL9Svo\nIiJPIv39VXqj/bu4TgC6v0mZ7JKU02Sq9Zd5RWCi9GfKYCaaiT9kAT/hSZL5\ni0qX\r\n=r7QQ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDItH8k2CHhVNmEeR/7SQQHTmw5FIQN96fsmyfemVeGVwIhAN9WHMi93nLBc2bL6CU3i5oOzF9VuPMlyv35qik+W61B"}]},"maintainers":[{"email":"aaron@abramov.io","name":"aaronabramov"},{"email":"christoph.pojer@gmail.com","name":"cpojer"},{"email":"davidzilburg@gmail.com","name":"davidzilburg"},{"email":"opensource+npm@fb.com","name":"fb"},{"email":"rubennorte@gmail.com","name":"rubennorte"},{"email":"scott.hovestadt@gmail.com","name":"scotthovestadt"},{"email":"sbekkhus91@gmail.com","name":"simenb"}],"_npmUser":{"name":"simenb","email":"sbekkhus91@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pretty-format_25.2.6_1585823356284_0.49923386717166696"},"_hasShrinkwrap":false},"25.3.0":{"name":"pretty-format","version":"25.3.0","repository":{"type":"git","url":"git+https://github.com/facebook/jest.git","directory":"packages/pretty-format"},"license":"MIT","description":"Stringify any JavaScript value.","main":"build/index.js","types":"build/index.d.ts","typesVersions":{"<3.8":{"build/*":["build/ts3.4/*"]}},"browser":"build-es5/index.js","author":{"name":"James Kyle","email":"me@thejameskyle.com"},"dependencies":{"@jest/types":"^25.3.0","ansi-regex":"^5.0.0","ansi-styles":"^4.0.0","react-is":"^16.12.0"},"devDependencies":{"@types/react":"*","@types/react-is":"^16.7.1","@types/react-test-renderer":"*","immutable":"4.0.0-rc.9","react":"*","react-dom":"*","react-test-renderer":"*"},"engines":{"node":">= 8.3"},"publishConfig":{"access":"public"},"gitHead":"45a4936d96d74cdee6b91122a51a556e3ebe6dc8","bugs":{"url":"https://github.com/facebook/jest/issues"},"homepage":"https://github.com/facebook/jest#readme","_id":"pretty-format@25.3.0","_nodeVersion":"12.16.1","_npmVersion":"lerna/3.20.2/node@v12.16.1+x64 (darwin)","dist":{"integrity":"sha512-wToHwF8bkQknIcFkBqNfKu4+UZqnrLn/Vr+wwKQwwvPzkBfDDKp/qIabFqdgtoi5PEnM8LFByVsOrHoa3SpTVA==","shasum":"d0a4f988ff4a6cd350342fdabbb809aeb4d49ad5","tarball":"http://localhost:4545/npm/registry/pretty-format/pretty-format-25.3.0.tgz","fileCount":53,"unpackedSize":376134,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJejc/CCRA9TVsSAnZWagAAiqYP/RPVsu1FgeJBMm38/8jO\ndtoU30IeInZt9mE1kiORy1QUGcdI10gTPZBSf+JB9EFJg5nEmh+V6vsPV8dD\njKjmXNML7UkvM8tH7tfKjCkpbbWv/iB17kCg5NbYclgw5odljkvpOdS5xlWm\n3VxpXaZFO95ADGEHIcT/dRqGZKLAcGlAPnWsUp/Z/AJ/vfCDBi8Pt68UZoMD\nnRffQkPJ647zPq3rTl5i4uKlBCa3EVEwlYTdKhozzBrvuyRr6IzrduK+PDOa\nFzcthqlD5Kd51ZBvSqyT7SCiGJ5FrHbX7w9pXZi1EHKpIot2UI1BsGbX5roz\nzI/g0qV3NJ08BSX7XHzaDMNr2iiguwAKVYOvUfYHfBHNYJZELMOi8q8p2NqU\nnOP5VMMdxjqE223wgRTdecD80OFli8gAnx7w8PExmMMttnTAW1ErfgKGQUHB\nUVtO2eeiMOsOVaqFOi+lb6Io1BcqsnJsyJSd0YjErfX+eizJWEHtGyWj7Y+Z\ntamUpRdx9h9oTazUTbyYD2uZxnexBAJ1bhwY5Ui+hptQ1NzDnlSXyzApV01Z\n687DKNpBEh6JEUlnlD6hIPbkg831sqf15nRUJ0Y1CDJL6Ti3S8cjkUenoLXK\nef0pcSL18vsHGJpRwtZILUUx9e4M8xqZEOpRqUSSPo+1M9q7AqWhQ2S+0IO/\nG5+D\r\n=G0S4\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC+kAHbzv0WS+88v1QBiZ0HMXHihVd+/qHKtVnPaVg97wIhANdJfKi8xccmLTy3b/QoWdKpfWwAJTbcRbwoaI3zRZZl"}]},"maintainers":[{"email":"aaron@abramov.io","name":"aaronabramov"},{"email":"christoph.pojer@gmail.com","name":"cpojer"},{"email":"davidzilburg@gmail.com","name":"davidzilburg"},{"email":"opensource+npm@fb.com","name":"fb"},{"email":"rubennorte@gmail.com","name":"rubennorte"},{"email":"scott.hovestadt@gmail.com","name":"scotthovestadt"},{"email":"sbekkhus91@gmail.com","name":"simenb"}],"_npmUser":{"name":"simenb","email":"sbekkhus91@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pretty-format_25.3.0_1586352065592_0.6521314664307742"},"_hasShrinkwrap":false},"25.4.0":{"name":"pretty-format","version":"25.4.0","repository":{"type":"git","url":"git+https://github.com/facebook/jest.git","directory":"packages/pretty-format"},"license":"MIT","description":"Stringify any JavaScript value.","main":"build/index.js","types":"build/index.d.ts","typesVersions":{"<3.8":{"build/*":["build/ts3.4/*"]}},"browser":"build-es5/index.js","author":{"name":"James Kyle","email":"me@thejameskyle.com"},"dependencies":{"@jest/types":"^25.4.0","ansi-regex":"^5.0.0","ansi-styles":"^4.0.0","react-is":"^16.12.0"},"devDependencies":{"@types/react":"*","@types/react-is":"^16.7.1","@types/react-test-renderer":"*","immutable":"4.0.0-rc.9","react":"*","react-dom":"*","react-test-renderer":"*"},"engines":{"node":">= 8.3"},"publishConfig":{"access":"public"},"gitHead":"5b129d714cadb818be28afbe313cbeae8fbb1dde","bugs":{"url":"https://github.com/facebook/jest/issues"},"homepage":"https://github.com/facebook/jest#readme","_id":"pretty-format@25.4.0","_nodeVersion":"12.16.1","_npmVersion":"lerna/3.20.2/node@v12.16.1+x64 (darwin)","dist":{"integrity":"sha512-PI/2dpGjXK5HyXexLPZU/jw5T9Q6S1YVXxxVxco+LIqzUFHXIbKZKdUVt7GcX7QUCr31+3fzhi4gN4/wUYPVxQ==","shasum":"c58801bb5c4926ff4a677fe43f9b8b99812c7830","tarball":"http://localhost:4545/npm/registry/pretty-format/pretty-format-25.4.0.tgz","fileCount":41,"unpackedSize":366200,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJenMehCRA9TVsSAnZWagAAu0sQAIO1/dYc4mXtdtbcRDvd\nAAqvXKOLhzSHmay4vu2lXuHqJ3s1jWn8VYcR7WgLS5IsttWhfUp8RJWPAk6v\nJMHck95bEv15wcVAffNWRCH+ENVd3BKmxLq5t8JGYU99ytIW2D080Phav33T\nrlYXNjXct/hjadzwtlpNDcMtaHnRb79l1FQE0UuQW8f9ptJ6LSScq7Rg3/fM\nbp57wPExtXS5y+WE1HUSpd/uOErpo4Vg6cHb1SmNJZi4TDe1HokCfJvVBtO3\nVY1F7nzKeo+bV0J9Gh/oH49K41P1J5EZYh0DoZ83kf7ss7ysGcIfN9pnSNHt\na25doWyflJiFmmqZPKTz3MBzpJr3Rwica3XyMva6bQk0vocGGekvGZj4pMaA\nr08bpTKhwhzZF+4uVDcZsQQEp2g60zoKusAhuWwPdzMll/JQ+0dYTI9Pstef\nSra4auEx4NJ8voBgliNN/ZWS6jUR/lTxZg1L+2QrxvzpZGLIte2R7sG5dI7E\nzn8am4qf+eLsNOFohmAKgojaYqZ26FqVaufQmNDNQyqYZsse+Cnzf3es+euH\nVbA4O2JqLkh82jersovYiQVpK1Sgu+HhQIRy6eo3laJVVcFnCicvpfVleh64\n38g1k/gYyj5ZPfR2BAhIPc/NoAax7awYrxuIxfvjVvzIE4ylyVKIjZQjZHck\nNIm1\r\n=KhkF\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGvh24iFK2cVJea6kOsAY6LLJiSX4kg2pjFjcKtTrQe6AiEAlTtALMrhJV5y/4KCRYkiLhmqFKM+gWW8xMrnfmkrffE="}]},"maintainers":[{"email":"aaron@abramov.io","name":"aaronabramov"},{"email":"christoph.pojer@gmail.com","name":"cpojer"},{"email":"davidzilburg@gmail.com","name":"davidzilburg"},{"email":"opensource+npm@fb.com","name":"fb"},{"email":"rubennorte@gmail.com","name":"rubennorte"},{"email":"scott.hovestadt@gmail.com","name":"scotthovestadt"},{"email":"sbekkhus91@gmail.com","name":"simenb"}],"_npmUser":{"name":"simenb","email":"sbekkhus91@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pretty-format_25.4.0_1587333024724_0.15668900300821842"},"_hasShrinkwrap":false},"25.5.0":{"name":"pretty-format","version":"25.5.0","repository":{"type":"git","url":"git+https://github.com/facebook/jest.git","directory":"packages/pretty-format"},"license":"MIT","description":"Stringify any JavaScript value.","main":"build/index.js","types":"build/index.d.ts","typesVersions":{"<3.8":{"build/*":["build/ts3.4/*"]}},"browser":"build-es5/index.js","author":{"name":"James Kyle","email":"me@thejameskyle.com"},"dependencies":{"@jest/types":"^25.5.0","ansi-regex":"^5.0.0","ansi-styles":"^4.0.0","react-is":"^16.12.0"},"devDependencies":{"@types/react":"*","@types/react-is":"^16.7.1","@types/react-test-renderer":"*","immutable":"4.0.0-rc.9","react":"*","react-dom":"*","react-test-renderer":"*"},"engines":{"node":">= 8.3"},"publishConfig":{"access":"public"},"gitHead":"ddd73d18adfb982b9b0d94bad7d41c9f78567ca7","bugs":{"url":"https://github.com/facebook/jest/issues"},"homepage":"https://github.com/facebook/jest#readme","_id":"pretty-format@25.5.0","_nodeVersion":"12.16.1","_npmVersion":"lerna/3.20.2/node@v12.16.1+x64 (darwin)","dist":{"integrity":"sha512-kbo/kq2LQ/A/is0PQwsEHM7Ca6//bGPPvU6UnsdDRSKTWxT/ru/xb88v4BJf6a69H+uTytOEsTusT9ksd/1iWQ==","shasum":"7873c1d774f682c34b8d48b6743a2bf2ac55791a","tarball":"http://localhost:4545/npm/registry/pretty-format/pretty-format-25.5.0.tgz","fileCount":41,"unpackedSize":366200,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeqIfRCRA9TVsSAnZWagAA950QAI+Ra55c5jKG+inbcGuh\nTMatT4SHMrYsgyMqF0Zh6eAMJlAyZxT/AjJmj1Jb+bukEW/dmKD8TD0bXXrs\nLuBkWa/A91gCPDtarP4qogAubphJ2hV2xG3RuN4NvgjRi63ygKYs6R06uyQd\nEIZV+6wz6NQP46FCvIuwFImtxvbIuyXC0OqXwkpJH2oeusMv/futgYFpn5vN\nlSpkq/WYvQTTzw5xA6Cp5tzpF+Dnljd39hhNhfPDWzX6cqp8iHng77iS5smS\n9DhnBRQgbnckzYb1TLiqW5Ze5sfF6zGAS9ma8Elv8cn4oXmWMGQjrgkHg/av\nUCnRMQs0JT+MRiPRHLqS0Nq/RA1P58jHWBDy4BRmh2iSQ12Wdda5QfBwR1TQ\n1ffh5qVlwOXLFTbG9Ch6uiNZD956P9waE5l9Wv8Wcie+spkv2G1N47PL2V/g\nnPLJJXGrJtjqFk9jh4R9gKNzr98hDgfKB4huL+CwPUVzo1PKozI5n4BFfpJi\n/DYI/vQPtu8ItrrWnfDCirJfhAixmqG2jytKJiHyPSaH38mtUOqOS9JMVWme\nRWuaPCYLxGT8p/8ixaQPQKkTFyuFj3U1VGi/CKSRxyI04TPRMjiHaQYk97CX\nVMQcX/VTvwTSwJo84Av1HYHnn/xDP6T7QCOXzVvUw49iSs1mKhT53F+Y26jU\nL8Cp\r\n=qXI8\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCuKBSuHNkkUs8LusrTfskRcyxhZHK8Lz4mFKY9LvPgSwIgcW7eCN3Y60NoVCxNHC7vKKW/XILXOPeSSZ7lv5ibkW0="}]},"maintainers":[{"email":"aaron@abramov.io","name":"aaronabramov"},{"email":"christoph.pojer@gmail.com","name":"cpojer"},{"email":"davidzilburg@gmail.com","name":"davidzilburg"},{"email":"opensource+npm@fb.com","name":"fb"},{"email":"rubennorte@gmail.com","name":"rubennorte"},{"email":"scott.hovestadt@gmail.com","name":"scotthovestadt"},{"email":"sbekkhus91@gmail.com","name":"simenb"}],"_npmUser":{"name":"simenb","email":"sbekkhus91@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pretty-format_25.5.0_1588103121046_0.437551209581599"},"_hasShrinkwrap":false},"26.0.0-alpha.0":{"name":"pretty-format","version":"26.0.0-alpha.0","repository":{"type":"git","url":"git+https://github.com/facebook/jest.git","directory":"packages/pretty-format"},"license":"MIT","description":"Stringify any JavaScript value.","main":"build/index.js","types":"build/index.d.ts","author":{"name":"James Kyle","email":"me@thejameskyle.com"},"dependencies":{"@jest/types":"^26.0.0-alpha.0","ansi-regex":"^5.0.0","ansi-styles":"^4.0.0","react-is":"^16.12.0"},"devDependencies":{"@types/react":"*","@types/react-is":"^16.7.1","@types/react-test-renderer":"*","immutable":"4.0.0-rc.9","react":"*","react-dom":"*","react-test-renderer":"*"},"engines":{"node":">= 10.14.2"},"publishConfig":{"access":"public"},"gitHead":"ba962e7e9669a4a2f723c2536c97462c8ddfff2d","bugs":{"url":"https://github.com/facebook/jest/issues"},"homepage":"https://github.com/facebook/jest#readme","_id":"pretty-format@26.0.0-alpha.0","_nodeVersion":"12.16.3","_npmVersion":"lerna/3.20.2/node@v12.16.3+x64 (darwin)","dist":{"integrity":"sha512-v96Ik4hRQ+5KHsuNh8RgZgWVMaXYiR+wqGu+kYoq6baj3yeItQfs+CA5MASLfbQOCSbabSuEVHBljb2Z9tJ9ww==","shasum":"39ca843d9ddae9d8c8d511fcaf0ee3a6e1a1d3fe","tarball":"http://localhost:4545/npm/registry/pretty-format/pretty-format-26.0.0-alpha.0.tgz","fileCount":27,"unpackedSize":66907,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJerWPMCRA9TVsSAnZWagAAaDMQAKUNRRJmkJZ8x4+bEqAr\nPPe5JXKNnDGmD3+vutG7P+/D+N7FfpnUXgxLoBqHhHFkNxRxvo5Q/bCokCyz\nl5A2uZy1yBVLX7xsPtX0+Kr3rrXQT/lNAn/nZz3P2Tp5UgMCcbDZZvpFIT+J\nKykmkRpdZIRLoWfd/Fxt6sFpDIT+SsGM/Zp34cPnXH9tO6/lkUtkZmDpod7U\nGoDXCgbPIbilhDMysz9rtqfesqHPyiiz6Hw8M6NR4fgbYC/rCz5tXcfHJJju\nEqfU1rIpB8+AaziHEyFLqU5zO2WCS6HD2gw2hryTEobgGW2u5dwkv60jmKR3\nf2LD05akK4Afvz3G1mSr8wGGOO+6AwUIqsI4q+4puupfTozXwsTpiK7e1MEA\n+NtaYZFd6/bHZGgDWeohNm1a0LtktSvcVhfBuav0tc0fTpqazQMEv3fOSTCa\n3iSDiKZXWcCKK+EM3NncWP/KpqYakSzlUfLM2+FcVDZyEi9xiw7Y48KazJ/0\nca/5Yqml2sGDkUFrcHEq4EBQ2KtgjVY6GEvrtoU4RoN7iGkKj/FoBb3TZ+ib\nYLwbT49ao2k1yH+a0yVtE9Z6cysdQnV74Nn5/VnzvXkGXdCi20TEp9Vr8nrg\n1gakI6a4LUIkQ9wVRasYP67+iZvDP7CTKRgJ2op06DT2xsg+uPFGSBBv99y9\n9ppX\r\n=KJmV\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAzk0QTSGp/WrfdYYXgQuxU6/kdTtNC/yN8CPdL9NddnAiAguoa/TT3g/6CD1MOWi7uRExpt5bBmJEk+PqfmlC9ZUg=="}]},"maintainers":[{"email":"aaron@abramov.io","name":"aaronabramov"},{"email":"christoph.pojer@gmail.com","name":"cpojer"},{"email":"davidzilburg@gmail.com","name":"davidzilburg"},{"email":"opensource+npm@fb.com","name":"fb"},{"email":"rubennorte@gmail.com","name":"rubennorte"},{"email":"scott.hovestadt@gmail.com","name":"scotthovestadt"},{"email":"sbekkhus91@gmail.com","name":"simenb"}],"_npmUser":{"name":"simenb","email":"sbekkhus91@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pretty-format_26.0.0-alpha.0_1588421580286_0.2865787878999875"},"_hasShrinkwrap":false},"26.0.0-alpha.1":{"name":"pretty-format","version":"26.0.0-alpha.1","repository":{"type":"git","url":"git+https://github.com/facebook/jest.git","directory":"packages/pretty-format"},"license":"MIT","description":"Stringify any JavaScript value.","main":"build/index.js","types":"build/index.d.ts","author":{"name":"James Kyle","email":"me@thejameskyle.com"},"dependencies":{"@jest/types":"^26.0.0-alpha.1","ansi-regex":"^5.0.0","ansi-styles":"^4.0.0","react-is":"^16.12.0"},"devDependencies":{"@types/react":"*","@types/react-is":"^16.7.1","@types/react-test-renderer":"*","immutable":"4.0.0-rc.9","jest-util":"^25.2.6","react":"*","react-dom":"*","react-test-renderer":"*"},"engines":{"node":">= 10.14.2"},"publishConfig":{"access":"public"},"gitHead":"2bac04ffb8e533d12a072998da5c3751a41b796f","readme":"# pretty-format\n\nStringify any JavaScript value.\n\n- Serialize built-in JavaScript types.\n- Serialize application-specific data types with built-in or user-defined plugins.\n\n## Installation\n\n```sh\n$ yarn add pretty-format\n```\n\n## Usage\n\n```js\nconst prettyFormat = require('pretty-format'); // CommonJS\n```\n\n```js\nimport prettyFormat from 'pretty-format'; // ES2015 modules\n```\n\n```js\nconst val = {object: {}};\nval.circularReference = val;\nval[Symbol('foo')] = 'foo';\nval.map = new Map([['prop', 'value']]);\nval.array = [-0, Infinity, NaN];\n\nconsole.log(prettyFormat(val));\n/*\nObject {\n \"array\": Array [\n -0,\n Infinity,\n NaN,\n ],\n \"circularReference\": [Circular],\n \"map\": Map {\n \"prop\" => \"value\",\n },\n \"object\": Object {},\n Symbol(foo): \"foo\",\n}\n*/\n```\n\n## Usage with options\n\n```js\nfunction onClick() {}\n\nconsole.log(prettyFormat(onClick));\n/*\n[Function onClick]\n*/\n\nconst options = {\n printFunctionName: false,\n};\nconsole.log(prettyFormat(onClick, options));\n/*\n[Function]\n*/\n```\n\n\n| key | type | default | description |\n| :------------------ | :-------- | :--------- | :------------------------------------------------------ |\n| `callToJSON` | `boolean` | `true` | call `toJSON` method (if it exists) on objects |\n| `escapeRegex` | `boolean` | `false` | escape special characters in regular expressions |\n| `escapeString` | `boolean` | `true` | escape special characters in strings |\n| `highlight` | `boolean` | `false` | highlight syntax with colors in terminal (some plugins) |\n| `indent` | `number` | `2` | spaces in each level of indentation |\n| `maxDepth` | `number` | `Infinity` | levels to print in arrays, objects, elements, and so on |\n| `min` | `boolean` | `false` | minimize added space: no indentation nor line breaks |\n| `plugins` | `array` | `[]` | plugins to serialize application-specific data types |\n| `printFunctionName` | `boolean` | `true` | include or omit the name of a function |\n| `theme` | `object` | | colors to highlight syntax in terminal |\n\nProperty values of `theme` are from [ansi-styles colors](https://github.com/chalk/ansi-styles#colors)\n\n```js\nconst DEFAULT_THEME = {\n comment: 'gray',\n content: 'reset',\n prop: 'yellow',\n tag: 'cyan',\n value: 'green',\n};\n```\n\n## Usage with plugins\n\nThe `pretty-format` package provides some built-in plugins, including:\n\n- `ReactElement` for elements from `react`\n- `ReactTestComponent` for test objects from `react-test-renderer`\n\n```js\n// CommonJS\nconst prettyFormat = require('pretty-format');\nconst ReactElement = prettyFormat.plugins.ReactElement;\nconst ReactTestComponent = prettyFormat.plugins.ReactTestComponent;\n\nconst React = require('react');\nconst renderer = require('react-test-renderer');\n```\n\n```js\n// ES2015 modules and destructuring assignment\nimport prettyFormat from 'pretty-format';\nconst {ReactElement, ReactTestComponent} = prettyFormat.plugins;\n\nimport React from 'react';\nimport renderer from 'react-test-renderer';\n```\n\n```js\nconst onClick = () => {};\nconst element = React.createElement('button', {onClick}, 'Hello World');\n\nconst formatted1 = prettyFormat(element, {\n plugins: [ReactElement],\n printFunctionName: false,\n});\nconst formatted2 = prettyFormat(renderer.create(element).toJSON(), {\n plugins: [ReactTestComponent],\n printFunctionName: false,\n});\n/*\n\n*/\n```\n\n## Usage in Jest\n\nFor snapshot tests, Jest uses `pretty-format` with options that include some of its built-in plugins. For this purpose, plugins are also known as **snapshot serializers**.\n\nTo serialize application-specific data types, you can add modules to `devDependencies` of a project, and then:\n\nIn an **individual** test file, you can add a module as follows. It precedes any modules from Jest configuration.\n\n```js\nimport serializer from 'my-serializer-module';\nexpect.addSnapshotSerializer(serializer);\n\n// tests which have `expect(value).toMatchSnapshot()` assertions\n```\n\nFor **all** test files, you can specify modules in Jest configuration. They precede built-in plugins for React, HTML, and Immutable.js data types. For example, in a `package.json` file:\n\n```json\n{\n \"jest\": {\n \"snapshotSerializers\": [\"my-serializer-module\"]\n }\n}\n```\n\n## Writing plugins\n\nA plugin is a JavaScript object.\n\nIf `options` has a `plugins` array: for the first plugin whose `test(val)` method returns a truthy value, then `prettyFormat(val, options)` returns the result from either:\n\n- `serialize(val, …)` method of the **improved** interface (available in **version 21** or later)\n- `print(val, …)` method of the **original** interface (if plugin does not have `serialize` method)\n\n### test\n\nWrite `test` so it can receive `val` argument of any type. To serialize **objects** which have certain properties, then a guarded expression like `val != null && …` or more concise `val && …` prevents the following errors:\n\n- `TypeError: Cannot read property 'whatever' of null`\n- `TypeError: Cannot read property 'whatever' of undefined`\n\nFor example, `test` method of built-in `ReactElement` plugin:\n\n```js\nconst elementSymbol = Symbol.for('react.element');\nconst test = val => val && val.$$typeof === elementSymbol;\n```\n\nPay attention to efficiency in `test` because `pretty-format` calls it often.\n\n### serialize\n\nThe **improved** interface is available in **version 21** or later.\n\nWrite `serialize` to return a string, given the arguments:\n\n- `val` which “passed the test”\n- unchanging `config` object: derived from `options`\n- current `indentation` string: concatenate to `indent` from `config`\n- current `depth` number: compare to `maxDepth` from `config`\n- current `refs` array: find circular references in objects\n- `printer` callback function: serialize children\n\n### config\n\n\n| key | type | description |\n| :------------------ | :-------- | :------------------------------------------------------ |\n| `callToJSON` | `boolean` | call `toJSON` method (if it exists) on objects |\n| `colors` | `Object` | escape codes for colors to highlight syntax |\n| `escapeRegex` | `boolean` | escape special characters in regular expressions |\n| `escapeString` | `boolean` | escape special characters in strings |\n| `indent` | `string` | spaces in each level of indentation |\n| `maxDepth` | `number` | levels to print in arrays, objects, elements, and so on |\n| `min` | `boolean` | minimize added space: no indentation nor line breaks |\n| `plugins` | `array` | plugins to serialize application-specific data types |\n| `printFunctionName` | `boolean` | include or omit the name of a function |\n| `spacingInner` | `strong` | spacing to separate items in a list |\n| `spacingOuter` | `strong` | spacing to enclose a list of items |\n\nEach property of `colors` in `config` corresponds to a property of `theme` in `options`:\n\n- the key is the same (for example, `tag`)\n- the value in `colors` is a object with `open` and `close` properties whose values are escape codes from [ansi-styles](https://github.com/chalk/ansi-styles) for the color value in `theme` (for example, `'cyan'`)\n\nSome properties in `config` are derived from `min` in `options`:\n\n- `spacingInner` and `spacingOuter` are **newline** if `min` is `false`\n- `spacingInner` is **space** and `spacingOuter` is **empty string** if `min` is `true`\n\n### Example of serialize and test\n\nThis plugin is a pattern you can apply to serialize composite data types. Side note: `pretty-format` does not need a plugin to serialize arrays.\n\n```js\n// We reused more code when we factored out a function for child items\n// that is independent of depth, name, and enclosing punctuation (see below).\nconst SEPARATOR = ',';\nfunction serializeItems(items, config, indentation, depth, refs, printer) {\n if (items.length === 0) {\n return '';\n }\n const indentationItems = indentation + config.indent;\n return (\n config.spacingOuter +\n items\n .map(\n item =>\n indentationItems +\n printer(item, config, indentationItems, depth, refs), // callback\n )\n .join(SEPARATOR + config.spacingInner) +\n (config.min ? '' : SEPARATOR) + // following the last item\n config.spacingOuter +\n indentation\n );\n}\n\nconst plugin = {\n test(val) {\n return Array.isArray(val);\n },\n serialize(array, config, indentation, depth, refs, printer) {\n const name = array.constructor.name;\n return ++depth > config.maxDepth\n ? '[' + name + ']'\n : (config.min ? '' : name + ' ') +\n '[' +\n serializeItems(array, config, indentation, depth, refs, printer) +\n ']';\n },\n};\n```\n\n```js\nconst val = {\n filter: 'completed',\n items: [\n {\n text: 'Write test',\n completed: true,\n },\n {\n text: 'Write serialize',\n completed: true,\n },\n ],\n};\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n plugins: [plugin],\n }),\n);\n/*\nObject {\n \"filter\": \"completed\",\n \"items\": Array [\n Object {\n \"completed\": true,\n \"text\": \"Write test\",\n },\n Object {\n \"completed\": true,\n \"text\": \"Write serialize\",\n },\n ],\n}\n*/\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n indent: 4,\n plugins: [plugin],\n }),\n);\n/*\nObject {\n \"filter\": \"completed\",\n \"items\": Array [\n Object {\n \"completed\": true,\n \"text\": \"Write test\",\n },\n Object {\n \"completed\": true,\n \"text\": \"Write serialize\",\n },\n ],\n}\n*/\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n maxDepth: 1,\n plugins: [plugin],\n }),\n);\n/*\nObject {\n \"filter\": \"completed\",\n \"items\": [Array],\n}\n*/\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n min: true,\n plugins: [plugin],\n }),\n);\n/*\n{\"filter\": \"completed\", \"items\": [{\"completed\": true, \"text\": \"Write test\"}, {\"completed\": true, \"text\": \"Write serialize\"}]}\n*/\n```\n\n### print\n\nThe **original** interface is adequate for plugins:\n\n- that **do not** depend on options other than `highlight` or `min`\n- that **do not** depend on `depth` or `refs` in recursive traversal, and\n- if values either\n - do **not** require indentation, or\n - do **not** occur as children of JavaScript data structures (for example, array)\n\nWrite `print` to return a string, given the arguments:\n\n- `val` which “passed the test”\n- current `printer(valChild)` callback function: serialize children\n- current `indenter(lines)` callback function: indent lines at the next level\n- unchanging `config` object: derived from `options`\n- unchanging `colors` object: derived from `options`\n\nThe 3 properties of `config` are `min` in `options` and:\n\n- `spacing` and `edgeSpacing` are **newline** if `min` is `false`\n- `spacing` is **space** and `edgeSpacing` is **empty string** if `min` is `true`\n\nEach property of `colors` corresponds to a property of `theme` in `options`:\n\n- the key is the same (for example, `tag`)\n- the value in `colors` is a object with `open` and `close` properties whose values are escape codes from [ansi-styles](https://github.com/chalk/ansi-styles) for the color value in `theme` (for example, `'cyan'`)\n\n### Example of print and test\n\nThis plugin prints functions with the **number of named arguments** excluding rest argument.\n\n```js\nconst plugin = {\n print(val) {\n return `[Function ${val.name || 'anonymous'} ${val.length}]`;\n },\n test(val) {\n return typeof val === 'function';\n },\n};\n```\n\n```js\nconst val = {\n onClick(event) {},\n render() {},\n};\n\nprettyFormat(val, {\n plugins: [plugin],\n});\n/*\nObject {\n \"onClick\": [Function onClick 1],\n \"render\": [Function render 0],\n}\n*/\n\nprettyFormat(val);\n/*\nObject {\n \"onClick\": [Function onClick],\n \"render\": [Function render],\n}\n*/\n```\n\nThis plugin **ignores** the `printFunctionName` option. That limitation of the original `print` interface is a reason to use the improved `serialize` interface, described above.\n\n```js\nprettyFormat(val, {\n plugins: [pluginOld],\n printFunctionName: false,\n});\n/*\nObject {\n \"onClick\": [Function onClick 1],\n \"render\": [Function render 0],\n}\n*/\n\nprettyFormat(val, {\n printFunctionName: false,\n});\n/*\nObject {\n \"onClick\": [Function],\n \"render\": [Function],\n}\n*/\n```\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/facebook/jest/issues"},"homepage":"https://github.com/facebook/jest#readme","_id":"pretty-format@26.0.0-alpha.1","_nodeVersion":"12.16.3","_npmVersion":"lerna/3.20.2/node@v12.16.3+x64 (darwin)","dist":{"integrity":"sha512-cmmphKwFlLnAkF5/qcIfVNxBBAcWqDwrHQkjpCTjzBn150tdXXNmt7DRjg2hPn9sSedURTW/0Hd85AFK6mJiyQ==","shasum":"e9349eca22cde5b973a441a524ab9506f93c5689","tarball":"http://localhost:4545/npm/registry/pretty-format/pretty-format-26.0.0-alpha.1.tgz","fileCount":27,"unpackedSize":66935,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJerxHhCRA9TVsSAnZWagAATHYP/Rrv3cBDysjGw8RqtRYN\n+g5CJLgnifVoV+AMTeVb4lKRA01IPnee4YYgM8VwqZH55d39PPhVkxxe+fET\nwLi+jYaoP2igo+fDHnti5vwqYWSvB1EjeU0IERrEBWKyONmuN8iqNUN+9tih\nmaO6sPMi5LgVKer8bvPzLV4QkQguBqX6pCKpvT8YC7va8wGokg+biT4Ui6Rn\nnozFptPOvqucphJKTLMk+VprPPhY/ID1fXec/SlVWW6sTDq6sIlyP7HtULe5\nLm/VZrMZtp1EOqBcrNbrcD2dQCdcVxaHLBWTvz3c6JsvygnqNs3MAQzEYAWD\nb9Q4m9/64mnQ9kD5PSbSLIBVvCVT0VPctlgY6auxQoxYx0JGG48ySvUXnigo\nxf7pFXEwDtmYgDt41MoodSKUQ3s/gh16q28xQmRdhPOytP0ZlaYltYrUSAu0\nLDSoadylLYJtykXUIlH8g3OMZyOPBN4l2/YkYryhzn4OOcKvo5jVfOcAqf20\ndlf+F9abSf1Icc4sVn7d45oH5LELYtUkEWZj+Qd9DTvaNeHwAUpS95pgXcAy\ns/lrwjtOO9nSBp0t+BbYIs2eRqKZM6gtXoBP1aRHZNYXO2r+i1gJOYk5SyVw\nzvTzHA5VNtfXYtvt6gUV7+KL0NH3CzLiy3pRxLOCFzn7xleLRP8Gxy3x2F+7\nCwTT\r\n=Tsvu\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDyilyev1QDUdzSDzQhjRdeDbkFA6A2MGljlMwY452qkAiA+F/Ut72h5XCusbbNTFtl35s9Ih6CtZft33jUDZqf4Mw=="}]},"maintainers":[{"email":"aaron@abramov.io","name":"aaronabramov"},{"email":"christoph.pojer@gmail.com","name":"cpojer"},{"email":"davidzilburg@gmail.com","name":"davidzilburg"},{"email":"opensource+npm@fb.com","name":"fb"},{"email":"rubennorte@gmail.com","name":"rubennorte"},{"email":"scott.hovestadt@gmail.com","name":"scotthovestadt"},{"email":"sbekkhus91@gmail.com","name":"simenb"}],"_npmUser":{"name":"simenb","email":"sbekkhus91@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pretty-format_26.0.0-alpha.1_1588531681337_0.22206005318311317"},"_hasShrinkwrap":false},"26.0.0-alpha.2":{"name":"pretty-format","version":"26.0.0-alpha.2","repository":{"type":"git","url":"git+https://github.com/facebook/jest.git","directory":"packages/pretty-format"},"license":"MIT","description":"Stringify any JavaScript value.","main":"build/index.js","types":"build/index.d.ts","author":{"name":"James Kyle","email":"me@thejameskyle.com"},"dependencies":{"@jest/types":"^26.0.0-alpha.2","ansi-regex":"^5.0.0","ansi-styles":"^4.0.0","react-is":"^16.12.0"},"devDependencies":{"@types/react":"*","@types/react-is":"^16.7.1","@types/react-test-renderer":"*","immutable":"4.0.0-rc.9","jest-util":"^25.2.6","react":"*","react-dom":"*","react-test-renderer":"*"},"engines":{"node":">= 10.14.2"},"publishConfig":{"access":"public"},"gitHead":"68b65afc97688bd5b0b433f8f585da57dcd1d418","readme":"# pretty-format\n\nStringify any JavaScript value.\n\n- Serialize built-in JavaScript types.\n- Serialize application-specific data types with built-in or user-defined plugins.\n\n## Installation\n\n```sh\n$ yarn add pretty-format\n```\n\n## Usage\n\n```js\nconst prettyFormat = require('pretty-format'); // CommonJS\n```\n\n```js\nimport prettyFormat from 'pretty-format'; // ES2015 modules\n```\n\n```js\nconst val = {object: {}};\nval.circularReference = val;\nval[Symbol('foo')] = 'foo';\nval.map = new Map([['prop', 'value']]);\nval.array = [-0, Infinity, NaN];\n\nconsole.log(prettyFormat(val));\n/*\nObject {\n \"array\": Array [\n -0,\n Infinity,\n NaN,\n ],\n \"circularReference\": [Circular],\n \"map\": Map {\n \"prop\" => \"value\",\n },\n \"object\": Object {},\n Symbol(foo): \"foo\",\n}\n*/\n```\n\n## Usage with options\n\n```js\nfunction onClick() {}\n\nconsole.log(prettyFormat(onClick));\n/*\n[Function onClick]\n*/\n\nconst options = {\n printFunctionName: false,\n};\nconsole.log(prettyFormat(onClick, options));\n/*\n[Function]\n*/\n```\n\n\n| key | type | default | description |\n| :------------------ | :-------- | :--------- | :------------------------------------------------------ |\n| `callToJSON` | `boolean` | `true` | call `toJSON` method (if it exists) on objects |\n| `escapeRegex` | `boolean` | `false` | escape special characters in regular expressions |\n| `escapeString` | `boolean` | `true` | escape special characters in strings |\n| `highlight` | `boolean` | `false` | highlight syntax with colors in terminal (some plugins) |\n| `indent` | `number` | `2` | spaces in each level of indentation |\n| `maxDepth` | `number` | `Infinity` | levels to print in arrays, objects, elements, and so on |\n| `min` | `boolean` | `false` | minimize added space: no indentation nor line breaks |\n| `plugins` | `array` | `[]` | plugins to serialize application-specific data types |\n| `printFunctionName` | `boolean` | `true` | include or omit the name of a function |\n| `theme` | `object` | | colors to highlight syntax in terminal |\n\nProperty values of `theme` are from [ansi-styles colors](https://github.com/chalk/ansi-styles#colors)\n\n```js\nconst DEFAULT_THEME = {\n comment: 'gray',\n content: 'reset',\n prop: 'yellow',\n tag: 'cyan',\n value: 'green',\n};\n```\n\n## Usage with plugins\n\nThe `pretty-format` package provides some built-in plugins, including:\n\n- `ReactElement` for elements from `react`\n- `ReactTestComponent` for test objects from `react-test-renderer`\n\n```js\n// CommonJS\nconst prettyFormat = require('pretty-format');\nconst ReactElement = prettyFormat.plugins.ReactElement;\nconst ReactTestComponent = prettyFormat.plugins.ReactTestComponent;\n\nconst React = require('react');\nconst renderer = require('react-test-renderer');\n```\n\n```js\n// ES2015 modules and destructuring assignment\nimport prettyFormat from 'pretty-format';\nconst {ReactElement, ReactTestComponent} = prettyFormat.plugins;\n\nimport React from 'react';\nimport renderer from 'react-test-renderer';\n```\n\n```js\nconst onClick = () => {};\nconst element = React.createElement('button', {onClick}, 'Hello World');\n\nconst formatted1 = prettyFormat(element, {\n plugins: [ReactElement],\n printFunctionName: false,\n});\nconst formatted2 = prettyFormat(renderer.create(element).toJSON(), {\n plugins: [ReactTestComponent],\n printFunctionName: false,\n});\n/*\n\n*/\n```\n\n## Usage in Jest\n\nFor snapshot tests, Jest uses `pretty-format` with options that include some of its built-in plugins. For this purpose, plugins are also known as **snapshot serializers**.\n\nTo serialize application-specific data types, you can add modules to `devDependencies` of a project, and then:\n\nIn an **individual** test file, you can add a module as follows. It precedes any modules from Jest configuration.\n\n```js\nimport serializer from 'my-serializer-module';\nexpect.addSnapshotSerializer(serializer);\n\n// tests which have `expect(value).toMatchSnapshot()` assertions\n```\n\nFor **all** test files, you can specify modules in Jest configuration. They precede built-in plugins for React, HTML, and Immutable.js data types. For example, in a `package.json` file:\n\n```json\n{\n \"jest\": {\n \"snapshotSerializers\": [\"my-serializer-module\"]\n }\n}\n```\n\n## Writing plugins\n\nA plugin is a JavaScript object.\n\nIf `options` has a `plugins` array: for the first plugin whose `test(val)` method returns a truthy value, then `prettyFormat(val, options)` returns the result from either:\n\n- `serialize(val, …)` method of the **improved** interface (available in **version 21** or later)\n- `print(val, …)` method of the **original** interface (if plugin does not have `serialize` method)\n\n### test\n\nWrite `test` so it can receive `val` argument of any type. To serialize **objects** which have certain properties, then a guarded expression like `val != null && …` or more concise `val && …` prevents the following errors:\n\n- `TypeError: Cannot read property 'whatever' of null`\n- `TypeError: Cannot read property 'whatever' of undefined`\n\nFor example, `test` method of built-in `ReactElement` plugin:\n\n```js\nconst elementSymbol = Symbol.for('react.element');\nconst test = val => val && val.$$typeof === elementSymbol;\n```\n\nPay attention to efficiency in `test` because `pretty-format` calls it often.\n\n### serialize\n\nThe **improved** interface is available in **version 21** or later.\n\nWrite `serialize` to return a string, given the arguments:\n\n- `val` which “passed the test”\n- unchanging `config` object: derived from `options`\n- current `indentation` string: concatenate to `indent` from `config`\n- current `depth` number: compare to `maxDepth` from `config`\n- current `refs` array: find circular references in objects\n- `printer` callback function: serialize children\n\n### config\n\n\n| key | type | description |\n| :------------------ | :-------- | :------------------------------------------------------ |\n| `callToJSON` | `boolean` | call `toJSON` method (if it exists) on objects |\n| `colors` | `Object` | escape codes for colors to highlight syntax |\n| `escapeRegex` | `boolean` | escape special characters in regular expressions |\n| `escapeString` | `boolean` | escape special characters in strings |\n| `indent` | `string` | spaces in each level of indentation |\n| `maxDepth` | `number` | levels to print in arrays, objects, elements, and so on |\n| `min` | `boolean` | minimize added space: no indentation nor line breaks |\n| `plugins` | `array` | plugins to serialize application-specific data types |\n| `printFunctionName` | `boolean` | include or omit the name of a function |\n| `spacingInner` | `strong` | spacing to separate items in a list |\n| `spacingOuter` | `strong` | spacing to enclose a list of items |\n\nEach property of `colors` in `config` corresponds to a property of `theme` in `options`:\n\n- the key is the same (for example, `tag`)\n- the value in `colors` is a object with `open` and `close` properties whose values are escape codes from [ansi-styles](https://github.com/chalk/ansi-styles) for the color value in `theme` (for example, `'cyan'`)\n\nSome properties in `config` are derived from `min` in `options`:\n\n- `spacingInner` and `spacingOuter` are **newline** if `min` is `false`\n- `spacingInner` is **space** and `spacingOuter` is **empty string** if `min` is `true`\n\n### Example of serialize and test\n\nThis plugin is a pattern you can apply to serialize composite data types. Side note: `pretty-format` does not need a plugin to serialize arrays.\n\n```js\n// We reused more code when we factored out a function for child items\n// that is independent of depth, name, and enclosing punctuation (see below).\nconst SEPARATOR = ',';\nfunction serializeItems(items, config, indentation, depth, refs, printer) {\n if (items.length === 0) {\n return '';\n }\n const indentationItems = indentation + config.indent;\n return (\n config.spacingOuter +\n items\n .map(\n item =>\n indentationItems +\n printer(item, config, indentationItems, depth, refs), // callback\n )\n .join(SEPARATOR + config.spacingInner) +\n (config.min ? '' : SEPARATOR) + // following the last item\n config.spacingOuter +\n indentation\n );\n}\n\nconst plugin = {\n test(val) {\n return Array.isArray(val);\n },\n serialize(array, config, indentation, depth, refs, printer) {\n const name = array.constructor.name;\n return ++depth > config.maxDepth\n ? '[' + name + ']'\n : (config.min ? '' : name + ' ') +\n '[' +\n serializeItems(array, config, indentation, depth, refs, printer) +\n ']';\n },\n};\n```\n\n```js\nconst val = {\n filter: 'completed',\n items: [\n {\n text: 'Write test',\n completed: true,\n },\n {\n text: 'Write serialize',\n completed: true,\n },\n ],\n};\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n plugins: [plugin],\n }),\n);\n/*\nObject {\n \"filter\": \"completed\",\n \"items\": Array [\n Object {\n \"completed\": true,\n \"text\": \"Write test\",\n },\n Object {\n \"completed\": true,\n \"text\": \"Write serialize\",\n },\n ],\n}\n*/\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n indent: 4,\n plugins: [plugin],\n }),\n);\n/*\nObject {\n \"filter\": \"completed\",\n \"items\": Array [\n Object {\n \"completed\": true,\n \"text\": \"Write test\",\n },\n Object {\n \"completed\": true,\n \"text\": \"Write serialize\",\n },\n ],\n}\n*/\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n maxDepth: 1,\n plugins: [plugin],\n }),\n);\n/*\nObject {\n \"filter\": \"completed\",\n \"items\": [Array],\n}\n*/\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n min: true,\n plugins: [plugin],\n }),\n);\n/*\n{\"filter\": \"completed\", \"items\": [{\"completed\": true, \"text\": \"Write test\"}, {\"completed\": true, \"text\": \"Write serialize\"}]}\n*/\n```\n\n### print\n\nThe **original** interface is adequate for plugins:\n\n- that **do not** depend on options other than `highlight` or `min`\n- that **do not** depend on `depth` or `refs` in recursive traversal, and\n- if values either\n - do **not** require indentation, or\n - do **not** occur as children of JavaScript data structures (for example, array)\n\nWrite `print` to return a string, given the arguments:\n\n- `val` which “passed the test”\n- current `printer(valChild)` callback function: serialize children\n- current `indenter(lines)` callback function: indent lines at the next level\n- unchanging `config` object: derived from `options`\n- unchanging `colors` object: derived from `options`\n\nThe 3 properties of `config` are `min` in `options` and:\n\n- `spacing` and `edgeSpacing` are **newline** if `min` is `false`\n- `spacing` is **space** and `edgeSpacing` is **empty string** if `min` is `true`\n\nEach property of `colors` corresponds to a property of `theme` in `options`:\n\n- the key is the same (for example, `tag`)\n- the value in `colors` is a object with `open` and `close` properties whose values are escape codes from [ansi-styles](https://github.com/chalk/ansi-styles) for the color value in `theme` (for example, `'cyan'`)\n\n### Example of print and test\n\nThis plugin prints functions with the **number of named arguments** excluding rest argument.\n\n```js\nconst plugin = {\n print(val) {\n return `[Function ${val.name || 'anonymous'} ${val.length}]`;\n },\n test(val) {\n return typeof val === 'function';\n },\n};\n```\n\n```js\nconst val = {\n onClick(event) {},\n render() {},\n};\n\nprettyFormat(val, {\n plugins: [plugin],\n});\n/*\nObject {\n \"onClick\": [Function onClick 1],\n \"render\": [Function render 0],\n}\n*/\n\nprettyFormat(val);\n/*\nObject {\n \"onClick\": [Function onClick],\n \"render\": [Function render],\n}\n*/\n```\n\nThis plugin **ignores** the `printFunctionName` option. That limitation of the original `print` interface is a reason to use the improved `serialize` interface, described above.\n\n```js\nprettyFormat(val, {\n plugins: [pluginOld],\n printFunctionName: false,\n});\n/*\nObject {\n \"onClick\": [Function onClick 1],\n \"render\": [Function render 0],\n}\n*/\n\nprettyFormat(val, {\n printFunctionName: false,\n});\n/*\nObject {\n \"onClick\": [Function],\n \"render\": [Function],\n}\n*/\n```\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/facebook/jest/issues"},"homepage":"https://github.com/facebook/jest#readme","_id":"pretty-format@26.0.0-alpha.2","_nodeVersion":"12.16.3","_npmVersion":"lerna/3.20.2/node@v12.16.3+x64 (darwin)","dist":{"integrity":"sha512-YpF/6WzsgE2h2YdLHHJmU+CeMLTOFZ1mmo4+iyjeoAFVgn9Wey9Rzywn/ePL9vuAJHTpshVOIYr0snGzq03Lfw==","shasum":"23e9c58713a40036cad21222afcef8378893febc","tarball":"http://localhost:4545/npm/registry/pretty-format/pretty-format-26.0.0-alpha.2.tgz","fileCount":27,"unpackedSize":66935,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJesD1HCRA9TVsSAnZWagAAnvwP/3DJUPzpFqqXOkweoD9R\nQCtYP/3C19ce2IFYSmLml6C1VjhioZ6ZarMKFdc6S+HsAlq58pn34fyKTldE\neO3uf/i4qmYoNsAFUMbyRyONka6BfN12TCQfVrRUFp/dSTAsQXWVlyvmZcGD\n8Y7zjOqv1VYhsfPpWxLuaDh27VR339j+W8yY7q74VWQYdXLWZrFR2ASV616g\nM4nQwKvtJ78bOFQ4ZdBXYxKIxuycNTwtMDT0uzZr2uru844D/Bfg07TY+pdd\nH+R1oQ7ZB5AenJz0N+n0+u4dsfewmgizGlSHBbF+k46T/RdjZ1kmHOY1lpfN\n7IUnNwkcEyNte585+In/BDyoOP1fjVk+V/am1gjzuOksV4KW0Bl2lOFcqRV4\nbNfol/b3p9AtUEaqSwzCj1jpdF8bQCsbbVzR98uozE1DxRtsi5qmq4fRg8TR\n5eEvkhz7GZECf5wKqqbI+iDZkTysVPLWkC0V5boZSR+jtdApQHkgp1UCEro8\naJAMuBNQlZc8BTgT8NYHC3qQWie3a+LnOxTquwiuyhE5X5KP1LExvu+C3py6\nMCDpGxr3NFS0GM5CU83j7PCGrDqtyNCg/IvVPiZf4IfQ2z0ZU95qJdxRFzOp\nljvlRz4TT/5pJLxllZhrBGTqpTn+rd7e++NOreSuJIx898Gzi2SMCLQgMNRb\nBtKz\r\n=B5G6\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCNU6FWvihlrYst/CjHKkvn8wZQ3hBqV7yS/HyV4EA3LAIhAPyekrtu2Oxrq4ZJDaLYyAO90nFj31W9WGhFtzGwvrGI"}]},"maintainers":[{"email":"aaron@abramov.io","name":"aaronabramov"},{"email":"christoph.pojer@gmail.com","name":"cpojer"},{"email":"davidzilburg@gmail.com","name":"davidzilburg"},{"email":"opensource+npm@fb.com","name":"fb"},{"email":"rubennorte@gmail.com","name":"rubennorte"},{"email":"scott.hovestadt@gmail.com","name":"scotthovestadt"},{"email":"sbekkhus91@gmail.com","name":"simenb"}],"_npmUser":{"name":"simenb","email":"sbekkhus91@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pretty-format_26.0.0-alpha.2_1588608326737_0.6471885134701545"},"_hasShrinkwrap":false},"26.0.0":{"name":"pretty-format","version":"26.0.0","repository":{"type":"git","url":"git+https://github.com/facebook/jest.git","directory":"packages/pretty-format"},"license":"MIT","description":"Stringify any JavaScript value.","main":"build/index.js","types":"build/index.d.ts","author":{"name":"James Kyle","email":"me@thejameskyle.com"},"dependencies":{"@jest/types":"^26.0.0","ansi-regex":"^5.0.0","ansi-styles":"^4.0.0","react-is":"^16.12.0"},"devDependencies":{"@types/react":"*","@types/react-is":"^16.7.1","@types/react-test-renderer":"*","immutable":"4.0.0-rc.9","jest-util":"^25.2.6","react":"*","react-dom":"*","react-test-renderer":"*"},"engines":{"node":">= 10.14.2"},"publishConfig":{"access":"public"},"gitHead":"343532a21f640ac2709c4076eef57e52279542e1","bugs":{"url":"https://github.com/facebook/jest/issues"},"homepage":"https://github.com/facebook/jest#readme","_id":"pretty-format@26.0.0","_nodeVersion":"12.16.3","_npmVersion":"lerna/3.20.2/node@v12.16.3+x64 (darwin)","dist":{"integrity":"sha512-4OtdVti4B3hklbxYsnrAK0zmXQwt5ujWYqtEp+KweeaIreQwFZ4VIUkYcyizOBl/L/r7STAyCsuQ5GDmqal3Yg==","shasum":"d9762345ab8bfbb91d704d9e7a18e77b79389ecf","tarball":"http://localhost:4545/npm/registry/pretty-format/pretty-format-26.0.0.tgz","fileCount":27,"unpackedSize":66919,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJesFaBCRA9TVsSAnZWagAARkEP/1VFeU8ZQtP9kTDsm8Mv\n1HTvJBOpDesAaG9+5qNISJDmhkZi+OctAuwJeP79gqlQcZjbGGFUJclkyytL\n+xa+pcO+ANkMty3/ueg76M6fbYDVy6e9t+HCxeRNAsEarlCIXNJBahFg2KJ6\nCGEcSe4y8p7CnmIt75R74f4PHL8t71fFtG1HB697GpadvJ0L4o7hmmhOWOwx\n1bVLrIzPU7grqj7bfWOPyHWv/rKLfwKTCUwtvildaUUMaL2gsk1HW4c3AMjp\n4nJKiYOl4YChwujbSyqDX7BFxP49dkvEZm5E8HZB43uMQSOfTxX+d2sQxGll\nk0nufuBbt/RwdNJyPDNcOIZ1tqmA4SmRZ+ErKu+dJsSBwpf52xbPt/JGaRSv\no40cd0ze6FjxG86mqX/AjgS1QzlfeDmtnsdKmuq0qhU3+dLt0ge0aR7dlkkn\nVYf7PqNyyBNPnGR/qs0cNivySvh2gTirfTvvmptOUaTTbiKu7V337qhLvies\njV/cYN4F8nn1W3yLkSqtocQqZFR5ZEz9OvLJ0TQOW9vna7sBtThPBSrj07HZ\ndBIWrN+QSexHfRHsSEzvdCe6DIvc7Jpqj6Cso5CHG5n9rmat4hEjflGsCs9c\nPSohtdfinhOzod25u4UfZtqt0sNQfAXUZMppG7nIYTL2kzpvLq7GPG3hcOAB\nkpDZ\r\n=uvaZ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFW73g9UFnpCCbA4LRNFQ9vHAVGCiWfkYY5WZjG10tgVAiB1s3MCGWJZSvWnD/ORqxy7OPHLOWXxS8lg1eSYFm9vkA=="}]},"maintainers":[{"email":"aaron@abramov.io","name":"aaronabramov"},{"email":"christoph.pojer@gmail.com","name":"cpojer"},{"email":"davidzilburg@gmail.com","name":"davidzilburg"},{"email":"opensource+npm@fb.com","name":"fb"},{"email":"rubennorte@gmail.com","name":"rubennorte"},{"email":"scott.hovestadt@gmail.com","name":"scotthovestadt"},{"email":"sbekkhus91@gmail.com","name":"simenb"}],"_npmUser":{"name":"simenb","email":"sbekkhus91@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pretty-format_26.0.0_1588614784971_0.45714553811274006"},"_hasShrinkwrap":false},"26.0.1-alpha.0":{"name":"pretty-format","version":"26.0.1-alpha.0","repository":{"type":"git","url":"git+https://github.com/facebook/jest.git","directory":"packages/pretty-format"},"license":"MIT","description":"Stringify any JavaScript value.","main":"build/index.js","types":"build/index.d.ts","author":{"name":"James Kyle","email":"me@thejameskyle.com"},"dependencies":{"@jest/types":"^26.0.1-alpha.0","ansi-regex":"^5.0.0","ansi-styles":"^4.0.0","react-is":"^16.12.0"},"devDependencies":{"@types/react":"*","@types/react-is":"^16.7.1","@types/react-test-renderer":"*","immutable":"4.0.0-rc.9","jest-util":"^25.2.6","react":"*","react-dom":"*","react-test-renderer":"*"},"engines":{"node":">= 10.14.2"},"publishConfig":{"access":"public"},"gitHead":"fb04716adb223ce2da1e6bb2b4ce7c011bad1807","readme":"# pretty-format\n\nStringify any JavaScript value.\n\n- Serialize built-in JavaScript types.\n- Serialize application-specific data types with built-in or user-defined plugins.\n\n## Installation\n\n```sh\n$ yarn add pretty-format\n```\n\n## Usage\n\n```js\nconst prettyFormat = require('pretty-format'); // CommonJS\n```\n\n```js\nimport prettyFormat from 'pretty-format'; // ES2015 modules\n```\n\n```js\nconst val = {object: {}};\nval.circularReference = val;\nval[Symbol('foo')] = 'foo';\nval.map = new Map([['prop', 'value']]);\nval.array = [-0, Infinity, NaN];\n\nconsole.log(prettyFormat(val));\n/*\nObject {\n \"array\": Array [\n -0,\n Infinity,\n NaN,\n ],\n \"circularReference\": [Circular],\n \"map\": Map {\n \"prop\" => \"value\",\n },\n \"object\": Object {},\n Symbol(foo): \"foo\",\n}\n*/\n```\n\n## Usage with options\n\n```js\nfunction onClick() {}\n\nconsole.log(prettyFormat(onClick));\n/*\n[Function onClick]\n*/\n\nconst options = {\n printFunctionName: false,\n};\nconsole.log(prettyFormat(onClick, options));\n/*\n[Function]\n*/\n```\n\n\n| key | type | default | description |\n| :------------------ | :-------- | :--------- | :------------------------------------------------------ |\n| `callToJSON` | `boolean` | `true` | call `toJSON` method (if it exists) on objects |\n| `escapeRegex` | `boolean` | `false` | escape special characters in regular expressions |\n| `escapeString` | `boolean` | `true` | escape special characters in strings |\n| `highlight` | `boolean` | `false` | highlight syntax with colors in terminal (some plugins) |\n| `indent` | `number` | `2` | spaces in each level of indentation |\n| `maxDepth` | `number` | `Infinity` | levels to print in arrays, objects, elements, and so on |\n| `min` | `boolean` | `false` | minimize added space: no indentation nor line breaks |\n| `plugins` | `array` | `[]` | plugins to serialize application-specific data types |\n| `printFunctionName` | `boolean` | `true` | include or omit the name of a function |\n| `theme` | `object` | | colors to highlight syntax in terminal |\n\nProperty values of `theme` are from [ansi-styles colors](https://github.com/chalk/ansi-styles#colors)\n\n```js\nconst DEFAULT_THEME = {\n comment: 'gray',\n content: 'reset',\n prop: 'yellow',\n tag: 'cyan',\n value: 'green',\n};\n```\n\n## Usage with plugins\n\nThe `pretty-format` package provides some built-in plugins, including:\n\n- `ReactElement` for elements from `react`\n- `ReactTestComponent` for test objects from `react-test-renderer`\n\n```js\n// CommonJS\nconst prettyFormat = require('pretty-format');\nconst ReactElement = prettyFormat.plugins.ReactElement;\nconst ReactTestComponent = prettyFormat.plugins.ReactTestComponent;\n\nconst React = require('react');\nconst renderer = require('react-test-renderer');\n```\n\n```js\n// ES2015 modules and destructuring assignment\nimport prettyFormat from 'pretty-format';\nconst {ReactElement, ReactTestComponent} = prettyFormat.plugins;\n\nimport React from 'react';\nimport renderer from 'react-test-renderer';\n```\n\n```js\nconst onClick = () => {};\nconst element = React.createElement('button', {onClick}, 'Hello World');\n\nconst formatted1 = prettyFormat(element, {\n plugins: [ReactElement],\n printFunctionName: false,\n});\nconst formatted2 = prettyFormat(renderer.create(element).toJSON(), {\n plugins: [ReactTestComponent],\n printFunctionName: false,\n});\n/*\n\n*/\n```\n\n## Usage in Jest\n\nFor snapshot tests, Jest uses `pretty-format` with options that include some of its built-in plugins. For this purpose, plugins are also known as **snapshot serializers**.\n\nTo serialize application-specific data types, you can add modules to `devDependencies` of a project, and then:\n\nIn an **individual** test file, you can add a module as follows. It precedes any modules from Jest configuration.\n\n```js\nimport serializer from 'my-serializer-module';\nexpect.addSnapshotSerializer(serializer);\n\n// tests which have `expect(value).toMatchSnapshot()` assertions\n```\n\nFor **all** test files, you can specify modules in Jest configuration. They precede built-in plugins for React, HTML, and Immutable.js data types. For example, in a `package.json` file:\n\n```json\n{\n \"jest\": {\n \"snapshotSerializers\": [\"my-serializer-module\"]\n }\n}\n```\n\n## Writing plugins\n\nA plugin is a JavaScript object.\n\nIf `options` has a `plugins` array: for the first plugin whose `test(val)` method returns a truthy value, then `prettyFormat(val, options)` returns the result from either:\n\n- `serialize(val, …)` method of the **improved** interface (available in **version 21** or later)\n- `print(val, …)` method of the **original** interface (if plugin does not have `serialize` method)\n\n### test\n\nWrite `test` so it can receive `val` argument of any type. To serialize **objects** which have certain properties, then a guarded expression like `val != null && …` or more concise `val && …` prevents the following errors:\n\n- `TypeError: Cannot read property 'whatever' of null`\n- `TypeError: Cannot read property 'whatever' of undefined`\n\nFor example, `test` method of built-in `ReactElement` plugin:\n\n```js\nconst elementSymbol = Symbol.for('react.element');\nconst test = val => val && val.$$typeof === elementSymbol;\n```\n\nPay attention to efficiency in `test` because `pretty-format` calls it often.\n\n### serialize\n\nThe **improved** interface is available in **version 21** or later.\n\nWrite `serialize` to return a string, given the arguments:\n\n- `val` which “passed the test”\n- unchanging `config` object: derived from `options`\n- current `indentation` string: concatenate to `indent` from `config`\n- current `depth` number: compare to `maxDepth` from `config`\n- current `refs` array: find circular references in objects\n- `printer` callback function: serialize children\n\n### config\n\n\n| key | type | description |\n| :------------------ | :-------- | :------------------------------------------------------ |\n| `callToJSON` | `boolean` | call `toJSON` method (if it exists) on objects |\n| `colors` | `Object` | escape codes for colors to highlight syntax |\n| `escapeRegex` | `boolean` | escape special characters in regular expressions |\n| `escapeString` | `boolean` | escape special characters in strings |\n| `indent` | `string` | spaces in each level of indentation |\n| `maxDepth` | `number` | levels to print in arrays, objects, elements, and so on |\n| `min` | `boolean` | minimize added space: no indentation nor line breaks |\n| `plugins` | `array` | plugins to serialize application-specific data types |\n| `printFunctionName` | `boolean` | include or omit the name of a function |\n| `spacingInner` | `strong` | spacing to separate items in a list |\n| `spacingOuter` | `strong` | spacing to enclose a list of items |\n\nEach property of `colors` in `config` corresponds to a property of `theme` in `options`:\n\n- the key is the same (for example, `tag`)\n- the value in `colors` is a object with `open` and `close` properties whose values are escape codes from [ansi-styles](https://github.com/chalk/ansi-styles) for the color value in `theme` (for example, `'cyan'`)\n\nSome properties in `config` are derived from `min` in `options`:\n\n- `spacingInner` and `spacingOuter` are **newline** if `min` is `false`\n- `spacingInner` is **space** and `spacingOuter` is **empty string** if `min` is `true`\n\n### Example of serialize and test\n\nThis plugin is a pattern you can apply to serialize composite data types. Side note: `pretty-format` does not need a plugin to serialize arrays.\n\n```js\n// We reused more code when we factored out a function for child items\n// that is independent of depth, name, and enclosing punctuation (see below).\nconst SEPARATOR = ',';\nfunction serializeItems(items, config, indentation, depth, refs, printer) {\n if (items.length === 0) {\n return '';\n }\n const indentationItems = indentation + config.indent;\n return (\n config.spacingOuter +\n items\n .map(\n item =>\n indentationItems +\n printer(item, config, indentationItems, depth, refs), // callback\n )\n .join(SEPARATOR + config.spacingInner) +\n (config.min ? '' : SEPARATOR) + // following the last item\n config.spacingOuter +\n indentation\n );\n}\n\nconst plugin = {\n test(val) {\n return Array.isArray(val);\n },\n serialize(array, config, indentation, depth, refs, printer) {\n const name = array.constructor.name;\n return ++depth > config.maxDepth\n ? '[' + name + ']'\n : (config.min ? '' : name + ' ') +\n '[' +\n serializeItems(array, config, indentation, depth, refs, printer) +\n ']';\n },\n};\n```\n\n```js\nconst val = {\n filter: 'completed',\n items: [\n {\n text: 'Write test',\n completed: true,\n },\n {\n text: 'Write serialize',\n completed: true,\n },\n ],\n};\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n plugins: [plugin],\n }),\n);\n/*\nObject {\n \"filter\": \"completed\",\n \"items\": Array [\n Object {\n \"completed\": true,\n \"text\": \"Write test\",\n },\n Object {\n \"completed\": true,\n \"text\": \"Write serialize\",\n },\n ],\n}\n*/\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n indent: 4,\n plugins: [plugin],\n }),\n);\n/*\nObject {\n \"filter\": \"completed\",\n \"items\": Array [\n Object {\n \"completed\": true,\n \"text\": \"Write test\",\n },\n Object {\n \"completed\": true,\n \"text\": \"Write serialize\",\n },\n ],\n}\n*/\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n maxDepth: 1,\n plugins: [plugin],\n }),\n);\n/*\nObject {\n \"filter\": \"completed\",\n \"items\": [Array],\n}\n*/\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n min: true,\n plugins: [plugin],\n }),\n);\n/*\n{\"filter\": \"completed\", \"items\": [{\"completed\": true, \"text\": \"Write test\"}, {\"completed\": true, \"text\": \"Write serialize\"}]}\n*/\n```\n\n### print\n\nThe **original** interface is adequate for plugins:\n\n- that **do not** depend on options other than `highlight` or `min`\n- that **do not** depend on `depth` or `refs` in recursive traversal, and\n- if values either\n - do **not** require indentation, or\n - do **not** occur as children of JavaScript data structures (for example, array)\n\nWrite `print` to return a string, given the arguments:\n\n- `val` which “passed the test”\n- current `printer(valChild)` callback function: serialize children\n- current `indenter(lines)` callback function: indent lines at the next level\n- unchanging `config` object: derived from `options`\n- unchanging `colors` object: derived from `options`\n\nThe 3 properties of `config` are `min` in `options` and:\n\n- `spacing` and `edgeSpacing` are **newline** if `min` is `false`\n- `spacing` is **space** and `edgeSpacing` is **empty string** if `min` is `true`\n\nEach property of `colors` corresponds to a property of `theme` in `options`:\n\n- the key is the same (for example, `tag`)\n- the value in `colors` is a object with `open` and `close` properties whose values are escape codes from [ansi-styles](https://github.com/chalk/ansi-styles) for the color value in `theme` (for example, `'cyan'`)\n\n### Example of print and test\n\nThis plugin prints functions with the **number of named arguments** excluding rest argument.\n\n```js\nconst plugin = {\n print(val) {\n return `[Function ${val.name || 'anonymous'} ${val.length}]`;\n },\n test(val) {\n return typeof val === 'function';\n },\n};\n```\n\n```js\nconst val = {\n onClick(event) {},\n render() {},\n};\n\nprettyFormat(val, {\n plugins: [plugin],\n});\n/*\nObject {\n \"onClick\": [Function onClick 1],\n \"render\": [Function render 0],\n}\n*/\n\nprettyFormat(val);\n/*\nObject {\n \"onClick\": [Function onClick],\n \"render\": [Function render],\n}\n*/\n```\n\nThis plugin **ignores** the `printFunctionName` option. That limitation of the original `print` interface is a reason to use the improved `serialize` interface, described above.\n\n```js\nprettyFormat(val, {\n plugins: [pluginOld],\n printFunctionName: false,\n});\n/*\nObject {\n \"onClick\": [Function onClick 1],\n \"render\": [Function render 0],\n}\n*/\n\nprettyFormat(val, {\n printFunctionName: false,\n});\n/*\nObject {\n \"onClick\": [Function],\n \"render\": [Function],\n}\n*/\n```\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/facebook/jest/issues"},"homepage":"https://github.com/facebook/jest#readme","_id":"pretty-format@26.0.1-alpha.0","_nodeVersion":"12.16.3","_npmVersion":"lerna/3.20.2/node@v12.16.3+x64 (darwin)","dist":{"integrity":"sha512-Qczpuno/OElWdmvHeO9WBZPirJ3WVW3Ew6+Dg5VVP7z5kIa1T+6rfdMAhortduGFet85SsLI309avTw/VP2ujg==","shasum":"d74222656995a2dd57b4902f5520534d5ba1294a","tarball":"http://localhost:4545/npm/registry/pretty-format/pretty-format-26.0.1-alpha.0.tgz","fileCount":27,"unpackedSize":66935,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJesJQdCRA9TVsSAnZWagAAL3EP/RNtvTLyUKPxwj7Zk7mO\n6K/xa5ktoRaFS9NN1TrMud4xbJpr5e5kemZAA5WDgUYafpRrN10wGo3jYgHd\n03eYk3cp1jLyEUlbTzJyeiZ9SnqYojLef6KKZJPaESiDf76N8CnUX9ZmYwIm\nsL4hx9w2kaGyOT7l4NnJsGZHH4X/7qXFq7AAa273KPasM46GOO+oB2kkbGAQ\nr8RIdRD0p4Af7sKew9G0JmoacaPXzfcIV51/ZwYp7KEdT60NUiZbdvVvy50T\nV8tK7M0o5fykFei51TPLUcftnPs8G6v5p7OkaMdFDb2Roz34rctAv1jKoXX4\nmXP2lGjuTFZbw5jMX+8+gkfwUj8t3uBnD4bD+qrhzzl8UZcmHIDoxBz2tv4z\nhcdxR3kn5onOFp5iWCLxFTJNqT9NR2XF9MvC+mVuMHkW0zbBIy9lfOCj3lWK\nRciWjg7plo0PEUPgGTv1f4Y7JLsYhXCt31hoY0uZaQmewYbOWOA/uRpjCMRw\nGVTSPxHwNOZ+fVqESnrmYc065w7VkqyGS74oMVShAhW4fsEk3E4MuDOTUHqn\ngaaACP6/iC+88LBxUWjovdgFWl0RNe+MuDsU7xCPjfY6B2WQFidC8ckGjBXL\nqnEx7PlTK+/ohkXQfcnuksJrqpIXB3SM8goD3XKSFcYWex+yjY9fs7ZMFKom\n8LKl\r\n=Quqc\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC6cd0WAWxwHfGTIxA++rinc/kv8+CwkdtKtDaASEEPywIgWDQ1TF0nHzRTSBpSIefr3RdEDUEs+b2rb/ilfCYuc5w="}]},"maintainers":[{"email":"aaron@abramov.io","name":"aaronabramov"},{"email":"christoph.pojer@gmail.com","name":"cpojer"},{"email":"davidzilburg@gmail.com","name":"davidzilburg"},{"email":"opensource+npm@fb.com","name":"fb"},{"email":"rubennorte@gmail.com","name":"rubennorte"},{"email":"scott.hovestadt@gmail.com","name":"scotthovestadt"},{"email":"sbekkhus91@gmail.com","name":"simenb"}],"_npmUser":{"name":"simenb","email":"sbekkhus91@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pretty-format_26.0.1-alpha.0_1588630557032_0.6479744224171478"},"_hasShrinkwrap":false},"26.0.1":{"name":"pretty-format","version":"26.0.1","repository":{"type":"git","url":"git+https://github.com/facebook/jest.git","directory":"packages/pretty-format"},"license":"MIT","description":"Stringify any JavaScript value.","main":"build/index.js","types":"build/index.d.ts","author":{"name":"James Kyle","email":"me@thejameskyle.com"},"dependencies":{"@jest/types":"^26.0.1","ansi-regex":"^5.0.0","ansi-styles":"^4.0.0","react-is":"^16.12.0"},"devDependencies":{"@types/react":"*","@types/react-is":"^16.7.1","@types/react-test-renderer":"*","immutable":"4.0.0-rc.9","jest-util":"^25.2.6","react":"*","react-dom":"*","react-test-renderer":"*"},"engines":{"node":">= 10.14.2"},"publishConfig":{"access":"public"},"gitHead":"40b8e1e157c9981dda5a68d73fff647e80fc9f5c","bugs":{"url":"https://github.com/facebook/jest/issues"},"homepage":"https://github.com/facebook/jest#readme","_id":"pretty-format@26.0.1","_nodeVersion":"12.16.3","_npmVersion":"lerna/3.20.2/node@v12.16.3+x64 (darwin)","dist":{"integrity":"sha512-SWxz6MbupT3ZSlL0Po4WF/KujhQaVehijR2blyRDCzk9e45EaYMVhMBn49fnRuHxtkSpXTes1GxNpVmH86Bxfw==","shasum":"a4fe54fe428ad2fd3413ca6bbd1ec8c2e277e197","tarball":"http://localhost:4545/npm/registry/pretty-format/pretty-format-26.0.1.tgz","fileCount":27,"unpackedSize":66919,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJesUKtCRA9TVsSAnZWagAAbMkP/2rQwPaRsOOODW1bX3/t\nYbCKuJPkYpsV8Fj3/YPEYRa2WgKOr/QSEJ5u/qGAptdgsLjaJ8XGo3nIOeXu\nC8LYDCMKPL3kFE/yqy8MWZCDHlHZR7bzqnSUR/bs+kHDfX3Tcu0SJG6ys0kD\n7Id7dDY7v8MB9DA1cGdto5cpYqKiBZ9DCy+yFle5H83LkQkhYxqdV9Y08p4b\ntcpAz6bxbcv0M0nD3WkcB9XoR8pMe7HNfYvJn4iuJI5adqWljHpQkUPhLXM4\ni6gRZesin3vSOmnB9UvEipzNJKArpY6OT9vsoJwbSGxfhULQaU7PpDmsSB0h\nhZE/AB5wAwkpBHKf7izIzfMqOveX+lSR0lytm8MQIE2ktMZhiHgYH29KJ2hy\nqEQ9Sbun/AjOUogXM+1IYz7/k+Dqo4TBzM5/9ImgKtRgnmVoUAhto7rzboJ2\nfpZ7iHndjEfcX38rrqzZ2kABi5PRZVleSZulZ0ZTg3c9Rt9IY2a7qsCD1g3r\n2SADFJAEVApypgfp0tX/vJVPIOfEkfCZxO5nbrQ+ENi5nlmtuBNu8tto715R\nxq1hsI9FQ5fot43/O5nn5AiKJyQSNEo+g2mSlbzilMkmVqlnbUZc+Gih75YK\nz7h7Y/gbn1YjS9UHKlDNlpXZ5DSei2HDD1WG5tN64Hv1S6UoX0dmBPTkTc9b\nB1Aw\r\n=C3tA\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDnEU4d4bAwwVGGKBkzeTCes6e2uhVzbm+8h5ChqLXMBQIhAJIoxb+yXi29YW6tVA0RUW5zwncbsf8IUucp+A6y1K3i"}]},"maintainers":[{"email":"aaron@abramov.io","name":"aaronabramov"},{"email":"christoph.pojer@gmail.com","name":"cpojer"},{"email":"davidzilburg@gmail.com","name":"davidzilburg"},{"email":"opensource+npm@fb.com","name":"fb"},{"email":"rubennorte@gmail.com","name":"rubennorte"},{"email":"scott.hovestadt@gmail.com","name":"scotthovestadt"},{"email":"sbekkhus91@gmail.com","name":"simenb"}],"_npmUser":{"name":"simenb","email":"sbekkhus91@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pretty-format_26.0.1_1588675244825_0.7195190465853294"},"_hasShrinkwrap":false},"26.1.0":{"name":"pretty-format","version":"26.1.0","repository":{"type":"git","url":"git+https://github.com/facebook/jest.git","directory":"packages/pretty-format"},"license":"MIT","description":"Stringify any JavaScript value.","main":"build/index.js","types":"build/index.d.ts","author":{"name":"James Kyle","email":"me@thejameskyle.com"},"dependencies":{"@jest/types":"^26.1.0","ansi-regex":"^5.0.0","ansi-styles":"^4.0.0","react-is":"^16.12.0"},"devDependencies":{"@types/react":"*","@types/react-is":"^16.7.1","@types/react-test-renderer":"*","immutable":"4.0.0-rc.9","jest-util":"^25.2.6","react":"*","react-dom":"*","react-test-renderer":"*"},"engines":{"node":">= 10.14.2"},"publishConfig":{"access":"public"},"gitHead":"817d8b6aca845dd4fcfd7f8316293e69f3a116c5","bugs":{"url":"https://github.com/facebook/jest/issues"},"homepage":"https://github.com/facebook/jest#readme","_id":"pretty-format@26.1.0","_nodeVersion":"12.18.1","_npmVersion":"lerna/3.20.2/node@v12.18.1+x64 (darwin)","dist":{"integrity":"sha512-GmeO1PEYdM+non4BKCj+XsPJjFOJIPnsLewqhDVoqY1xo0yNmDas7tC2XwpMrRAHR3MaE2hPo37deX5OisJ2Wg==","shasum":"272b9cd1f1a924ab5d443dc224899d7a65cb96ec","tarball":"http://localhost:4545/npm/registry/pretty-format/pretty-format-26.1.0.tgz","fileCount":27,"unpackedSize":66929,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe8hx/CRA9TVsSAnZWagAANU8P/2HXxhlVp7d096b3Bhx9\n7WZS7izVGCrDsdW0gHIySRNy2PfmIbR5NceLALU3I4p8nJqYk/kK7TGyGmwx\n3g+fQE3eqjwegjuCzaWGI6zPSCZqQnIWEtgFqxe3HjGABLHkrX0Vvav8okkL\nOB/AdFZ/XgdgLn8ED1xRB4Gk5vLjgkXryAblG7e/QA+RfA4ATbU/35KXBAhP\nJECcpRDLPVHQ3L6hyU96ovRGpEwMmaYRqN0QvyzzuFZnURcjXkB3HgpCD9fu\nTMCY7SzK8ZlE2uLWIKvkdIgGXXfKmt0bCFaBSfEJZ9T+g9gsB875edwzcUwm\n/6TEwds712CDKCYiF90Zt+IVdey8okhwqmRTNNqbFy5aZMGq23Icf4M1LI40\nEu50SJJ5dz4I2BJcIhsBDOqijgq9I7eeB3Einko+W26CJpMI9qV1gshlE3aS\ntu3pdeb+Ar429WApDwkpsd1SymxmmP1jJyBtD0AUkSgQ8ExhOdc/IubV82r+\n8DI3c7Yf2iCkKU/hLaMRHJq0Jl7F+DunsiftACHOGVgrv8Dd+kNvuA0KI7ce\nist4shQIGax2nB3jr1k8zqkgrxjMlctT+5hZWBVBcs68Uk2YaxGkPPooXi3g\nJ/KuEr1bNmuHitGAT1sWt3SygQdMZhaA8ysbPph/BZ2okmn4khtxnJrasSAo\nUwSD\r\n=dUw9\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCZFBc7da+zJZLxZMGHo0DdhoHhcqmy4d/NI24l1Rp25gIhAOOJMaXXyfrMEz7jI8qOCEq+TNklXfnLIae+m6kuZjoj"}]},"maintainers":[{"email":"aaron@abramov.io","name":"aaronabramov"},{"email":"christoph.pojer@gmail.com","name":"cpojer"},{"email":"davidzilburg@gmail.com","name":"davidzilburg"},{"email":"opensource+npm@fb.com","name":"fb"},{"email":"rubennorte@gmail.com","name":"rubennorte"},{"email":"scott.hovestadt@gmail.com","name":"scotthovestadt"},{"email":"sbekkhus91@gmail.com","name":"simenb"}],"_npmUser":{"name":"simenb","email":"sbekkhus91@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pretty-format_26.1.0_1592925310707_0.3402205445744704"},"_hasShrinkwrap":false},"26.2.0":{"name":"pretty-format","version":"26.2.0","repository":{"type":"git","url":"git+https://github.com/facebook/jest.git","directory":"packages/pretty-format"},"license":"MIT","description":"Stringify any JavaScript value.","main":"build/index.js","types":"build/index.d.ts","author":{"name":"James Kyle","email":"me@thejameskyle.com"},"dependencies":{"@jest/types":"^26.2.0","ansi-regex":"^5.0.0","ansi-styles":"^4.0.0","react-is":"^16.12.0"},"devDependencies":{"@types/react":"*","@types/react-is":"^16.7.1","@types/react-test-renderer":"*","immutable":"4.0.0-rc.9","jest-util":"^26.2.0","react":"*","react-dom":"*","react-test-renderer":"*"},"engines":{"node":">= 10.14.2"},"publishConfig":{"access":"public"},"gitHead":"4a716811a309dae135b780a87dc1647b285800eb","bugs":{"url":"https://github.com/facebook/jest/issues"},"homepage":"https://github.com/facebook/jest#readme","_id":"pretty-format@26.2.0","_nodeVersion":"12.18.1","_npmVersion":"lerna/3.20.2/node@v12.18.1+x64 (darwin)","dist":{"integrity":"sha512-qi/8IuBu2clY9G7qCXgCdD1Bf9w+sXakdHTRToknzMtVy0g7c4MBWaZy7MfB7ndKZovRO6XRwJiAYqq+MC7SDA==","shasum":"83ecc8d7de676ff224225055e72bd64821cec4f1","tarball":"http://localhost:4545/npm/registry/pretty-format/pretty-format-26.2.0.tgz","fileCount":27,"unpackedSize":67481,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfIpzeCRA9TVsSAnZWagAA/D4P/2ceYEyrbrz9uJF4gVGs\nttDKPNmEU5qtT49SEuURRqZO8jPO0G4IVSz1SEYVBgwb85DiVbcp4177642j\nxyOCP2OVk3/Jq/US0AiovNpZOxXOTAO7B+ji13f8XpQdHtvvlqi4XRPVyCgQ\nwnJA49CdJdz1DdflvDVmoOQbzK/DPAqrHNoAHstVs6py2ujYGs+PXz1VfEwJ\n97GZ9qTnBHk8BbPTyeaq4Sq+MAzjgry3XksfYtc00PxIPLOitRY0ZyvVeY/p\nHZF129G+/U2880nCO9o7Lqe46f6IS/XHODnmuzolJFmbKT649FX/dfPfF6K4\nF7DKiHJb1AKzo3UYO41QjRxeEN9tFaGlD23QbU6osutOBMK5Wt/RPA4t/Cuv\n8eTS6kVpRib9mqKsQydAQ/hpsZnRst19TPd8BOinuJ0omUjLED5S8g39kItX\njRDQPA/0g+lC3cwwH7IUZWplhbPkMXi2WnNxfVYNaM0wHR3PBzkq4IA+vPmr\nXH4uwupe0C976LcPl94uTQv0CJKIvxZmH4dufCxKstlT/P4sUi3SHq3t8Yhr\nvJhALAeL2wh1nLNkMa/QuntPBmwN+EtxIUUUGSD9f5pehyaWzZUwd78FRISs\nrZMvDdserg0GaI4sQ5r2icB8rxXUvhZgNWSijxMiLjWpLf5az03cSCujvUe7\nizy3\r\n=5hQ8\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEtItZGg6rCoh5/zRnIKoSOYwQBnpiimv9nesva8UPHcAiAVOTGNbJWZjOVyFziaVSQ4tE0bsYUw+cql0U6zF9bqjQ=="}]},"maintainers":[{"email":"aaron@abramov.io","name":"aaronabramov"},{"email":"christoph.pojer@gmail.com","name":"cpojer"},{"email":"davidzilburg@gmail.com","name":"davidzilburg"},{"email":"opensource+npm@fb.com","name":"fb"},{"email":"rubennorte@gmail.com","name":"rubennorte"},{"email":"scott.hovestadt@gmail.com","name":"scotthovestadt"},{"email":"sbekkhus91@gmail.com","name":"simenb"}],"_npmUser":{"name":"simenb","email":"sbekkhus91@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pretty-format_26.2.0_1596103902126_0.9841052534829695"},"_hasShrinkwrap":false},"26.3.0":{"name":"pretty-format","version":"26.3.0","repository":{"type":"git","url":"git+https://github.com/facebook/jest.git","directory":"packages/pretty-format"},"license":"MIT","description":"Stringify any JavaScript value.","main":"build/index.js","types":"build/index.d.ts","author":{"name":"James Kyle","email":"me@thejameskyle.com"},"dependencies":{"@jest/types":"^26.3.0","ansi-regex":"^5.0.0","ansi-styles":"^4.0.0","react-is":"^16.12.0"},"devDependencies":{"@types/react":"*","@types/react-is":"^16.7.1","@types/react-test-renderer":"*","immutable":"4.0.0-rc.9","jest-util":"^26.3.0","react":"*","react-dom":"*","react-test-renderer":"*"},"engines":{"node":">= 10.14.2"},"publishConfig":{"access":"public"},"gitHead":"3a7e06fe855515a848241bb06a6f6e117847443d","bugs":{"url":"https://github.com/facebook/jest/issues"},"homepage":"https://github.com/facebook/jest#readme","_id":"pretty-format@26.3.0","_nodeVersion":"12.18.1","_npmVersion":"lerna/3.22.1/node@v12.18.1+x64 (darwin)","dist":{"integrity":"sha512-24kRw4C2Ok8+SHquydTZZCZPF2fvANI7rChGs8sNu784+1Jkq5jVFMvNAJSLuLy6XUcP3Fnw+SscLIQag/CG8Q==","shasum":"d9a7b4bb2948cabc646e6a7729b12f686f3fed36","tarball":"http://localhost:4545/npm/registry/pretty-format/pretty-format-26.3.0.tgz","fileCount":27,"unpackedSize":67481,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfMTAkCRA9TVsSAnZWagAACjIP/2S3VfVvIQpPZFh19NpI\nvaX4R0sx0r1SXeTBebInLf9Ixdt2nn8GcY2886l+EKKvYuCjPeMuL+4XIQ/y\nfyiMRY+zaHjVBObj+kjA9cGyRyVX5YUXUp0cBu8lK9/dL+2ZdhFNta7ON+ho\n056vN+GAKI6zqpsChCOlYJ9clwyDHkGoOGLroz1WrbCLrzZSW3YhrwK71FOc\nP9KwLImjGV3syRm6VvBk+M413/FVkGeJO4XzRgojqHYZKMlWxc5HFsFF9c8p\nD6EEY+rOUCUQ7d+CmZNbyf0AEn+7rXxH553WrhVKowZoOPalUNN1Clc2sRKf\nduovBS+Foe452Bj/1ssYJ0qJ29MU2Mf2wbG9VOZZwqy04tyPgpJqB6OxUSWe\nyETAefPIC928qr2VmLkOf5EnaQdBqis2zxmRDsJ1W6zpNfqy7gayIX1+lbkZ\nCFXlAx90pKCLsyPt7uxluFSlyB0HU0BfCsnwPeiedS7/0BfR01KOYWf96S7K\nYJ6NhpqzwtOhBXC2aUP9FD+OFTZ32xlREkPiH7DA+0DG0o3Kmr3q3wm2FrMR\n1/7ZF8sHulHCuU7MyCmL5ZRmYnOKCYjITvEYNm1fi1RW5ibYckq/Gy1Xtgjy\nDZLFwIcq5GsXi2U4XISkaJ7L0l9GHEEuIK2JF3g8V/GxlIoOLd9C5wxt10yo\nFoeX\r\n=5WV/\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHa1PJnVxPpyxTTNZhgs2Zh9TH4otEQekUOMFRmDioT5AiEAni4ARaBbqI6wHiqIforOGaFgeQN0AD09AsVzVB6jUqE="}]},"maintainers":[{"email":"aaron@abramov.io","name":"aaronabramov"},{"email":"christoph.pojer@gmail.com","name":"cpojer"},{"email":"davidzilburg@gmail.com","name":"davidzilburg"},{"email":"opensource+npm@fb.com","name":"fb"},{"email":"rubennorte@gmail.com","name":"rubennorte"},{"email":"scott.hovestadt@gmail.com","name":"scotthovestadt"},{"email":"sbekkhus91@gmail.com","name":"simenb"}],"_npmUser":{"name":"simenb","email":"sbekkhus91@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pretty-format_26.3.0_1597059108189_0.5347288199257358"},"_hasShrinkwrap":false},"26.4.0":{"name":"pretty-format","version":"26.4.0","repository":{"type":"git","url":"git+https://github.com/facebook/jest.git","directory":"packages/pretty-format"},"license":"MIT","description":"Stringify any JavaScript value.","main":"build/index.js","types":"build/index.d.ts","author":{"name":"James Kyle","email":"me@thejameskyle.com"},"dependencies":{"@jest/types":"^26.3.0","ansi-regex":"^5.0.0","ansi-styles":"^4.0.0","react-is":"^16.12.0"},"devDependencies":{"@types/react":"*","@types/react-is":"^16.7.1","@types/react-test-renderer":"*","immutable":"4.0.0-rc.9","jest-util":"^26.3.0","react":"*","react-dom":"*","react-test-renderer":"*"},"engines":{"node":">= 10.14.2"},"publishConfig":{"access":"public"},"gitHead":"0b1e41d1d93ce4d15646f4a39fd5a7ffae5f43c3","bugs":{"url":"https://github.com/facebook/jest/issues"},"homepage":"https://github.com/facebook/jest#readme","_id":"pretty-format@26.4.0","_nodeVersion":"12.18.1","_npmVersion":"lerna/3.22.1/node@v12.18.1+x64 (darwin)","dist":{"integrity":"sha512-mEEwwpCseqrUtuMbrJG4b824877pM5xald3AkilJ47Po2YLr97/siejYQHqj2oDQBeJNbu+Q0qUuekJ8F0NAPg==","shasum":"c08073f531429e9e5024049446f42ecc9f933a3b","tarball":"http://localhost:4545/npm/registry/pretty-format/pretty-format-26.4.0.tgz","fileCount":27,"unpackedSize":67509,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfNFhiCRA9TVsSAnZWagAAj/UP/iREsYR8yJ0DK+qyWSY2\n7LYC7GjZXrH5CR0rAD8NoIB0RZcxKn3r9+Ub1NlaHn79nSS2pXBrRKvM86Nw\nYtMlYVNnRUrkr3nCEDG7Xb4/ES7SYA64Bl0oRN5Ljt79h2Z1xrR89CYxwUXF\nxSMLk2+paBMaD9dvh4z5KuGZofgYrBhX4+JK99Mb5SPsKwwpmoTLuWaG7sfh\nF9bjRxvuryaWg9xSJNr5I0B5tHbpSADu5lCTsl+bhX7FVyGXEuHRNvgs07Mn\nZesux0eIVoKI72SLurpZF1ZcUxw9StzelvV/j3A8tjwUhEF0PAb7LSKTAA/O\nXmSAZ3ZcPgMfOFDxGg/NTG/VmHU2TpqkehwcLO1YTY9oEy68oTZbPIPg2cLE\nLblKVhZWJ2HADAh5Bn2RAboH/cmdN4xJnTE30CCelcgnx8DI0QprE5RTLvWH\nDCtdUANYwb402HGtJCZtLw4gZPmuV5cqL3jSM5XHa8uKhw55isGUajNbRlBM\nnvOOhsWrHOyV202+iVRHq1/OK/4gsglB2F6MPUGsGCKRRWOWRToNcpB7jb3h\n8bfpOacJgO/H0X2U3lP4+TOLbxBkCG/lSGEIU+ULSCa7upl2rqzBFBcReXlb\nVk52reV9YX6xfbFDiI8xLKZYAsXgMeIfYpHEkVh3WX5lrmuMCWs5o0xzj4SD\nX2Cw\r\n=PrCa\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCRaHI4JlfsArB7xMhrBRUinNhe8RbEAlG39hjpZgTvgQIhANuudDEDYY0YvnBFSZ7UNz7Sq9WkaD+7rx1sQao9J2tj"}]},"maintainers":[{"email":"aaron@abramov.io","name":"aaronabramov"},{"email":"christoph.pojer@gmail.com","name":"cpojer"},{"email":"davidzilburg@gmail.com","name":"davidzilburg"},{"email":"opensource+npm@fb.com","name":"fb"},{"email":"rubennorte@gmail.com","name":"rubennorte"},{"email":"scott.hovestadt@gmail.com","name":"scotthovestadt"},{"email":"sbekkhus91@gmail.com","name":"simenb"}],"_npmUser":{"name":"simenb","email":"sbekkhus91@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pretty-format_26.4.0_1597266017827_0.26687810722358507"},"_hasShrinkwrap":false},"26.4.2":{"name":"pretty-format","version":"26.4.2","repository":{"type":"git","url":"git+https://github.com/facebook/jest.git","directory":"packages/pretty-format"},"license":"MIT","description":"Stringify any JavaScript value.","main":"build/index.js","types":"build/index.d.ts","author":{"name":"James Kyle","email":"me@thejameskyle.com"},"dependencies":{"@jest/types":"^26.3.0","ansi-regex":"^5.0.0","ansi-styles":"^4.0.0","react-is":"^16.12.0"},"devDependencies":{"@types/react":"*","@types/react-is":"^16.7.1","@types/react-test-renderer":"*","immutable":"4.0.0-rc.9","jest-util":"^26.3.0","react":"*","react-dom":"*","react-test-renderer":"*"},"engines":{"node":">= 10"},"publishConfig":{"access":"public"},"gitHead":"2586a798260886c28b6d28256cdfe354e039d5d1","bugs":{"url":"https://github.com/facebook/jest/issues"},"homepage":"https://github.com/facebook/jest#readme","_id":"pretty-format@26.4.2","_nodeVersion":"12.18.1","_npmVersion":"lerna/3.22.1/node@v12.18.1+x64 (darwin)","dist":{"integrity":"sha512-zK6Gd8zDsEiVydOCGLkoBoZuqv8VTiHyAbKznXe/gaph/DAeZOmit9yMfgIz5adIgAMMs5XfoYSwAX3jcCO1tA==","shasum":"d081d032b398e801e2012af2df1214ef75a81237","tarball":"http://localhost:4545/npm/registry/pretty-format/pretty-format-26.4.2.tgz","fileCount":27,"unpackedSize":67504,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfQQsVCRA9TVsSAnZWagAA0wUQAIHqeeT9KIpRcVKO+Mtm\nhm6zaFevuPDBlbkwo47fzr1QAbBfe+uJc/VOUMzTTpYkRW1d0no6I41SpLze\ntkCVWYECDuJkhk8KAHzeDL53kpIVnDUHu1A4Ct/++BS0N7oKC2QRPrg9x01V\nKv1MgRt78gCNYJyJ4xN/9yRegpgZnN/FxkmviuxZVGl9s/TCTFF7VYPUfqbe\ndPrWlzK4Xw48OJ1RKIhSoiNyS1bpKUaadGX1vWmrph60GMBrO+mpAMaPKo3g\nBIA830tUAA00cXXIqRBaY3/qhg49LKW70/Fx4HEcNhAr3SwjRfBIu5i91an6\nAaXRKGJ8a1sz8B90MippzHL03bTaGeqLkNfWxVjEvugypRYoqXOIk/lpzfc9\nWakyE2QxTKx1q1ep3/Kb6yi7gPru8ESbbNpSBaqj/0CqnaMWdhikfD4qEKXU\nlk86O+C1MglD/LeBRyCCVuay+/ETvdrMONB30ON/WsnMQCh62aaFPFIF+BpS\n8zNKA5xl/g7a/pZcZHlaTcrvp/L7fxq1gKGMLCe9LySOD514ZZwoWYt3c+Ok\npATpFBJkE54oS0qoL5Z0RnKrwj3mQkMVSsQj3J2GZTiEHnki3IMz2A9qM0S4\nvFoKFY24E1DKOAjKTpV1i8wtwTlTAU/qXIVxc1QZd6CNX8dkJzC1+FWY08JC\nBJyP\r\n=BUo+\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCEbt4e7INwbQFZxUk9yK0BPuufF9ch0by8/LJr+QgMkwIhAJ/bBEyGuQqhNPx/0kU73jJBcdmUorPEiKVJRVSTvusX"}]},"maintainers":[{"email":"aaron@abramov.io","name":"aaronabramov"},{"email":"christoph.pojer@gmail.com","name":"cpojer"},{"email":"davidzilburg@gmail.com","name":"davidzilburg"},{"email":"opensource+npm@fb.com","name":"fb"},{"email":"rubennorte@gmail.com","name":"rubennorte"},{"email":"scott.hovestadt@gmail.com","name":"scotthovestadt"},{"email":"sbekkhus91@gmail.com","name":"simenb"}],"_npmUser":{"name":"simenb","email":"sbekkhus91@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pretty-format_26.4.2_1598098196527_0.4485991105059288"},"_hasShrinkwrap":false},"26.5.0":{"name":"pretty-format","version":"26.5.0","repository":{"type":"git","url":"git+https://github.com/facebook/jest.git","directory":"packages/pretty-format"},"license":"MIT","description":"Stringify any JavaScript value.","main":"build/index.js","types":"build/index.d.ts","author":{"name":"James Kyle","email":"me@thejameskyle.com"},"dependencies":{"@jest/types":"^26.5.0","ansi-regex":"^5.0.0","ansi-styles":"^4.0.0","react-is":"^16.12.0"},"devDependencies":{"@types/react":"*","@types/react-is":"^16.7.1","@types/react-test-renderer":"*","immutable":"4.0.0-rc.9","jest-util":"^26.5.0","react":"*","react-dom":"*","react-test-renderer":"*"},"engines":{"node":">= 10"},"publishConfig":{"access":"public"},"gitHead":"68d1b1b638bc7464c2794a957c1b894de7da2ee3","bugs":{"url":"https://github.com/facebook/jest/issues"},"homepage":"https://github.com/facebook/jest#readme","_id":"pretty-format@26.5.0","_nodeVersion":"12.18.1","_npmVersion":"lerna/3.22.1/node@v12.18.1+x64 (darwin)","dist":{"integrity":"sha512-NcgRuuTutUJ9+Br4P19DFThpJYnYBiugfRmZEA6pXrUeG+IcMSmppb88rU+iPA+XAJcjTYlCb5Ed6miHg/Qqqw==","shasum":"3320e4952f8e6918fc8c26c6df7aad9734818ac2","tarball":"http://localhost:4545/npm/registry/pretty-format/pretty-format-26.5.0.tgz","fileCount":27,"unpackedSize":67564,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfeucvCRA9TVsSAnZWagAAm1YQAIf6oP1lVgBR+85Gij4m\n7k9OpLzipAAVMPUw0F180NtqVrjlh3RnlcQqczD8XAGySQ3z5wt9g//Rphuw\n98GKnQir2GPpTRwXCGN9VI0X+W8hdMMcxhHc/Wdw+XaelV407/dKn/KyFtRd\n9P3NyqOhZcRVj/CUfH1TnpA3JoSiFBXhQVp+vjmtx7GyyHD16NbQ3PxGnX7U\n2pCLhM0grfqxt/drKjx1287OK73A1T9YRkYKjbJMSv+a9ETSChFbn/+5voss\niLUXuO+X6zCMnFXWo5JxUtGbDtAPlY/25dBINgX+ocND57LoMohqdAkDL9B2\nIVjxZZVLaIhykNy9moAZwqsZI5aWjPUYi7L83qkHed4NGVjd6XbYsbWFkTDs\nEzB10ib9S/PbEcHTtB/ef/uug1HxwFsJR/3/ShUIabxSTaABqBj0TbXwBb3r\nRGXSDkqyD6TyYZAf3pMGcM9txD0XLdgpVfI6fD8FOScjDr8YBo0K40AGhwkz\nVKeDxjk6GYBTwvZN0tBMebmU0Bq2agjB0Lyr/5TmWrR1gdaO1pHkItpWGhh3\nffk8T3NhhaivAAQ3MQ/txxbXQG379lVp6sh7zU8J8yTMP3UinlWQeHzjjczu\nrn7zl0a5Ct/gMm0z4Wd+8hvdXR+aM2y+EJhP2NpAxqDD4UpRsDPvOZ551iQT\nUglO\r\n=sV6i\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCTfbY+PvBggHm67y92HodnWyGgGru2/ZZYunHlOUr+RgIhAMEUL2nEpJ0M4qGYW6v1fmB4BTxb86Yn0eCJdk1pGjFs"}]},"maintainers":[{"name":"scotthovestadt","email":"scott.hovestadt@gmail.com"},{"name":"rubennorte","email":"rubennorte@gmail.com"},{"name":"simenb","email":"sbekkhus91@gmail.com"},{"name":"cpojer","email":"christoph.pojer@gmail.com"},{"name":"fb","email":"opensource+npm@fb.com"},{"name":"aaronabramov","email":"aaron@abramov.io"},{"name":"davidzilburg","email":"davidzilburg@gmail.com"}],"_npmUser":{"name":"simenb","email":"sbekkhus91@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pretty-format_26.5.0_1601890094897_0.6435085745347244"},"_hasShrinkwrap":false},"26.5.2":{"name":"pretty-format","version":"26.5.2","repository":{"type":"git","url":"git+https://github.com/facebook/jest.git","directory":"packages/pretty-format"},"license":"MIT","description":"Stringify any JavaScript value.","main":"build/index.js","types":"build/index.d.ts","author":{"name":"James Kyle","email":"me@thejameskyle.com"},"dependencies":{"@jest/types":"^26.5.2","ansi-regex":"^5.0.0","ansi-styles":"^4.0.0","react-is":"^16.12.0"},"devDependencies":{"@types/react":"*","@types/react-is":"^16.7.1","@types/react-test-renderer":"*","immutable":"4.0.0-rc.9","jest-util":"^26.5.2","react":"*","react-dom":"*","react-test-renderer":"*"},"engines":{"node":">= 10"},"publishConfig":{"access":"public"},"gitHead":"d2bacceb51e7f05c9cb6d764d5cd886a2fd71267","bugs":{"url":"https://github.com/facebook/jest/issues"},"homepage":"https://github.com/facebook/jest#readme","_id":"pretty-format@26.5.2","_nodeVersion":"12.18.1","_npmVersion":"lerna/3.22.1/node@v12.18.1+x64 (darwin)","dist":{"integrity":"sha512-VizyV669eqESlkOikKJI8Ryxl/kPpbdLwNdPs2GrbQs18MpySB5S0Yo0N7zkg2xTRiFq4CFw8ct5Vg4a0xP0og==","shasum":"5d896acfdaa09210683d34b6dc0e6e21423cd3e1","tarball":"http://localhost:4545/npm/registry/pretty-format/pretty-format-26.5.2.tgz","fileCount":27,"unpackedSize":67564,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJffEx9CRA9TVsSAnZWagAAiK4QAIoXVJ9HxsubHszrHyIl\nDIznu8cQpQic6TYf1Qt4CMvwZtEKU0S/U3EDjloPUy6ckhvm32U5Z73840u+\n/BjffrJz8QUCGiwrFLY5Xcd7GFuNJaCay84X22aaK8MFKcZiZ21Pu1k03Szv\n1TDYQYQ4XXdr35wli6Ozk9Z18+tJHuUd2EzbRE+DbTx8ctpfYx72pWmmosP9\nrMEu9cqA4jG2PgSi1YUnvT3RWnaPd9CvUS8MNtX2Sp5JNagr+JXuiuX7lCRD\nk73nxedBNs/j7wfghyVhLR+0gG8Q/HWQz8RFaC3FCW/B0zXYlGDgeD5yBpTh\nyZ0lttp6bIfLKgzcbaIkw+CmJejOh07Wq9QYtjWiMqnqq5JEWcURsH1+mmgo\n14WajT8/KPEuAbhAGD3ZCmTNI3oWTdf/3e/rG0IpyFhYokkVm+KgjmxTxI4Z\nDr/30NL6CSxaYinThG8c+LXzyDwlHBJBK8CeEo4Y54NwmLMSWeCi4RA10Kkg\nU6TCYvt59T942KnmJb2xolhiF/SRvLtZ07ZRMv2ppuUE4UXwmC5lkZyVcxDC\nRRBOiCqxVElGun6D5Rk412YaO+MovKrPOazU4aRkxviwwBiprgOa73Rhgr0h\n9bMqiRtpFv2+IIb7EJxSrOd9dA3+lqUpleAelmueNhFn11KFpYY0fHLrFjWd\naEHL\r\n=3xuN\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCQlUp8EySQF5yGL3XYUqc25CjrcONlvUSrpQB0cPJ83QIhAJOOiw2sTOfcKgh5MfL/P14V/iZFuu+Aw2KfdNN/ZXAa"}]},"maintainers":[{"name":"scotthovestadt","email":"scott.hovestadt@gmail.com"},{"name":"rubennorte","email":"rubennorte@gmail.com"},{"name":"simenb","email":"sbekkhus91@gmail.com"},{"name":"cpojer","email":"christoph.pojer@gmail.com"},{"name":"fb","email":"opensource+npm@fb.com"},{"name":"aaronabramov","email":"aaron@abramov.io"},{"name":"davidzilburg","email":"davidzilburg@gmail.com"}],"_npmUser":{"name":"simenb","email":"sbekkhus91@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pretty-format_26.5.2_1601981564548_0.2252929830964001"},"_hasShrinkwrap":false},"26.6.0":{"name":"pretty-format","version":"26.6.0","repository":{"type":"git","url":"git+https://github.com/facebook/jest.git","directory":"packages/pretty-format"},"license":"MIT","description":"Stringify any JavaScript value.","main":"build/index.js","types":"build/index.d.ts","author":{"name":"James Kyle","email":"me@thejameskyle.com"},"dependencies":{"@jest/types":"^26.6.0","ansi-regex":"^5.0.0","ansi-styles":"^4.0.0","react-is":"^16.12.0"},"devDependencies":{"@types/react":"*","@types/react-is":"^16.7.1","@types/react-test-renderer":"*","immutable":"4.0.0-rc.9","jest-util":"^26.6.0","react":"*","react-dom":"*","react-test-renderer":"*"},"engines":{"node":">= 10"},"publishConfig":{"access":"public"},"gitHead":"b254fd82fdedcba200e1c7eddeaab83a09bdaaef","bugs":{"url":"https://github.com/facebook/jest/issues"},"homepage":"https://github.com/facebook/jest#readme","_id":"pretty-format@26.6.0","_nodeVersion":"12.19.0","_npmVersion":"lerna/3.22.1/node@v12.19.0+x64 (darwin)","dist":{"integrity":"sha512-Uumr9URVB7bm6SbaByXtx+zGlS+0loDkFMHP0kHahMjmfCtmFY03iqd++5v3Ld6iB5TocVXlBN/T+DXMn9d4BA==","shasum":"1e1030e3c70e3ac1c568a5fd15627671ea159391","tarball":"http://localhost:4545/npm/registry/pretty-format/pretty-format-26.6.0.tgz","fileCount":27,"unpackedSize":67564,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfjX9uCRA9TVsSAnZWagAAMA8P/2+h6HZakN/kOxuhmVJl\ntP9okVSvyZaY4/MjGtEqRmUhxDfA2SUT1PQniJN9ac2ucIV5oFwy8Lj59X7Q\nQpEiQuFp7jUqnIKPu+TjCy9NjWDR/8sMyr7+jGOWbh+qnM6xgKpi2kQkYmCI\nzq9Ymt4dq2DVzJieMp5zleWmqJujxt7Z7kMlcrmzJL9+I9fsTJ2tFhfh3k1q\na2hJEUW7DdDeNCEql1V8x63cr7MCheM4grIxaaidJEuXJ+bHNu5d7UJcSnoA\nOCeJsLKc10O5qbwQJcbUvnMPReb+/FM0YAyWRlTDEurq9Vf221m0WafWJF37\nx2SPUbE4QSLD8qlbC69OS/ZXMox2CrfqqHs8i0ShXvtlOCWr/p2Xf084nT0A\nJZ0g+DMYLqN3gGkUPVfvt3kBZm1rxpQDja9tWGLCOcxhtCOkrUkB8o/Oq9l6\nDTgpdGWHfHv7LgU5F2i7gTFKZjM30cQcisHpMriOuMfXVbj8+rZvu0HSjE0m\nIgMXgTLF8JjjOtcDt7WrMEry2otTMIlQsqRJl2iGdORlWY9JjB5N/ZajwipO\nhoRCSYxLP+CafRUcjtqqLfyOdc/jMjCYMIwiR/d+IMX1exGa9SVrRYDZQoO9\nz557BB7OpkWZfGyeuycvIWdLeesBxjEo8eKrb7//D1CKhRHRvzNdYOS4Q2SU\nqjH9\r\n=iFkv\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDfmatffMTBf9iASC+G1DBtmAYud65dCF2ZAVM5ZImcVQIgF8iGijc47E/a2zTCa+Sx1HTaCkWOkvghRxkXNpkRK7w="}]},"maintainers":[{"name":"scotthovestadt","email":"scott.hovestadt@gmail.com"},{"name":"rubennorte","email":"rubennorte@gmail.com"},{"name":"simenb","email":"sbekkhus91@gmail.com"},{"name":"cpojer","email":"christoph.pojer@gmail.com"},{"name":"fb","email":"opensource+npm@fb.com"},{"name":"aaronabramov","email":"aaron@abramov.io"},{"name":"davidzilburg","email":"davidzilburg@gmail.com"}],"_npmUser":{"name":"simenb","email":"sbekkhus91@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pretty-format_26.6.0_1603108717608_0.242439414276991"},"_hasShrinkwrap":false},"26.6.1":{"name":"pretty-format","version":"26.6.1","repository":{"type":"git","url":"git+https://github.com/facebook/jest.git","directory":"packages/pretty-format"},"license":"MIT","description":"Stringify any JavaScript value.","main":"build/index.js","types":"build/index.d.ts","author":{"name":"James Kyle","email":"me@thejameskyle.com"},"dependencies":{"@jest/types":"^26.6.1","ansi-regex":"^5.0.0","ansi-styles":"^4.0.0","react-is":"^17.0.1"},"devDependencies":{"@types/react":"*","@types/react-is":"^16.7.1","@types/react-test-renderer":"*","immutable":"4.0.0-rc.9","jest-util":"^26.6.1","react":"*","react-dom":"*","react-test-renderer":"*"},"engines":{"node":">= 10"},"publishConfig":{"access":"public"},"gitHead":"f6366db60e32f1763e612288bf3984bcfa7a0a15","bugs":{"url":"https://github.com/facebook/jest/issues"},"homepage":"https://github.com/facebook/jest#readme","_id":"pretty-format@26.6.1","_nodeVersion":"12.19.0","_npmVersion":"lerna/3.22.1/node@v12.19.0+x64 (darwin)","dist":{"integrity":"sha512-MeqqsP5PYcRBbGMvwzsyBdmAJ4EFX7pWFyl7x4+dMVg5pE0ZDdBIvEH2ergvIO+Gvwv1wh64YuOY9y5LuyY/GA==","shasum":"af9a2f63493a856acddeeb11ba6bcf61989660a8","tarball":"http://localhost:4545/npm/registry/pretty-format/pretty-format-26.6.1.tgz","fileCount":27,"unpackedSize":67563,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfkp0ACRA9TVsSAnZWagAAIuQP/Rxi1M7psxnSdB1hje4K\nRBUy3J3fmnHUyf6SPgQI3Qks6W7dRfD083PHcao/Gk80rZqdZJcbazzry2ID\nduOX17B6qrlEvWZVMP4OLTAmewJjdC5EmF2ED6Wd4CBaCz/2rQ0lWZXOQ5zp\n8qgIAGwmktCKA5wtTCsPvZStqYEVulUGjtabuUhFuyuJo5zax0YyGSuAcWC+\nOpK85ZurWERhlPaYWIARhvAOOriog7dVawk5AicvLDZfsnbfRFIfGZ28fYkB\n3jKBO+vocZCmoo2eKQ65C5RY5Pfz1xPTS+90Z0XGwL/DE4On7H+NJ7n3I9rW\nypdXc9gFjdYntHWOWwo3k3dqltroOTg1tNokUYQmN+XVLNsF+X1kTnpLIth/\n53r+/JYQApXciK1KoSdsAT7X2KhwC/FOe0xcNHGAhygi2zhY0gaXJ4wlA+PC\n964Dgirgyp7/+9Vcw06P15O6jxPC33sN5hlcK5xxGkY96S+jAyvF2bz5Unon\neG2bO8/xfyol1jRY95rLHiSo9zywhepGPS5BF1bShx1Lh38ZwDZQslSVddoC\nK9NvzLu9zBgCLDuH7xf/zuYPa4ibnIGFx7vuQEVoF+PPpUHGoHc8fVozicj1\nipybo4pZWjrFT70VqjxBLZZtSBKFBruQfB0VVONmpDOLYbfjQMeJxqjQ+12l\nMp1V\r\n=x/PD\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCqBElJFVXdZCyXDbPrOXfpqL3FhKvp5htM5ZBhLJKLKQIhAPZx8eSb6ZzlcxeIyGceSJ5wCHWpa9z9CBUogBQTSp42"}]},"maintainers":[{"name":"scotthovestadt","email":"scott.hovestadt@gmail.com"},{"name":"rubennorte","email":"rubennorte@gmail.com"},{"name":"simenb","email":"sbekkhus91@gmail.com"},{"name":"cpojer","email":"christoph.pojer@gmail.com"},{"name":"fb","email":"opensource+npm@fb.com"},{"name":"aaronabramov","email":"aaron@abramov.io"},{"name":"davidzilburg","email":"davidzilburg@gmail.com"}],"_npmUser":{"name":"simenb","email":"sbekkhus91@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pretty-format_26.6.1_1603443961787_0.4553846582958705"},"_hasShrinkwrap":false},"26.6.2":{"name":"pretty-format","version":"26.6.2","repository":{"type":"git","url":"git+https://github.com/facebook/jest.git","directory":"packages/pretty-format"},"license":"MIT","description":"Stringify any JavaScript value.","main":"build/index.js","types":"build/index.d.ts","author":{"name":"James Kyle","email":"me@thejameskyle.com"},"dependencies":{"@jest/types":"^26.6.2","ansi-regex":"^5.0.0","ansi-styles":"^4.0.0","react-is":"^17.0.1"},"devDependencies":{"@types/react":"*","@types/react-is":"^16.7.1","@types/react-test-renderer":"*","immutable":"4.0.0-rc.9","jest-util":"^26.6.2","react":"*","react-dom":"*","react-test-renderer":"*"},"engines":{"node":">= 10"},"publishConfig":{"access":"public"},"gitHead":"4c46930615602cbf983fb7e8e82884c282a624d5","bugs":{"url":"https://github.com/facebook/jest/issues"},"homepage":"https://github.com/facebook/jest#readme","_id":"pretty-format@26.6.2","_nodeVersion":"14.15.0","_npmVersion":"lerna/3.22.1/node@v14.15.0+x64 (darwin)","dist":{"integrity":"sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg==","shasum":"e35c2705f14cb7fe2fe94fa078345b444120fc93","tarball":"http://localhost:4545/npm/registry/pretty-format/pretty-format-26.6.2.tgz","fileCount":27,"unpackedSize":67561,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfoADLCRA9TVsSAnZWagAAmfoQAIRrOEiRwLRygGCb91os\nJ00Reb/s7dqobB0UUaHneHFJY/utOJa0WRPVstrujMWuFPcUmcOxNFeWVx9d\nzeLSq3hWTIIt/2uEv/MwiFgghElUAo8NlMTAC8BsRZYFIfU0TscEEUjmb8gq\n2qtAxEqe8B2KVlZEIzQ5LxTWGJTZpthy+/KzHVos1GPKLDtevonpLyNpuF02\nPA/L1zucAPIDrZrFSTOJXc5Oa35i+9UvyHyZS8LwXKDNHsk7ccjjGVJvIvU+\n7B3gilEh+G3ibwWPRGbzmISNx21539HMdFKg4b8BJ0JIBRvueqYSho+skxCo\nLQjezUxOFEG/V26plfG9Q/SiLJtMx3ocOF2S2KwwQCHNcrYXjIDvhmQvAPAZ\nmXeD1UabSGx2IhyNO9MfV45v5eDXlbOLn+fNLPsCGrmC6ydDlipPx/1f0ONd\nt45lv/x0CV1AR/ZphwWrVBjnXWl7vcYQS4CpVZg1hNeh3dT0DefXPwMMIBlS\n5pkh4tk8FGKcFpiGFj5BW/WZhKsSX/9h7jxqQ/dQrXVU9m/Qb6zR5QJETAjz\nSGb2ZEArD/4fDkUFKEUXlkIXUp+bdjW7FtJvrhAtfsY4McWyrLpN6mSYUeE/\nKVe2FtUkdlf7m6wNSTa1y4Jn6Xo3Ov1sH9eCuoYUcLBVT7gxjio8Z9h0xSPD\nUZHG\r\n=dIgX\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBkew4+xyimY3efio3F/IimKqdgXURlFpu/3PLc8tZVqAiA3CaydBTYOVhjOVyGqwPdwQQw2l+LBbaJ5ywZE6FYsmA=="}]},"maintainers":[{"name":"scotthovestadt","email":"scott.hovestadt@gmail.com"},{"name":"rubennorte","email":"rubennorte@gmail.com"},{"name":"simenb","email":"sbekkhus91@gmail.com"},{"name":"cpojer","email":"christoph.pojer@gmail.com"},{"name":"fb","email":"opensource+npm@fb.com"},{"name":"aaronabramov","email":"aaron@abramov.io"},{"name":"davidzilburg","email":"davidzilburg@gmail.com"}],"_npmUser":{"name":"simenb","email":"sbekkhus91@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pretty-format_26.6.2_1604321482760_0.1577369364764818"},"_hasShrinkwrap":false},"27.0.0-next.0":{"name":"pretty-format","version":"27.0.0-next.0","repository":{"type":"git","url":"git+https://github.com/facebook/jest.git","directory":"packages/pretty-format"},"license":"MIT","description":"Stringify any JavaScript value.","main":"./build/index.js","types":"./build/index.d.ts","exports":{".":"./build/index.js","./package.json":"./package.json"},"author":{"name":"James Kyle","email":"me@thejameskyle.com"},"dependencies":{"@jest/types":"^27.0.0-next.0","ansi-regex":"^5.0.0","ansi-styles":"^5.0.0","react-is":"^17.0.1"},"devDependencies":{"@types/react":"*","@types/react-is":"^17.0.0","@types/react-test-renderer":"*","immutable":"4.0.0-rc.9","jest-util":"^27.0.0-next.0","react":"*","react-dom":"*","react-test-renderer":"*"},"engines":{"node":"^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"},"publishConfig":{"access":"public"},"gitHead":"4f77c70602cab8419794f10fa39510f13baafef8","readme":"# pretty-format\n\nStringify any JavaScript value.\n\n- Serialize built-in JavaScript types.\n- Serialize application-specific data types with built-in or user-defined plugins.\n\n## Installation\n\n```sh\n$ yarn add pretty-format\n```\n\n## Usage\n\n```js\nconst {format: prettyFormat} = require('pretty-format'); // CommonJS\n```\n\n```js\nimport {format as prettyFormat} from 'pretty-format'; // ES2015 modules\n```\n\n```js\nconst val = {object: {}};\nval.circularReference = val;\nval[Symbol('foo')] = 'foo';\nval.map = new Map([['prop', 'value']]);\nval.array = [-0, Infinity, NaN];\n\nconsole.log(prettyFormat(val));\n/*\nObject {\n \"array\": Array [\n -0,\n Infinity,\n NaN,\n ],\n \"circularReference\": [Circular],\n \"map\": Map {\n \"prop\" => \"value\",\n },\n \"object\": Object {},\n Symbol(foo): \"foo\",\n}\n*/\n```\n\n## Usage with options\n\n```js\nfunction onClick() {}\n\nconsole.log(prettyFormat(onClick));\n/*\n[Function onClick]\n*/\n\nconst options = {\n printFunctionName: false,\n};\nconsole.log(prettyFormat(onClick, options));\n/*\n[Function]\n*/\n```\n\n\n| key | type | default | description |\n| :------------------ | :-------- | :--------- | :------------------------------------------------------ |\n| `callToJSON` | `boolean` | `true` | call `toJSON` method (if it exists) on objects |\n| `escapeRegex` | `boolean` | `false` | escape special characters in regular expressions |\n| `escapeString` | `boolean` | `true` | escape special characters in strings |\n| `highlight` | `boolean` | `false` | highlight syntax with colors in terminal (some plugins) |\n| `indent` | `number` | `2` | spaces in each level of indentation |\n| `maxDepth` | `number` | `Infinity` | levels to print in arrays, objects, elements, and so on |\n| `min` | `boolean` | `false` | minimize added space: no indentation nor line breaks |\n| `plugins` | `array` | `[]` | plugins to serialize application-specific data types |\n| `printFunctionName` | `boolean` | `true` | include or omit the name of a function |\n| `theme` | `object` | | colors to highlight syntax in terminal |\n\nProperty values of `theme` are from [ansi-styles colors](https://github.com/chalk/ansi-styles#colors)\n\n```js\nconst DEFAULT_THEME = {\n comment: 'gray',\n content: 'reset',\n prop: 'yellow',\n tag: 'cyan',\n value: 'green',\n};\n```\n\n## Usage with plugins\n\nThe `pretty-format` package provides some built-in plugins, including:\n\n- `ReactElement` for elements from `react`\n- `ReactTestComponent` for test objects from `react-test-renderer`\n\n```js\n// CommonJS\nconst React = require('react');\nconst renderer = require('react-test-renderer');\nconst {format: prettyFormat, plugins} = require('pretty-format');\n\nconst {ReactElement, ReactTestComponent} = plugins;\n```\n\n```js\n// ES2015 modules and destructuring assignment\nimport React from 'react';\nimport renderer from 'react-test-renderer';\nimport {plugins, format as prettyFormat} from 'pretty-format';\n\nconst {ReactElement, ReactTestComponent} = plugins;\n```\n\n```js\nconst onClick = () => {};\nconst element = React.createElement('button', {onClick}, 'Hello World');\n\nconst formatted1 = prettyFormat(element, {\n plugins: [ReactElement],\n printFunctionName: false,\n});\nconst formatted2 = prettyFormat(renderer.create(element).toJSON(), {\n plugins: [ReactTestComponent],\n printFunctionName: false,\n});\n/*\n\n*/\n```\n\n## Usage in Jest\n\nFor snapshot tests, Jest uses `pretty-format` with options that include some of its built-in plugins. For this purpose, plugins are also known as **snapshot serializers**.\n\nTo serialize application-specific data types, you can add modules to `devDependencies` of a project, and then:\n\nIn an **individual** test file, you can add a module as follows. It precedes any modules from Jest configuration.\n\n```js\nimport serializer from 'my-serializer-module';\nexpect.addSnapshotSerializer(serializer);\n\n// tests which have `expect(value).toMatchSnapshot()` assertions\n```\n\nFor **all** test files, you can specify modules in Jest configuration. They precede built-in plugins for React, HTML, and Immutable.js data types. For example, in a `package.json` file:\n\n```json\n{\n \"jest\": {\n \"snapshotSerializers\": [\"my-serializer-module\"]\n }\n}\n```\n\n## Writing plugins\n\nA plugin is a JavaScript object.\n\nIf `options` has a `plugins` array: for the first plugin whose `test(val)` method returns a truthy value, then `prettyFormat(val, options)` returns the result from either:\n\n- `serialize(val, …)` method of the **improved** interface (available in **version 21** or later)\n- `print(val, …)` method of the **original** interface (if plugin does not have `serialize` method)\n\n### test\n\nWrite `test` so it can receive `val` argument of any type. To serialize **objects** which have certain properties, then a guarded expression like `val != null && …` or more concise `val && …` prevents the following errors:\n\n- `TypeError: Cannot read property 'whatever' of null`\n- `TypeError: Cannot read property 'whatever' of undefined`\n\nFor example, `test` method of built-in `ReactElement` plugin:\n\n```js\nconst elementSymbol = Symbol.for('react.element');\nconst test = val => val && val.$$typeof === elementSymbol;\n```\n\nPay attention to efficiency in `test` because `pretty-format` calls it often.\n\n### serialize\n\nThe **improved** interface is available in **version 21** or later.\n\nWrite `serialize` to return a string, given the arguments:\n\n- `val` which “passed the test”\n- unchanging `config` object: derived from `options`\n- current `indentation` string: concatenate to `indent` from `config`\n- current `depth` number: compare to `maxDepth` from `config`\n- current `refs` array: find circular references in objects\n- `printer` callback function: serialize children\n\n### config\n\n\n| key | type | description |\n| :------------------ | :-------- | :------------------------------------------------------ |\n| `callToJSON` | `boolean` | call `toJSON` method (if it exists) on objects |\n| `colors` | `Object` | escape codes for colors to highlight syntax |\n| `escapeRegex` | `boolean` | escape special characters in regular expressions |\n| `escapeString` | `boolean` | escape special characters in strings |\n| `indent` | `string` | spaces in each level of indentation |\n| `maxDepth` | `number` | levels to print in arrays, objects, elements, and so on |\n| `min` | `boolean` | minimize added space: no indentation nor line breaks |\n| `plugins` | `array` | plugins to serialize application-specific data types |\n| `printFunctionName` | `boolean` | include or omit the name of a function |\n| `spacingInner` | `strong` | spacing to separate items in a list |\n| `spacingOuter` | `strong` | spacing to enclose a list of items |\n\nEach property of `colors` in `config` corresponds to a property of `theme` in `options`:\n\n- the key is the same (for example, `tag`)\n- the value in `colors` is a object with `open` and `close` properties whose values are escape codes from [ansi-styles](https://github.com/chalk/ansi-styles) for the color value in `theme` (for example, `'cyan'`)\n\nSome properties in `config` are derived from `min` in `options`:\n\n- `spacingInner` and `spacingOuter` are **newline** if `min` is `false`\n- `spacingInner` is **space** and `spacingOuter` is **empty string** if `min` is `true`\n\n### Example of serialize and test\n\nThis plugin is a pattern you can apply to serialize composite data types. Side note: `pretty-format` does not need a plugin to serialize arrays.\n\n```js\n// We reused more code when we factored out a function for child items\n// that is independent of depth, name, and enclosing punctuation (see below).\nconst SEPARATOR = ',';\nfunction serializeItems(items, config, indentation, depth, refs, printer) {\n if (items.length === 0) {\n return '';\n }\n const indentationItems = indentation + config.indent;\n return (\n config.spacingOuter +\n items\n .map(\n item =>\n indentationItems +\n printer(item, config, indentationItems, depth, refs), // callback\n )\n .join(SEPARATOR + config.spacingInner) +\n (config.min ? '' : SEPARATOR) + // following the last item\n config.spacingOuter +\n indentation\n );\n}\n\nconst plugin = {\n test(val) {\n return Array.isArray(val);\n },\n serialize(array, config, indentation, depth, refs, printer) {\n const name = array.constructor.name;\n return ++depth > config.maxDepth\n ? '[' + name + ']'\n : (config.min ? '' : name + ' ') +\n '[' +\n serializeItems(array, config, indentation, depth, refs, printer) +\n ']';\n },\n};\n```\n\n```js\nconst val = {\n filter: 'completed',\n items: [\n {\n text: 'Write test',\n completed: true,\n },\n {\n text: 'Write serialize',\n completed: true,\n },\n ],\n};\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n plugins: [plugin],\n }),\n);\n/*\nObject {\n \"filter\": \"completed\",\n \"items\": Array [\n Object {\n \"completed\": true,\n \"text\": \"Write test\",\n },\n Object {\n \"completed\": true,\n \"text\": \"Write serialize\",\n },\n ],\n}\n*/\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n indent: 4,\n plugins: [plugin],\n }),\n);\n/*\nObject {\n \"filter\": \"completed\",\n \"items\": Array [\n Object {\n \"completed\": true,\n \"text\": \"Write test\",\n },\n Object {\n \"completed\": true,\n \"text\": \"Write serialize\",\n },\n ],\n}\n*/\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n maxDepth: 1,\n plugins: [plugin],\n }),\n);\n/*\nObject {\n \"filter\": \"completed\",\n \"items\": [Array],\n}\n*/\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n min: true,\n plugins: [plugin],\n }),\n);\n/*\n{\"filter\": \"completed\", \"items\": [{\"completed\": true, \"text\": \"Write test\"}, {\"completed\": true, \"text\": \"Write serialize\"}]}\n*/\n```\n\n### print\n\nThe **original** interface is adequate for plugins:\n\n- that **do not** depend on options other than `highlight` or `min`\n- that **do not** depend on `depth` or `refs` in recursive traversal, and\n- if values either\n - do **not** require indentation, or\n - do **not** occur as children of JavaScript data structures (for example, array)\n\nWrite `print` to return a string, given the arguments:\n\n- `val` which “passed the test”\n- current `printer(valChild)` callback function: serialize children\n- current `indenter(lines)` callback function: indent lines at the next level\n- unchanging `config` object: derived from `options`\n- unchanging `colors` object: derived from `options`\n\nThe 3 properties of `config` are `min` in `options` and:\n\n- `spacing` and `edgeSpacing` are **newline** if `min` is `false`\n- `spacing` is **space** and `edgeSpacing` is **empty string** if `min` is `true`\n\nEach property of `colors` corresponds to a property of `theme` in `options`:\n\n- the key is the same (for example, `tag`)\n- the value in `colors` is a object with `open` and `close` properties whose values are escape codes from [ansi-styles](https://github.com/chalk/ansi-styles) for the color value in `theme` (for example, `'cyan'`)\n\n### Example of print and test\n\nThis plugin prints functions with the **number of named arguments** excluding rest argument.\n\n```js\nconst plugin = {\n print(val) {\n return `[Function ${val.name || 'anonymous'} ${val.length}]`;\n },\n test(val) {\n return typeof val === 'function';\n },\n};\n```\n\n```js\nconst val = {\n onClick(event) {},\n render() {},\n};\n\nprettyFormat(val, {\n plugins: [plugin],\n});\n/*\nObject {\n \"onClick\": [Function onClick 1],\n \"render\": [Function render 0],\n}\n*/\n\nprettyFormat(val);\n/*\nObject {\n \"onClick\": [Function onClick],\n \"render\": [Function render],\n}\n*/\n```\n\nThis plugin **ignores** the `printFunctionName` option. That limitation of the original `print` interface is a reason to use the improved `serialize` interface, described above.\n\n```js\nprettyFormat(val, {\n plugins: [pluginOld],\n printFunctionName: false,\n});\n/*\nObject {\n \"onClick\": [Function onClick 1],\n \"render\": [Function render 0],\n}\n*/\n\nprettyFormat(val, {\n printFunctionName: false,\n});\n/*\nObject {\n \"onClick\": [Function],\n \"render\": [Function],\n}\n*/\n```\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/facebook/jest/issues"},"homepage":"https://github.com/facebook/jest#readme","_id":"pretty-format@27.0.0-next.0","_nodeVersion":"14.15.0","_npmVersion":"lerna/3.22.1/node@v14.15.0+x64 (darwin)","dist":{"integrity":"sha512-A0BoQ+Oqqm+qaDfePLLFVywJ86ZMcQkQUKVzAhqlCE11o/d9qT6HiKvH70GXQonTvSjUIb1mrU2XSOzPtaOP+Q==","shasum":"ca1e1d9fedfee2e549a339dba0dd833da8d30e2e","tarball":"http://localhost:4545/npm/registry/pretty-format/pretty-format-27.0.0-next.0.tgz","fileCount":27,"unpackedSize":67390,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfy8J6CRA9TVsSAnZWagAASUkP/2lZfwVRC1b7pif3pu4i\ncYChyGt6ty465mpxdyeW415ylhjMWeEFLZCN/uljpR56/luuS039jg4egFcK\n0BcYL19rEVYlpkPbMB8pcv64pp/+rw+lEwOu+31FtInEgWtoyyEANszqU6va\ny5L5iWpQ7ftyxyjP13r3VEoWpNE1w8t2w+bkRr9KHoNxrUMBM3QkdV7g+foN\njeIuORsy5mdT+UYTtDrhW1uchtVzvPWeutNqgjlzGrF9fkXCXo5Gx+D9fs0U\nL63o5/IFHh7yt5ARXU39CqyFGnPer0XSjp0p9EO5LQ8bh0pG895vS7/N7K1D\nZ2oJNNEXo8QYuB/WTX5MjoVHjXRyi+XHyqPccs+AMSTgqV+RFZ7pXWmsLbOX\nmCDSeqfTUe+zvgFvIZOVVtNpMMXDxF555QsmvYMNo5xKHNChQ6NPw7J3jIXl\nP6v08vBxSs5mecJYrcM7JogQ245WBKTnPfw1cZSAv5mhs4ByqUxtcWQsFVru\niqdGIYEYfB5G2u/di++UKcAE2xfqCm5ZWrNPO5aBkmD08pZqhd5wVuPp6UH5\n/iC7IAO8uSaCTH9uKqg1LyuXT5Esth2SBCZquISE/UzTxhrCHoDcocVQOh1o\nnEm3vkgQNL/v6AIOOsmDGoRU0yr/GHE8g46FgSo36B/rMUMOcKt1rtdc3TXC\nXq4A\r\n=5zVq\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDcEdewy4AC/8Z5ssHnMXoYC/0cqVQ1gaVzkzhdFYrR4AiBExy92Kbw3RwklUmSCBEkcHG4nQDahzu+Dn/YMuVR+rA=="}]},"_npmUser":{"name":"simenb","email":"sbekkhus91@gmail.com"},"directories":{},"maintainers":[{"name":"scotthovestadt","email":"scott.hovestadt@gmail.com"},{"name":"rubennorte","email":"rubennorte@gmail.com"},{"name":"simenb","email":"sbekkhus91@gmail.com"},{"name":"cpojer","email":"christoph.pojer@gmail.com"},{"name":"fb","email":"opensource+npm@fb.com"},{"name":"aaronabramov","email":"aaron@abramov.io"},{"name":"davidzilburg","email":"davidzilburg@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pretty-format_27.0.0-next.0_1607189114164_0.776010043379239"},"_hasShrinkwrap":false},"27.0.0-next.1":{"name":"pretty-format","version":"27.0.0-next.1","repository":{"type":"git","url":"git+https://github.com/facebook/jest.git","directory":"packages/pretty-format"},"license":"MIT","description":"Stringify any JavaScript value.","main":"./build/index.js","types":"./build/index.d.ts","exports":{".":"./build/index.js","./package.json":"./package.json"},"author":{"name":"James Kyle","email":"me@thejameskyle.com"},"dependencies":{"@jest/types":"^27.0.0-next.1","ansi-regex":"^5.0.0","ansi-styles":"^5.0.0","react-is":"^17.0.1"},"devDependencies":{"@types/react":"*","@types/react-is":"^17.0.0","@types/react-test-renderer":"*","immutable":"4.0.0-rc.9","jest-util":"^27.0.0-next.1","react":"*","react-dom":"*","react-test-renderer":"*"},"engines":{"node":"^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"},"publishConfig":{"access":"public"},"gitHead":"774c1898bbb078c20fa53906d535335babc6585d","bugs":{"url":"https://github.com/facebook/jest/issues"},"homepage":"https://github.com/facebook/jest#readme","_id":"pretty-format@27.0.0-next.1","_nodeVersion":"14.15.0","_npmVersion":"lerna/3.22.1/node@v14.15.0+x64 (darwin)","dist":{"integrity":"sha512-BYbg3ZWPDPtTXz0gpCdzwyEkhUflfDXOvmiYW5kmEzEWzitQ89Jhi01sbszmR1f17gNOJ422/wQFLAoIxVgA7A==","shasum":"cf8446b65d51e1c2af9c47bd8bf15e65ca9b9680","tarball":"http://localhost:4545/npm/registry/pretty-format/pretty-format-27.0.0-next.1.tgz","fileCount":27,"unpackedSize":67390,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfziNpCRA9TVsSAnZWagAAIvYP/1W+njgXc+n6uTCO8v7X\nTrCtLQdaQ8n2G3lANoktYk2/gftbIVIkOapXHZf/fgSATk7SZUZTPeD+5l1p\nNrcD4HMwmn5fOZXnEDRqi/7Pbe5V+U0txzx25LhTmKiBGtshgROMQXpWoryY\nX1G/F5je7tzawudUYDTIGtRpJTJdsLq8/tpwMC1AWTiIzmH2HwNfKxVFwf5j\nck6JLV11sqFKMjCmuAhd+k2JeDqdL3u6Ul5uAN3crNfQF1tDstotawlLjgpY\n+bBl83f2XrfySAZIk2OA3DoeXhKTwbuNf6HjsqF33fr0bW3BpFmxGu3GB3+e\nFMtsz+PzkYM3N8bt6O2xPagiIsboNzRex+ePGtVwzfehxG/IzEEo/U5w92cQ\nCDN9KgmVSj1dyIqDm8kyH3fxEVwGiZlymk3qRIpB7bbpsR+bjGZKjqIAa3f0\nxQXlfP5R/ERuQJkm3hIZvH85zURjEhttNC52tM1IWsuO9FB9HHKL3fnk0KJT\n70rV0M7IEQTI3pTyWlPVXhKcwxjgHUSmzEAeRPSxqZYtPZS7cnNoEY4+Q1sl\n6vqqf3vpGYX+IsooRrQJjVdon6StX8jGl5+2zdO2HZ7Tyk+jmvkSSDufg2ey\nMyNlKV2t2kFIteyxSDI5F9g3+21uhh6G+w4PLEukDtr4qccp9v5CBRwo5NfS\nTiOZ\r\n=PkIo\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDy1tL+vYg85Hr0KcnrqRWy9uRV9GVtovLmY0/Sgq/0ogIgWr2vuSg1svdwL++b5HwemSK7nDsXaXScE4Ry2QKp8/Y="}]},"_npmUser":{"name":"simenb","email":"sbekkhus91@gmail.com"},"directories":{},"maintainers":[{"name":"scotthovestadt","email":"scott.hovestadt@gmail.com"},{"name":"rubennorte","email":"rubennorte@gmail.com"},{"name":"simenb","email":"sbekkhus91@gmail.com"},{"name":"cpojer","email":"christoph.pojer@gmail.com"},{"name":"fb","email":"opensource+npm@fb.com"},{"name":"aaronabramov","email":"aaron@abramov.io"},{"name":"davidzilburg","email":"davidzilburg@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pretty-format_27.0.0-next.1_1607345001418_0.9044469356101592"},"_hasShrinkwrap":false},"27.0.0-next.3":{"name":"pretty-format","version":"27.0.0-next.3","repository":{"type":"git","url":"git+https://github.com/facebook/jest.git","directory":"packages/pretty-format"},"license":"MIT","description":"Stringify any JavaScript value.","main":"./build/index.js","types":"./build/index.d.ts","exports":{".":"./build/index.js","./package.json":"./package.json"},"author":{"name":"James Kyle","email":"me@thejameskyle.com"},"dependencies":{"@jest/types":"^27.0.0-next.3","ansi-regex":"^5.0.0","ansi-styles":"^5.0.0","react-is":"^17.0.1"},"devDependencies":{"@types/react":"*","@types/react-is":"^17.0.0","@types/react-test-renderer":"*","immutable":"4.0.0-rc.9","jest-util":"^27.0.0-next.3","react":"*","react-dom":"*","react-test-renderer":"*"},"engines":{"node":"^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"},"publishConfig":{"access":"public"},"gitHead":"2e34f2cfaf9b6864c3ad4bdca05d3097d3108a41","readme":"# pretty-format\n\nStringify any JavaScript value.\n\n- Serialize built-in JavaScript types.\n- Serialize application-specific data types with built-in or user-defined plugins.\n\n## Installation\n\n```sh\n$ yarn add pretty-format\n```\n\n## Usage\n\n```js\nconst {format: prettyFormat} = require('pretty-format'); // CommonJS\n```\n\n```js\nimport {format as prettyFormat} from 'pretty-format'; // ES2015 modules\n```\n\n```js\nconst val = {object: {}};\nval.circularReference = val;\nval[Symbol('foo')] = 'foo';\nval.map = new Map([['prop', 'value']]);\nval.array = [-0, Infinity, NaN];\n\nconsole.log(prettyFormat(val));\n/*\nObject {\n \"array\": Array [\n -0,\n Infinity,\n NaN,\n ],\n \"circularReference\": [Circular],\n \"map\": Map {\n \"prop\" => \"value\",\n },\n \"object\": Object {},\n Symbol(foo): \"foo\",\n}\n*/\n```\n\n## Usage with options\n\n```js\nfunction onClick() {}\n\nconsole.log(prettyFormat(onClick));\n/*\n[Function onClick]\n*/\n\nconst options = {\n printFunctionName: false,\n};\nconsole.log(prettyFormat(onClick, options));\n/*\n[Function]\n*/\n```\n\n\n| key | type | default | description |\n| :------------------ | :-------- | :--------- | :------------------------------------------------------ |\n| `callToJSON` | `boolean` | `true` | call `toJSON` method (if it exists) on objects |\n| `escapeRegex` | `boolean` | `false` | escape special characters in regular expressions |\n| `escapeString` | `boolean` | `true` | escape special characters in strings |\n| `highlight` | `boolean` | `false` | highlight syntax with colors in terminal (some plugins) |\n| `indent` | `number` | `2` | spaces in each level of indentation |\n| `maxDepth` | `number` | `Infinity` | levels to print in arrays, objects, elements, and so on |\n| `min` | `boolean` | `false` | minimize added space: no indentation nor line breaks |\n| `plugins` | `array` | `[]` | plugins to serialize application-specific data types |\n| `printFunctionName` | `boolean` | `true` | include or omit the name of a function |\n| `theme` | `object` | | colors to highlight syntax in terminal |\n\nProperty values of `theme` are from [ansi-styles colors](https://github.com/chalk/ansi-styles#colors)\n\n```js\nconst DEFAULT_THEME = {\n comment: 'gray',\n content: 'reset',\n prop: 'yellow',\n tag: 'cyan',\n value: 'green',\n};\n```\n\n## Usage with plugins\n\nThe `pretty-format` package provides some built-in plugins, including:\n\n- `ReactElement` for elements from `react`\n- `ReactTestComponent` for test objects from `react-test-renderer`\n\n```js\n// CommonJS\nconst React = require('react');\nconst renderer = require('react-test-renderer');\nconst {format: prettyFormat, plugins} = require('pretty-format');\n\nconst {ReactElement, ReactTestComponent} = plugins;\n```\n\n```js\n// ES2015 modules and destructuring assignment\nimport React from 'react';\nimport renderer from 'react-test-renderer';\nimport {plugins, format as prettyFormat} from 'pretty-format';\n\nconst {ReactElement, ReactTestComponent} = plugins;\n```\n\n```js\nconst onClick = () => {};\nconst element = React.createElement('button', {onClick}, 'Hello World');\n\nconst formatted1 = prettyFormat(element, {\n plugins: [ReactElement],\n printFunctionName: false,\n});\nconst formatted2 = prettyFormat(renderer.create(element).toJSON(), {\n plugins: [ReactTestComponent],\n printFunctionName: false,\n});\n/*\n\n*/\n```\n\n## Usage in Jest\n\nFor snapshot tests, Jest uses `pretty-format` with options that include some of its built-in plugins. For this purpose, plugins are also known as **snapshot serializers**.\n\nTo serialize application-specific data types, you can add modules to `devDependencies` of a project, and then:\n\nIn an **individual** test file, you can add a module as follows. It precedes any modules from Jest configuration.\n\n```js\nimport serializer from 'my-serializer-module';\nexpect.addSnapshotSerializer(serializer);\n\n// tests which have `expect(value).toMatchSnapshot()` assertions\n```\n\nFor **all** test files, you can specify modules in Jest configuration. They precede built-in plugins for React, HTML, and Immutable.js data types. For example, in a `package.json` file:\n\n```json\n{\n \"jest\": {\n \"snapshotSerializers\": [\"my-serializer-module\"]\n }\n}\n```\n\n## Writing plugins\n\nA plugin is a JavaScript object.\n\nIf `options` has a `plugins` array: for the first plugin whose `test(val)` method returns a truthy value, then `prettyFormat(val, options)` returns the result from either:\n\n- `serialize(val, …)` method of the **improved** interface (available in **version 21** or later)\n- `print(val, …)` method of the **original** interface (if plugin does not have `serialize` method)\n\n### test\n\nWrite `test` so it can receive `val` argument of any type. To serialize **objects** which have certain properties, then a guarded expression like `val != null && …` or more concise `val && …` prevents the following errors:\n\n- `TypeError: Cannot read property 'whatever' of null`\n- `TypeError: Cannot read property 'whatever' of undefined`\n\nFor example, `test` method of built-in `ReactElement` plugin:\n\n```js\nconst elementSymbol = Symbol.for('react.element');\nconst test = val => val && val.$$typeof === elementSymbol;\n```\n\nPay attention to efficiency in `test` because `pretty-format` calls it often.\n\n### serialize\n\nThe **improved** interface is available in **version 21** or later.\n\nWrite `serialize` to return a string, given the arguments:\n\n- `val` which “passed the test”\n- unchanging `config` object: derived from `options`\n- current `indentation` string: concatenate to `indent` from `config`\n- current `depth` number: compare to `maxDepth` from `config`\n- current `refs` array: find circular references in objects\n- `printer` callback function: serialize children\n\n### config\n\n\n| key | type | description |\n| :------------------ | :-------- | :------------------------------------------------------ |\n| `callToJSON` | `boolean` | call `toJSON` method (if it exists) on objects |\n| `colors` | `Object` | escape codes for colors to highlight syntax |\n| `escapeRegex` | `boolean` | escape special characters in regular expressions |\n| `escapeString` | `boolean` | escape special characters in strings |\n| `indent` | `string` | spaces in each level of indentation |\n| `maxDepth` | `number` | levels to print in arrays, objects, elements, and so on |\n| `min` | `boolean` | minimize added space: no indentation nor line breaks |\n| `plugins` | `array` | plugins to serialize application-specific data types |\n| `printFunctionName` | `boolean` | include or omit the name of a function |\n| `spacingInner` | `strong` | spacing to separate items in a list |\n| `spacingOuter` | `strong` | spacing to enclose a list of items |\n\nEach property of `colors` in `config` corresponds to a property of `theme` in `options`:\n\n- the key is the same (for example, `tag`)\n- the value in `colors` is a object with `open` and `close` properties whose values are escape codes from [ansi-styles](https://github.com/chalk/ansi-styles) for the color value in `theme` (for example, `'cyan'`)\n\nSome properties in `config` are derived from `min` in `options`:\n\n- `spacingInner` and `spacingOuter` are **newline** if `min` is `false`\n- `spacingInner` is **space** and `spacingOuter` is **empty string** if `min` is `true`\n\n### Example of serialize and test\n\nThis plugin is a pattern you can apply to serialize composite data types. Side note: `pretty-format` does not need a plugin to serialize arrays.\n\n```js\n// We reused more code when we factored out a function for child items\n// that is independent of depth, name, and enclosing punctuation (see below).\nconst SEPARATOR = ',';\nfunction serializeItems(items, config, indentation, depth, refs, printer) {\n if (items.length === 0) {\n return '';\n }\n const indentationItems = indentation + config.indent;\n return (\n config.spacingOuter +\n items\n .map(\n item =>\n indentationItems +\n printer(item, config, indentationItems, depth, refs), // callback\n )\n .join(SEPARATOR + config.spacingInner) +\n (config.min ? '' : SEPARATOR) + // following the last item\n config.spacingOuter +\n indentation\n );\n}\n\nconst plugin = {\n test(val) {\n return Array.isArray(val);\n },\n serialize(array, config, indentation, depth, refs, printer) {\n const name = array.constructor.name;\n return ++depth > config.maxDepth\n ? '[' + name + ']'\n : (config.min ? '' : name + ' ') +\n '[' +\n serializeItems(array, config, indentation, depth, refs, printer) +\n ']';\n },\n};\n```\n\n```js\nconst val = {\n filter: 'completed',\n items: [\n {\n text: 'Write test',\n completed: true,\n },\n {\n text: 'Write serialize',\n completed: true,\n },\n ],\n};\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n plugins: [plugin],\n }),\n);\n/*\nObject {\n \"filter\": \"completed\",\n \"items\": Array [\n Object {\n \"completed\": true,\n \"text\": \"Write test\",\n },\n Object {\n \"completed\": true,\n \"text\": \"Write serialize\",\n },\n ],\n}\n*/\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n indent: 4,\n plugins: [plugin],\n }),\n);\n/*\nObject {\n \"filter\": \"completed\",\n \"items\": Array [\n Object {\n \"completed\": true,\n \"text\": \"Write test\",\n },\n Object {\n \"completed\": true,\n \"text\": \"Write serialize\",\n },\n ],\n}\n*/\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n maxDepth: 1,\n plugins: [plugin],\n }),\n);\n/*\nObject {\n \"filter\": \"completed\",\n \"items\": [Array],\n}\n*/\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n min: true,\n plugins: [plugin],\n }),\n);\n/*\n{\"filter\": \"completed\", \"items\": [{\"completed\": true, \"text\": \"Write test\"}, {\"completed\": true, \"text\": \"Write serialize\"}]}\n*/\n```\n\n### print\n\nThe **original** interface is adequate for plugins:\n\n- that **do not** depend on options other than `highlight` or `min`\n- that **do not** depend on `depth` or `refs` in recursive traversal, and\n- if values either\n - do **not** require indentation, or\n - do **not** occur as children of JavaScript data structures (for example, array)\n\nWrite `print` to return a string, given the arguments:\n\n- `val` which “passed the test”\n- current `printer(valChild)` callback function: serialize children\n- current `indenter(lines)` callback function: indent lines at the next level\n- unchanging `config` object: derived from `options`\n- unchanging `colors` object: derived from `options`\n\nThe 3 properties of `config` are `min` in `options` and:\n\n- `spacing` and `edgeSpacing` are **newline** if `min` is `false`\n- `spacing` is **space** and `edgeSpacing` is **empty string** if `min` is `true`\n\nEach property of `colors` corresponds to a property of `theme` in `options`:\n\n- the key is the same (for example, `tag`)\n- the value in `colors` is a object with `open` and `close` properties whose values are escape codes from [ansi-styles](https://github.com/chalk/ansi-styles) for the color value in `theme` (for example, `'cyan'`)\n\n### Example of print and test\n\nThis plugin prints functions with the **number of named arguments** excluding rest argument.\n\n```js\nconst plugin = {\n print(val) {\n return `[Function ${val.name || 'anonymous'} ${val.length}]`;\n },\n test(val) {\n return typeof val === 'function';\n },\n};\n```\n\n```js\nconst val = {\n onClick(event) {},\n render() {},\n};\n\nprettyFormat(val, {\n plugins: [plugin],\n});\n/*\nObject {\n \"onClick\": [Function onClick 1],\n \"render\": [Function render 0],\n}\n*/\n\nprettyFormat(val);\n/*\nObject {\n \"onClick\": [Function onClick],\n \"render\": [Function render],\n}\n*/\n```\n\nThis plugin **ignores** the `printFunctionName` option. That limitation of the original `print` interface is a reason to use the improved `serialize` interface, described above.\n\n```js\nprettyFormat(val, {\n plugins: [pluginOld],\n printFunctionName: false,\n});\n/*\nObject {\n \"onClick\": [Function onClick 1],\n \"render\": [Function render 0],\n}\n*/\n\nprettyFormat(val, {\n printFunctionName: false,\n});\n/*\nObject {\n \"onClick\": [Function],\n \"render\": [Function],\n}\n*/\n```\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/facebook/jest/issues"},"homepage":"https://github.com/facebook/jest#readme","_id":"pretty-format@27.0.0-next.3","_nodeVersion":"14.15.3","_npmVersion":"lerna/3.22.1/node@v14.15.3+x64 (darwin)","dist":{"integrity":"sha512-5JppAL3xa3VIsOsaAdqemtAtUFTq4YeooksqZOKZxQwTYXlPF2+t1fo/QFhCjfRucG61YE+9dcBTQ0U6wAG9qw==","shasum":"1dab8c1e36ca9266a8b91a3b2aab0e6c1223bd96","tarball":"http://localhost:4545/npm/registry/pretty-format/pretty-format-27.0.0-next.3.tgz","fileCount":27,"unpackedSize":67296,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgLuWsCRA9TVsSAnZWagAAkZEP/1eL6ukoBldS8mzG5JLi\npugjI+zK3ZERcrFJJhrXqbveCB3Tt9VUgFjitoFNBqBsKdD6SkTWWWG5qKEL\n0hs66NwaU/oW9hgIo3O+buq0Jr5BDwx78aXYFA2ZwibYrtIygsI8Psb0T8l7\n9RjtDQicifLIiLfkIYG8h+zjqsDB2ct8PDEY/0GzXaB/gT+RTP498I46nYgI\nbPxGw3JAw9TMA3tNe6j05mMIHVfM8rV90W6KSZukiJNp6jqeXWRBOLktjwZf\n5SlnpFFRIzCKh24bNw/hz/tWi1mIwCQwdIA9LYey3lkoyeDLYuP+zet1y2Jh\n9heTJ9FQe8yNfNCgxtNirdlNPkkC4hDXAtJb7bXnCzuZs12ClwS9bA/XHVYe\ns0umFT6qPAQBSRksJqFmzAEIGidUo1pyhfzVC5Aqvt/mBIrhTK10AzwCIe6T\nM63LyybKyr6l8JZSfS7uYsXe85o4ynrSUMEeQVNHPW5/qmnYrJS2eLh8seUS\nCE/qJzzYEb6HwzSxictCZnjzkA9sCqTKUbhCMiwmY9E0g/Zf73+n4bVnmjGC\nxmoI9VrucMKTdHH/LSCECmzsjHcVeTtNGyQ/hEjv81Jp0Bi8N6PEh414RLPn\nJ4lpPXEeohE6kPNBrByFvHn3PHn1Jkw9hTnvzPzSDKawbr3NSUfk93oU9/n+\nJYAd\r\n=OWXL\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDZBhYN1Rp820khIu7feZyc1Y7dgUoEpSfVmFMqDLaeOQIgYX6rq+wUim00bURJKAKlqwQNlXbgULiEWztv6erapdU="}]},"_npmUser":{"name":"simenb","email":"sbekkhus91@gmail.com"},"directories":{},"maintainers":[{"name":"scotthovestadt","email":"scott.hovestadt@gmail.com"},{"name":"rubennorte","email":"rubennorte@gmail.com"},{"name":"simenb","email":"sbekkhus91@gmail.com"},{"name":"cpojer","email":"christoph.pojer@gmail.com"},{"name":"fb","email":"opensource+npm@fb.com"},{"name":"aaronabramov","email":"aaron@abramov.io"},{"name":"davidzilburg","email":"davidzilburg@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pretty-format_27.0.0-next.3_1613686188495_0.5727726322376101"},"_hasShrinkwrap":false},"27.0.0-next.5":{"name":"pretty-format","version":"27.0.0-next.5","repository":{"type":"git","url":"git+https://github.com/facebook/jest.git","directory":"packages/pretty-format"},"license":"MIT","description":"Stringify any JavaScript value.","main":"./build/index.js","types":"./build/index.d.ts","exports":{".":"./build/index.js","./package.json":"./package.json"},"author":{"name":"James Kyle","email":"me@thejameskyle.com"},"dependencies":{"@jest/types":"^27.0.0-next.3","ansi-regex":"^5.0.0","ansi-styles":"^5.0.0","react-is":"^17.0.1"},"devDependencies":{"@types/react":"*","@types/react-is":"^17.0.0","@types/react-test-renderer":"*","immutable":"4.0.0-rc.9","jest-util":"^27.0.0-next.3","react":"*","react-dom":"*","react-test-renderer":"*"},"engines":{"node":"^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"},"publishConfig":{"access":"public"},"gitHead":"0a2b94282170b6d4cc26c2d2003cc04ffebe5e3f","readme":"# pretty-format\n\nStringify any JavaScript value.\n\n- Serialize built-in JavaScript types.\n- Serialize application-specific data types with built-in or user-defined plugins.\n\n## Installation\n\n```sh\n$ yarn add pretty-format\n```\n\n## Usage\n\n```js\nconst {format: prettyFormat} = require('pretty-format'); // CommonJS\n```\n\n```js\nimport {format as prettyFormat} from 'pretty-format'; // ES2015 modules\n```\n\n```js\nconst val = {object: {}};\nval.circularReference = val;\nval[Symbol('foo')] = 'foo';\nval.map = new Map([['prop', 'value']]);\nval.array = [-0, Infinity, NaN];\n\nconsole.log(prettyFormat(val));\n/*\nObject {\n \"array\": Array [\n -0,\n Infinity,\n NaN,\n ],\n \"circularReference\": [Circular],\n \"map\": Map {\n \"prop\" => \"value\",\n },\n \"object\": Object {},\n Symbol(foo): \"foo\",\n}\n*/\n```\n\n## Usage with options\n\n```js\nfunction onClick() {}\n\nconsole.log(prettyFormat(onClick));\n/*\n[Function onClick]\n*/\n\nconst options = {\n printFunctionName: false,\n};\nconsole.log(prettyFormat(onClick, options));\n/*\n[Function]\n*/\n```\n\n\n| key | type | default | description |\n| :------------------ | :-------- | :--------- | :------------------------------------------------------ |\n| `callToJSON` | `boolean` | `true` | call `toJSON` method (if it exists) on objects |\n| `escapeRegex` | `boolean` | `false` | escape special characters in regular expressions |\n| `escapeString` | `boolean` | `true` | escape special characters in strings |\n| `highlight` | `boolean` | `false` | highlight syntax with colors in terminal (some plugins) |\n| `indent` | `number` | `2` | spaces in each level of indentation |\n| `maxDepth` | `number` | `Infinity` | levels to print in arrays, objects, elements, and so on |\n| `min` | `boolean` | `false` | minimize added space: no indentation nor line breaks |\n| `plugins` | `array` | `[]` | plugins to serialize application-specific data types |\n| `printFunctionName` | `boolean` | `true` | include or omit the name of a function |\n| `theme` | `object` | | colors to highlight syntax in terminal |\n\nProperty values of `theme` are from [ansi-styles colors](https://github.com/chalk/ansi-styles#colors)\n\n```js\nconst DEFAULT_THEME = {\n comment: 'gray',\n content: 'reset',\n prop: 'yellow',\n tag: 'cyan',\n value: 'green',\n};\n```\n\n## Usage with plugins\n\nThe `pretty-format` package provides some built-in plugins, including:\n\n- `ReactElement` for elements from `react`\n- `ReactTestComponent` for test objects from `react-test-renderer`\n\n```js\n// CommonJS\nconst React = require('react');\nconst renderer = require('react-test-renderer');\nconst {format: prettyFormat, plugins} = require('pretty-format');\n\nconst {ReactElement, ReactTestComponent} = plugins;\n```\n\n```js\n// ES2015 modules and destructuring assignment\nimport React from 'react';\nimport renderer from 'react-test-renderer';\nimport {plugins, format as prettyFormat} from 'pretty-format';\n\nconst {ReactElement, ReactTestComponent} = plugins;\n```\n\n```js\nconst onClick = () => {};\nconst element = React.createElement('button', {onClick}, 'Hello World');\n\nconst formatted1 = prettyFormat(element, {\n plugins: [ReactElement],\n printFunctionName: false,\n});\nconst formatted2 = prettyFormat(renderer.create(element).toJSON(), {\n plugins: [ReactTestComponent],\n printFunctionName: false,\n});\n/*\n\n*/\n```\n\n## Usage in Jest\n\nFor snapshot tests, Jest uses `pretty-format` with options that include some of its built-in plugins. For this purpose, plugins are also known as **snapshot serializers**.\n\nTo serialize application-specific data types, you can add modules to `devDependencies` of a project, and then:\n\nIn an **individual** test file, you can add a module as follows. It precedes any modules from Jest configuration.\n\n```js\nimport serializer from 'my-serializer-module';\nexpect.addSnapshotSerializer(serializer);\n\n// tests which have `expect(value).toMatchSnapshot()` assertions\n```\n\nFor **all** test files, you can specify modules in Jest configuration. They precede built-in plugins for React, HTML, and Immutable.js data types. For example, in a `package.json` file:\n\n```json\n{\n \"jest\": {\n \"snapshotSerializers\": [\"my-serializer-module\"]\n }\n}\n```\n\n## Writing plugins\n\nA plugin is a JavaScript object.\n\nIf `options` has a `plugins` array: for the first plugin whose `test(val)` method returns a truthy value, then `prettyFormat(val, options)` returns the result from either:\n\n- `serialize(val, …)` method of the **improved** interface (available in **version 21** or later)\n- `print(val, …)` method of the **original** interface (if plugin does not have `serialize` method)\n\n### test\n\nWrite `test` so it can receive `val` argument of any type. To serialize **objects** which have certain properties, then a guarded expression like `val != null && …` or more concise `val && …` prevents the following errors:\n\n- `TypeError: Cannot read property 'whatever' of null`\n- `TypeError: Cannot read property 'whatever' of undefined`\n\nFor example, `test` method of built-in `ReactElement` plugin:\n\n```js\nconst elementSymbol = Symbol.for('react.element');\nconst test = val => val && val.$$typeof === elementSymbol;\n```\n\nPay attention to efficiency in `test` because `pretty-format` calls it often.\n\n### serialize\n\nThe **improved** interface is available in **version 21** or later.\n\nWrite `serialize` to return a string, given the arguments:\n\n- `val` which “passed the test”\n- unchanging `config` object: derived from `options`\n- current `indentation` string: concatenate to `indent` from `config`\n- current `depth` number: compare to `maxDepth` from `config`\n- current `refs` array: find circular references in objects\n- `printer` callback function: serialize children\n\n### config\n\n\n| key | type | description |\n| :------------------ | :-------- | :------------------------------------------------------ |\n| `callToJSON` | `boolean` | call `toJSON` method (if it exists) on objects |\n| `colors` | `Object` | escape codes for colors to highlight syntax |\n| `escapeRegex` | `boolean` | escape special characters in regular expressions |\n| `escapeString` | `boolean` | escape special characters in strings |\n| `indent` | `string` | spaces in each level of indentation |\n| `maxDepth` | `number` | levels to print in arrays, objects, elements, and so on |\n| `min` | `boolean` | minimize added space: no indentation nor line breaks |\n| `plugins` | `array` | plugins to serialize application-specific data types |\n| `printFunctionName` | `boolean` | include or omit the name of a function |\n| `spacingInner` | `strong` | spacing to separate items in a list |\n| `spacingOuter` | `strong` | spacing to enclose a list of items |\n\nEach property of `colors` in `config` corresponds to a property of `theme` in `options`:\n\n- the key is the same (for example, `tag`)\n- the value in `colors` is a object with `open` and `close` properties whose values are escape codes from [ansi-styles](https://github.com/chalk/ansi-styles) for the color value in `theme` (for example, `'cyan'`)\n\nSome properties in `config` are derived from `min` in `options`:\n\n- `spacingInner` and `spacingOuter` are **newline** if `min` is `false`\n- `spacingInner` is **space** and `spacingOuter` is **empty string** if `min` is `true`\n\n### Example of serialize and test\n\nThis plugin is a pattern you can apply to serialize composite data types. Side note: `pretty-format` does not need a plugin to serialize arrays.\n\n```js\n// We reused more code when we factored out a function for child items\n// that is independent of depth, name, and enclosing punctuation (see below).\nconst SEPARATOR = ',';\nfunction serializeItems(items, config, indentation, depth, refs, printer) {\n if (items.length === 0) {\n return '';\n }\n const indentationItems = indentation + config.indent;\n return (\n config.spacingOuter +\n items\n .map(\n item =>\n indentationItems +\n printer(item, config, indentationItems, depth, refs), // callback\n )\n .join(SEPARATOR + config.spacingInner) +\n (config.min ? '' : SEPARATOR) + // following the last item\n config.spacingOuter +\n indentation\n );\n}\n\nconst plugin = {\n test(val) {\n return Array.isArray(val);\n },\n serialize(array, config, indentation, depth, refs, printer) {\n const name = array.constructor.name;\n return ++depth > config.maxDepth\n ? '[' + name + ']'\n : (config.min ? '' : name + ' ') +\n '[' +\n serializeItems(array, config, indentation, depth, refs, printer) +\n ']';\n },\n};\n```\n\n```js\nconst val = {\n filter: 'completed',\n items: [\n {\n text: 'Write test',\n completed: true,\n },\n {\n text: 'Write serialize',\n completed: true,\n },\n ],\n};\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n plugins: [plugin],\n }),\n);\n/*\nObject {\n \"filter\": \"completed\",\n \"items\": Array [\n Object {\n \"completed\": true,\n \"text\": \"Write test\",\n },\n Object {\n \"completed\": true,\n \"text\": \"Write serialize\",\n },\n ],\n}\n*/\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n indent: 4,\n plugins: [plugin],\n }),\n);\n/*\nObject {\n \"filter\": \"completed\",\n \"items\": Array [\n Object {\n \"completed\": true,\n \"text\": \"Write test\",\n },\n Object {\n \"completed\": true,\n \"text\": \"Write serialize\",\n },\n ],\n}\n*/\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n maxDepth: 1,\n plugins: [plugin],\n }),\n);\n/*\nObject {\n \"filter\": \"completed\",\n \"items\": [Array],\n}\n*/\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n min: true,\n plugins: [plugin],\n }),\n);\n/*\n{\"filter\": \"completed\", \"items\": [{\"completed\": true, \"text\": \"Write test\"}, {\"completed\": true, \"text\": \"Write serialize\"}]}\n*/\n```\n\n### print\n\nThe **original** interface is adequate for plugins:\n\n- that **do not** depend on options other than `highlight` or `min`\n- that **do not** depend on `depth` or `refs` in recursive traversal, and\n- if values either\n - do **not** require indentation, or\n - do **not** occur as children of JavaScript data structures (for example, array)\n\nWrite `print` to return a string, given the arguments:\n\n- `val` which “passed the test”\n- current `printer(valChild)` callback function: serialize children\n- current `indenter(lines)` callback function: indent lines at the next level\n- unchanging `config` object: derived from `options`\n- unchanging `colors` object: derived from `options`\n\nThe 3 properties of `config` are `min` in `options` and:\n\n- `spacing` and `edgeSpacing` are **newline** if `min` is `false`\n- `spacing` is **space** and `edgeSpacing` is **empty string** if `min` is `true`\n\nEach property of `colors` corresponds to a property of `theme` in `options`:\n\n- the key is the same (for example, `tag`)\n- the value in `colors` is a object with `open` and `close` properties whose values are escape codes from [ansi-styles](https://github.com/chalk/ansi-styles) for the color value in `theme` (for example, `'cyan'`)\n\n### Example of print and test\n\nThis plugin prints functions with the **number of named arguments** excluding rest argument.\n\n```js\nconst plugin = {\n print(val) {\n return `[Function ${val.name || 'anonymous'} ${val.length}]`;\n },\n test(val) {\n return typeof val === 'function';\n },\n};\n```\n\n```js\nconst val = {\n onClick(event) {},\n render() {},\n};\n\nprettyFormat(val, {\n plugins: [plugin],\n});\n/*\nObject {\n \"onClick\": [Function onClick 1],\n \"render\": [Function render 0],\n}\n*/\n\nprettyFormat(val);\n/*\nObject {\n \"onClick\": [Function onClick],\n \"render\": [Function render],\n}\n*/\n```\n\nThis plugin **ignores** the `printFunctionName` option. That limitation of the original `print` interface is a reason to use the improved `serialize` interface, described above.\n\n```js\nprettyFormat(val, {\n plugins: [pluginOld],\n printFunctionName: false,\n});\n/*\nObject {\n \"onClick\": [Function onClick 1],\n \"render\": [Function render 0],\n}\n*/\n\nprettyFormat(val, {\n printFunctionName: false,\n});\n/*\nObject {\n \"onClick\": [Function],\n \"render\": [Function],\n}\n*/\n```\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/facebook/jest/issues"},"homepage":"https://github.com/facebook/jest#readme","_id":"pretty-format@27.0.0-next.5","_nodeVersion":"14.15.3","_npmVersion":"lerna/4.0.0/node@v14.15.3+x64 (darwin)","dist":{"integrity":"sha512-SWcA9i7ST3JETWEpcxOf+qDQVsd0ScmlNTR2mduK2YFcqwdYnlyrUhmzwExK0dFXE6575Hmmu4no6WazhN+ILw==","shasum":"9d5c606645bee6149354fc4fcefb27899b51aedf","tarball":"http://localhost:4545/npm/registry/pretty-format/pretty-format-27.0.0-next.5.tgz","fileCount":27,"unpackedSize":67408,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgT1sVCRA9TVsSAnZWagAAAp0P/RifM0RD3RvJWFPxZApz\n8jrjIJUBlBvAeWBwsnSfpv1kqxiHJ+g4Vaj8rzXrjao/Zb6c0TddaKIsiKSe\nOpOB3OKgRaIdvHDr/nXpwOT9r8F/9o/nna6Tt+25lotaRvuKF5oF5kZ7a/ju\n1kGELfOlhiU0NI1mbl15BgtZ0n0x5KR/5XtuZyiVWyKTe2VVTiLpPkP772eq\noK4Iqm242Fv5sfMmRqazxD2fyQ4u4vEDIf1GJiH6FgBcwV6jw9dfh2JjVHgO\niyhjMWWkrllBMH7IMvaiiG5j7WpguA1JPG50veKy6N4bgObEyMGwl7KtOCne\nCvuB6SHmUGpEpAaGlVEttlPYK0RxS4dKQqDFxYXtPbXLn/l3f2as++pwtRHy\n6i6FRT8prv+Aa51XnkI2Jn+pOb0ovW5NMIKcIRw+tRhRUU9mB6AZrM8fWzbD\ncYJeRJBEuaAnqv34R+qiDue1iTn+1cDzKuo7MDAhhhcJXSL1K4wOfr3hyLN/\niiuH1YRF+CjNhDgDNlDxGhOZ3YXYu3X566PMGKMB9Hzt8r9kWGj/JlBEPz+F\nljKDANqXTQzg1niYbkFgyqF4dXbBwElMdvEydbyYWlRm7SwwlZcbFTnkblE9\nq+qx8Qrcj1WQ4MWyFIvxXhuYCMP7DrxipfU1BsA5oyUJxEBT97UF39+SS1c2\n1WDF\r\n=nqdA\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFSf8rzCqKnb1fIQdAGUZ/OMhLHyWryDKXdtaax655qjAiBgSo6xxHObO2sHDbwxjfgen0Q978Ta9g65EjZdN8nbmA=="}]},"_npmUser":{"name":"simenb","email":"sbekkhus91@gmail.com"},"directories":{},"maintainers":[{"name":"scotthovestadt","email":"scott.hovestadt@gmail.com"},{"name":"rubennorte","email":"rubennorte@gmail.com"},{"name":"simenb","email":"sbekkhus91@gmail.com"},{"name":"cpojer","email":"christoph.pojer@gmail.com"},{"name":"fb","email":"opensource+npm@fb.com"},{"name":"aaronabramov","email":"aaron@abramov.io"},{"name":"davidzilburg","email":"davidzilburg@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pretty-format_27.0.0-next.5_1615813397108_0.859500618184837"},"_hasShrinkwrap":false},"27.0.0-next.6":{"name":"pretty-format","version":"27.0.0-next.6","repository":{"type":"git","url":"git+https://github.com/facebook/jest.git","directory":"packages/pretty-format"},"license":"MIT","description":"Stringify any JavaScript value.","main":"./build/index.js","types":"./build/index.d.ts","exports":{".":"./build/index.js","./package.json":"./package.json"},"author":{"name":"James Kyle","email":"me@thejameskyle.com"},"dependencies":{"@jest/types":"^27.0.0-next.3","ansi-regex":"^5.0.0","ansi-styles":"^5.0.0","react-is":"^17.0.1"},"devDependencies":{"@types/react":"*","@types/react-is":"^17.0.0","@types/react-test-renderer":"*","immutable":"4.0.0-rc.9","jest-util":"^27.0.0-next.6","react":"*","react-dom":"*","react-test-renderer":"*"},"engines":{"node":"^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"},"publishConfig":{"access":"public"},"gitHead":"974d2f22b7deeb4f683fb38dd1ee3a0e984916df","readme":"# pretty-format\n\nStringify any JavaScript value.\n\n- Serialize built-in JavaScript types.\n- Serialize application-specific data types with built-in or user-defined plugins.\n\n## Installation\n\n```sh\n$ yarn add pretty-format\n```\n\n## Usage\n\n```js\nconst {format: prettyFormat} = require('pretty-format'); // CommonJS\n```\n\n```js\nimport {format as prettyFormat} from 'pretty-format'; // ES2015 modules\n```\n\n```js\nconst val = {object: {}};\nval.circularReference = val;\nval[Symbol('foo')] = 'foo';\nval.map = new Map([['prop', 'value']]);\nval.array = [-0, Infinity, NaN];\n\nconsole.log(prettyFormat(val));\n/*\nObject {\n \"array\": Array [\n -0,\n Infinity,\n NaN,\n ],\n \"circularReference\": [Circular],\n \"map\": Map {\n \"prop\" => \"value\",\n },\n \"object\": Object {},\n Symbol(foo): \"foo\",\n}\n*/\n```\n\n## Usage with options\n\n```js\nfunction onClick() {}\n\nconsole.log(prettyFormat(onClick));\n/*\n[Function onClick]\n*/\n\nconst options = {\n printFunctionName: false,\n};\nconsole.log(prettyFormat(onClick, options));\n/*\n[Function]\n*/\n```\n\n\n| key | type | default | description |\n| :------------------ | :-------- | :--------- | :------------------------------------------------------ |\n| `callToJSON` | `boolean` | `true` | call `toJSON` method (if it exists) on objects |\n| `escapeRegex` | `boolean` | `false` | escape special characters in regular expressions |\n| `escapeString` | `boolean` | `true` | escape special characters in strings |\n| `highlight` | `boolean` | `false` | highlight syntax with colors in terminal (some plugins) |\n| `indent` | `number` | `2` | spaces in each level of indentation |\n| `maxDepth` | `number` | `Infinity` | levels to print in arrays, objects, elements, and so on |\n| `min` | `boolean` | `false` | minimize added space: no indentation nor line breaks |\n| `plugins` | `array` | `[]` | plugins to serialize application-specific data types |\n| `printFunctionName` | `boolean` | `true` | include or omit the name of a function |\n| `theme` | `object` | | colors to highlight syntax in terminal |\n\nProperty values of `theme` are from [ansi-styles colors](https://github.com/chalk/ansi-styles#colors)\n\n```js\nconst DEFAULT_THEME = {\n comment: 'gray',\n content: 'reset',\n prop: 'yellow',\n tag: 'cyan',\n value: 'green',\n};\n```\n\n## Usage with plugins\n\nThe `pretty-format` package provides some built-in plugins, including:\n\n- `ReactElement` for elements from `react`\n- `ReactTestComponent` for test objects from `react-test-renderer`\n\n```js\n// CommonJS\nconst React = require('react');\nconst renderer = require('react-test-renderer');\nconst {format: prettyFormat, plugins} = require('pretty-format');\n\nconst {ReactElement, ReactTestComponent} = plugins;\n```\n\n```js\n// ES2015 modules and destructuring assignment\nimport React from 'react';\nimport renderer from 'react-test-renderer';\nimport {plugins, format as prettyFormat} from 'pretty-format';\n\nconst {ReactElement, ReactTestComponent} = plugins;\n```\n\n```js\nconst onClick = () => {};\nconst element = React.createElement('button', {onClick}, 'Hello World');\n\nconst formatted1 = prettyFormat(element, {\n plugins: [ReactElement],\n printFunctionName: false,\n});\nconst formatted2 = prettyFormat(renderer.create(element).toJSON(), {\n plugins: [ReactTestComponent],\n printFunctionName: false,\n});\n/*\n\n*/\n```\n\n## Usage in Jest\n\nFor snapshot tests, Jest uses `pretty-format` with options that include some of its built-in plugins. For this purpose, plugins are also known as **snapshot serializers**.\n\nTo serialize application-specific data types, you can add modules to `devDependencies` of a project, and then:\n\nIn an **individual** test file, you can add a module as follows. It precedes any modules from Jest configuration.\n\n```js\nimport serializer from 'my-serializer-module';\nexpect.addSnapshotSerializer(serializer);\n\n// tests which have `expect(value).toMatchSnapshot()` assertions\n```\n\nFor **all** test files, you can specify modules in Jest configuration. They precede built-in plugins for React, HTML, and Immutable.js data types. For example, in a `package.json` file:\n\n```json\n{\n \"jest\": {\n \"snapshotSerializers\": [\"my-serializer-module\"]\n }\n}\n```\n\n## Writing plugins\n\nA plugin is a JavaScript object.\n\nIf `options` has a `plugins` array: for the first plugin whose `test(val)` method returns a truthy value, then `prettyFormat(val, options)` returns the result from either:\n\n- `serialize(val, …)` method of the **improved** interface (available in **version 21** or later)\n- `print(val, …)` method of the **original** interface (if plugin does not have `serialize` method)\n\n### test\n\nWrite `test` so it can receive `val` argument of any type. To serialize **objects** which have certain properties, then a guarded expression like `val != null && …` or more concise `val && …` prevents the following errors:\n\n- `TypeError: Cannot read property 'whatever' of null`\n- `TypeError: Cannot read property 'whatever' of undefined`\n\nFor example, `test` method of built-in `ReactElement` plugin:\n\n```js\nconst elementSymbol = Symbol.for('react.element');\nconst test = val => val && val.$$typeof === elementSymbol;\n```\n\nPay attention to efficiency in `test` because `pretty-format` calls it often.\n\n### serialize\n\nThe **improved** interface is available in **version 21** or later.\n\nWrite `serialize` to return a string, given the arguments:\n\n- `val` which “passed the test”\n- unchanging `config` object: derived from `options`\n- current `indentation` string: concatenate to `indent` from `config`\n- current `depth` number: compare to `maxDepth` from `config`\n- current `refs` array: find circular references in objects\n- `printer` callback function: serialize children\n\n### config\n\n\n| key | type | description |\n| :------------------ | :-------- | :------------------------------------------------------ |\n| `callToJSON` | `boolean` | call `toJSON` method (if it exists) on objects |\n| `colors` | `Object` | escape codes for colors to highlight syntax |\n| `escapeRegex` | `boolean` | escape special characters in regular expressions |\n| `escapeString` | `boolean` | escape special characters in strings |\n| `indent` | `string` | spaces in each level of indentation |\n| `maxDepth` | `number` | levels to print in arrays, objects, elements, and so on |\n| `min` | `boolean` | minimize added space: no indentation nor line breaks |\n| `plugins` | `array` | plugins to serialize application-specific data types |\n| `printFunctionName` | `boolean` | include or omit the name of a function |\n| `spacingInner` | `strong` | spacing to separate items in a list |\n| `spacingOuter` | `strong` | spacing to enclose a list of items |\n\nEach property of `colors` in `config` corresponds to a property of `theme` in `options`:\n\n- the key is the same (for example, `tag`)\n- the value in `colors` is a object with `open` and `close` properties whose values are escape codes from [ansi-styles](https://github.com/chalk/ansi-styles) for the color value in `theme` (for example, `'cyan'`)\n\nSome properties in `config` are derived from `min` in `options`:\n\n- `spacingInner` and `spacingOuter` are **newline** if `min` is `false`\n- `spacingInner` is **space** and `spacingOuter` is **empty string** if `min` is `true`\n\n### Example of serialize and test\n\nThis plugin is a pattern you can apply to serialize composite data types. Side note: `pretty-format` does not need a plugin to serialize arrays.\n\n```js\n// We reused more code when we factored out a function for child items\n// that is independent of depth, name, and enclosing punctuation (see below).\nconst SEPARATOR = ',';\nfunction serializeItems(items, config, indentation, depth, refs, printer) {\n if (items.length === 0) {\n return '';\n }\n const indentationItems = indentation + config.indent;\n return (\n config.spacingOuter +\n items\n .map(\n item =>\n indentationItems +\n printer(item, config, indentationItems, depth, refs), // callback\n )\n .join(SEPARATOR + config.spacingInner) +\n (config.min ? '' : SEPARATOR) + // following the last item\n config.spacingOuter +\n indentation\n );\n}\n\nconst plugin = {\n test(val) {\n return Array.isArray(val);\n },\n serialize(array, config, indentation, depth, refs, printer) {\n const name = array.constructor.name;\n return ++depth > config.maxDepth\n ? '[' + name + ']'\n : (config.min ? '' : name + ' ') +\n '[' +\n serializeItems(array, config, indentation, depth, refs, printer) +\n ']';\n },\n};\n```\n\n```js\nconst val = {\n filter: 'completed',\n items: [\n {\n text: 'Write test',\n completed: true,\n },\n {\n text: 'Write serialize',\n completed: true,\n },\n ],\n};\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n plugins: [plugin],\n }),\n);\n/*\nObject {\n \"filter\": \"completed\",\n \"items\": Array [\n Object {\n \"completed\": true,\n \"text\": \"Write test\",\n },\n Object {\n \"completed\": true,\n \"text\": \"Write serialize\",\n },\n ],\n}\n*/\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n indent: 4,\n plugins: [plugin],\n }),\n);\n/*\nObject {\n \"filter\": \"completed\",\n \"items\": Array [\n Object {\n \"completed\": true,\n \"text\": \"Write test\",\n },\n Object {\n \"completed\": true,\n \"text\": \"Write serialize\",\n },\n ],\n}\n*/\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n maxDepth: 1,\n plugins: [plugin],\n }),\n);\n/*\nObject {\n \"filter\": \"completed\",\n \"items\": [Array],\n}\n*/\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n min: true,\n plugins: [plugin],\n }),\n);\n/*\n{\"filter\": \"completed\", \"items\": [{\"completed\": true, \"text\": \"Write test\"}, {\"completed\": true, \"text\": \"Write serialize\"}]}\n*/\n```\n\n### print\n\nThe **original** interface is adequate for plugins:\n\n- that **do not** depend on options other than `highlight` or `min`\n- that **do not** depend on `depth` or `refs` in recursive traversal, and\n- if values either\n - do **not** require indentation, or\n - do **not** occur as children of JavaScript data structures (for example, array)\n\nWrite `print` to return a string, given the arguments:\n\n- `val` which “passed the test”\n- current `printer(valChild)` callback function: serialize children\n- current `indenter(lines)` callback function: indent lines at the next level\n- unchanging `config` object: derived from `options`\n- unchanging `colors` object: derived from `options`\n\nThe 3 properties of `config` are `min` in `options` and:\n\n- `spacing` and `edgeSpacing` are **newline** if `min` is `false`\n- `spacing` is **space** and `edgeSpacing` is **empty string** if `min` is `true`\n\nEach property of `colors` corresponds to a property of `theme` in `options`:\n\n- the key is the same (for example, `tag`)\n- the value in `colors` is a object with `open` and `close` properties whose values are escape codes from [ansi-styles](https://github.com/chalk/ansi-styles) for the color value in `theme` (for example, `'cyan'`)\n\n### Example of print and test\n\nThis plugin prints functions with the **number of named arguments** excluding rest argument.\n\n```js\nconst plugin = {\n print(val) {\n return `[Function ${val.name || 'anonymous'} ${val.length}]`;\n },\n test(val) {\n return typeof val === 'function';\n },\n};\n```\n\n```js\nconst val = {\n onClick(event) {},\n render() {},\n};\n\nprettyFormat(val, {\n plugins: [plugin],\n});\n/*\nObject {\n \"onClick\": [Function onClick 1],\n \"render\": [Function render 0],\n}\n*/\n\nprettyFormat(val);\n/*\nObject {\n \"onClick\": [Function onClick],\n \"render\": [Function render],\n}\n*/\n```\n\nThis plugin **ignores** the `printFunctionName` option. That limitation of the original `print` interface is a reason to use the improved `serialize` interface, described above.\n\n```js\nprettyFormat(val, {\n plugins: [pluginOld],\n printFunctionName: false,\n});\n/*\nObject {\n \"onClick\": [Function onClick 1],\n \"render\": [Function render 0],\n}\n*/\n\nprettyFormat(val, {\n printFunctionName: false,\n});\n/*\nObject {\n \"onClick\": [Function],\n \"render\": [Function],\n}\n*/\n```\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/facebook/jest/issues"},"homepage":"https://github.com/facebook/jest#readme","_id":"pretty-format@27.0.0-next.6","_nodeVersion":"14.15.3","_npmVersion":"lerna/4.0.0/node@v14.15.3+x64 (darwin)","dist":{"integrity":"sha512-HdKjeRnHKAd+DS3An7N1uMwIu+xRsqYeMJINuWbGMu00Jvz2O+7CqCuIXef/N3ZbTdu36NUoGckN7W5/zTfFmw==","shasum":"939db422c273e8537c9b12d5146ccefdef5cccf5","tarball":"http://localhost:4545/npm/registry/pretty-format/pretty-format-27.0.0-next.6.tgz","fileCount":27,"unpackedSize":67408,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgXOcNCRA9TVsSAnZWagAAIkEP/Au6EH7g+k5oGfKaD2cq\nh2i3AsojBtAi02sF5+KY57vzefCzp9cXJIkQfKliEOY35XzUv3DF4oN41fPf\nyO+FH/QhBWIumAx6UBC7FJaFA029mSBJMCSwW8FA/wMLAjSxovNR1hTSMu8M\ntGKXCKf9pT4cFXom9xyOo86/066AZUMVaraKRfS0G17Dg7wob7VpTe/xA5ih\nFldessUUWDw3Rd3B2GGZ9dIF33y6I+Wejb3L0bItA5MnYRtN9DBxc3SaGm+J\nx2+sryvVEPzQiuzD9WkPx9zqlM4j9r7si+BhGKV5JaVHYaUNlIinCCOzAH20\n0w00wI75e2NQlcSDuO+ZNC7CIkOCb64nqDE33/MRYBQpN8BpolWwhdlDJ2Cf\nqSA8KGZI0X3W4gEu96IgsJ3UMjyWCSwUrGU2yvThW8ZbuWWpkNDSk4P+c6ew\nH8I1HKdCR7F8jS/R7vf+lEgG3VfZFISb6wajpAbJ2sAxGEwtx/PzJjXW41Ee\nlSSSbf+C8ULFhZJCDI1gqcCWQ7SXo0cqkUy+aXkT8ZLi8ZdSsoEUD3XZgT3K\nNZmtBUX0h9/9fufHrDHsB0V/nySscrqsibU+fRZD6zWxK5KV/MEeCYhylTtl\n2iujfzBGL/U7Wus3YB+oKT3+Jb484fZdyRAy6eRm6pMKv94Y8zCanaQVjlcW\nQ2UZ\r\n=0lzf\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDxEcnkO0Bp4BDSkFN4Z6ivmXXCJPKsC6Kx/NGXRRrw+QIgVJwIUdnZqHk3ByZf9bEMuwtZB//puUSgS972xUb7txY="}]},"_npmUser":{"name":"simenb","email":"sbekkhus91@gmail.com"},"directories":{},"maintainers":[{"name":"scotthovestadt","email":"scott.hovestadt@gmail.com"},{"name":"rubennorte","email":"rubennorte@gmail.com"},{"name":"simenb","email":"sbekkhus91@gmail.com"},{"name":"cpojer","email":"christoph.pojer@gmail.com"},{"name":"fb","email":"opensource+npm@fb.com"},{"name":"aaronabramov","email":"aaron@abramov.io"},{"name":"davidzilburg","email":"davidzilburg@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pretty-format_27.0.0-next.6_1616701197091_0.4323549634272008"},"_hasShrinkwrap":false},"27.0.0-next.7":{"name":"pretty-format","version":"27.0.0-next.7","repository":{"type":"git","url":"git+https://github.com/facebook/jest.git","directory":"packages/pretty-format"},"license":"MIT","description":"Stringify any JavaScript value.","main":"./build/index.js","types":"./build/index.d.ts","exports":{".":"./build/index.js","./package.json":"./package.json"},"author":{"name":"James Kyle","email":"me@thejameskyle.com"},"dependencies":{"@jest/types":"^27.0.0-next.7","ansi-regex":"^5.0.0","ansi-styles":"^5.0.0","react-is":"^17.0.1"},"devDependencies":{"@types/react":"*","@types/react-is":"^17.0.0","@types/react-test-renderer":"*","immutable":"4.0.0-rc.9","jest-util":"^27.0.0-next.7","react":"*","react-dom":"*","react-test-renderer":"*"},"engines":{"node":"^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"},"publishConfig":{"access":"public"},"gitHead":"28c763e6be8f57bda89238b95dc801460c2d6601","readme":"# pretty-format\n\nStringify any JavaScript value.\n\n- Serialize built-in JavaScript types.\n- Serialize application-specific data types with built-in or user-defined plugins.\n\n## Installation\n\n```sh\n$ yarn add pretty-format\n```\n\n## Usage\n\n```js\nconst {format: prettyFormat} = require('pretty-format'); // CommonJS\n```\n\n```js\nimport {format as prettyFormat} from 'pretty-format'; // ES2015 modules\n```\n\n```js\nconst val = {object: {}};\nval.circularReference = val;\nval[Symbol('foo')] = 'foo';\nval.map = new Map([['prop', 'value']]);\nval.array = [-0, Infinity, NaN];\n\nconsole.log(prettyFormat(val));\n/*\nObject {\n \"array\": Array [\n -0,\n Infinity,\n NaN,\n ],\n \"circularReference\": [Circular],\n \"map\": Map {\n \"prop\" => \"value\",\n },\n \"object\": Object {},\n Symbol(foo): \"foo\",\n}\n*/\n```\n\n## Usage with options\n\n```js\nfunction onClick() {}\n\nconsole.log(prettyFormat(onClick));\n/*\n[Function onClick]\n*/\n\nconst options = {\n printFunctionName: false,\n};\nconsole.log(prettyFormat(onClick, options));\n/*\n[Function]\n*/\n```\n\n\n| key | type | default | description |\n| :------------------ | :-------- | :--------- | :------------------------------------------------------ |\n| `callToJSON` | `boolean` | `true` | call `toJSON` method (if it exists) on objects |\n| `escapeRegex` | `boolean` | `false` | escape special characters in regular expressions |\n| `escapeString` | `boolean` | `true` | escape special characters in strings |\n| `highlight` | `boolean` | `false` | highlight syntax with colors in terminal (some plugins) |\n| `indent` | `number` | `2` | spaces in each level of indentation |\n| `maxDepth` | `number` | `Infinity` | levels to print in arrays, objects, elements, and so on |\n| `min` | `boolean` | `false` | minimize added space: no indentation nor line breaks |\n| `plugins` | `array` | `[]` | plugins to serialize application-specific data types |\n| `printFunctionName` | `boolean` | `true` | include or omit the name of a function |\n| `theme` | `object` | | colors to highlight syntax in terminal |\n\nProperty values of `theme` are from [ansi-styles colors](https://github.com/chalk/ansi-styles#colors)\n\n```js\nconst DEFAULT_THEME = {\n comment: 'gray',\n content: 'reset',\n prop: 'yellow',\n tag: 'cyan',\n value: 'green',\n};\n```\n\n## Usage with plugins\n\nThe `pretty-format` package provides some built-in plugins, including:\n\n- `ReactElement` for elements from `react`\n- `ReactTestComponent` for test objects from `react-test-renderer`\n\n```js\n// CommonJS\nconst React = require('react');\nconst renderer = require('react-test-renderer');\nconst {format: prettyFormat, plugins} = require('pretty-format');\n\nconst {ReactElement, ReactTestComponent} = plugins;\n```\n\n```js\n// ES2015 modules and destructuring assignment\nimport React from 'react';\nimport renderer from 'react-test-renderer';\nimport {plugins, format as prettyFormat} from 'pretty-format';\n\nconst {ReactElement, ReactTestComponent} = plugins;\n```\n\n```js\nconst onClick = () => {};\nconst element = React.createElement('button', {onClick}, 'Hello World');\n\nconst formatted1 = prettyFormat(element, {\n plugins: [ReactElement],\n printFunctionName: false,\n});\nconst formatted2 = prettyFormat(renderer.create(element).toJSON(), {\n plugins: [ReactTestComponent],\n printFunctionName: false,\n});\n/*\n\n*/\n```\n\n## Usage in Jest\n\nFor snapshot tests, Jest uses `pretty-format` with options that include some of its built-in plugins. For this purpose, plugins are also known as **snapshot serializers**.\n\nTo serialize application-specific data types, you can add modules to `devDependencies` of a project, and then:\n\nIn an **individual** test file, you can add a module as follows. It precedes any modules from Jest configuration.\n\n```js\nimport serializer from 'my-serializer-module';\nexpect.addSnapshotSerializer(serializer);\n\n// tests which have `expect(value).toMatchSnapshot()` assertions\n```\n\nFor **all** test files, you can specify modules in Jest configuration. They precede built-in plugins for React, HTML, and Immutable.js data types. For example, in a `package.json` file:\n\n```json\n{\n \"jest\": {\n \"snapshotSerializers\": [\"my-serializer-module\"]\n }\n}\n```\n\n## Writing plugins\n\nA plugin is a JavaScript object.\n\nIf `options` has a `plugins` array: for the first plugin whose `test(val)` method returns a truthy value, then `prettyFormat(val, options)` returns the result from either:\n\n- `serialize(val, …)` method of the **improved** interface (available in **version 21** or later)\n- `print(val, …)` method of the **original** interface (if plugin does not have `serialize` method)\n\n### test\n\nWrite `test` so it can receive `val` argument of any type. To serialize **objects** which have certain properties, then a guarded expression like `val != null && …` or more concise `val && …` prevents the following errors:\n\n- `TypeError: Cannot read property 'whatever' of null`\n- `TypeError: Cannot read property 'whatever' of undefined`\n\nFor example, `test` method of built-in `ReactElement` plugin:\n\n```js\nconst elementSymbol = Symbol.for('react.element');\nconst test = val => val && val.$$typeof === elementSymbol;\n```\n\nPay attention to efficiency in `test` because `pretty-format` calls it often.\n\n### serialize\n\nThe **improved** interface is available in **version 21** or later.\n\nWrite `serialize` to return a string, given the arguments:\n\n- `val` which “passed the test”\n- unchanging `config` object: derived from `options`\n- current `indentation` string: concatenate to `indent` from `config`\n- current `depth` number: compare to `maxDepth` from `config`\n- current `refs` array: find circular references in objects\n- `printer` callback function: serialize children\n\n### config\n\n\n| key | type | description |\n| :------------------ | :-------- | :------------------------------------------------------ |\n| `callToJSON` | `boolean` | call `toJSON` method (if it exists) on objects |\n| `colors` | `Object` | escape codes for colors to highlight syntax |\n| `escapeRegex` | `boolean` | escape special characters in regular expressions |\n| `escapeString` | `boolean` | escape special characters in strings |\n| `indent` | `string` | spaces in each level of indentation |\n| `maxDepth` | `number` | levels to print in arrays, objects, elements, and so on |\n| `min` | `boolean` | minimize added space: no indentation nor line breaks |\n| `plugins` | `array` | plugins to serialize application-specific data types |\n| `printFunctionName` | `boolean` | include or omit the name of a function |\n| `spacingInner` | `strong` | spacing to separate items in a list |\n| `spacingOuter` | `strong` | spacing to enclose a list of items |\n\nEach property of `colors` in `config` corresponds to a property of `theme` in `options`:\n\n- the key is the same (for example, `tag`)\n- the value in `colors` is a object with `open` and `close` properties whose values are escape codes from [ansi-styles](https://github.com/chalk/ansi-styles) for the color value in `theme` (for example, `'cyan'`)\n\nSome properties in `config` are derived from `min` in `options`:\n\n- `spacingInner` and `spacingOuter` are **newline** if `min` is `false`\n- `spacingInner` is **space** and `spacingOuter` is **empty string** if `min` is `true`\n\n### Example of serialize and test\n\nThis plugin is a pattern you can apply to serialize composite data types. Side note: `pretty-format` does not need a plugin to serialize arrays.\n\n```js\n// We reused more code when we factored out a function for child items\n// that is independent of depth, name, and enclosing punctuation (see below).\nconst SEPARATOR = ',';\nfunction serializeItems(items, config, indentation, depth, refs, printer) {\n if (items.length === 0) {\n return '';\n }\n const indentationItems = indentation + config.indent;\n return (\n config.spacingOuter +\n items\n .map(\n item =>\n indentationItems +\n printer(item, config, indentationItems, depth, refs), // callback\n )\n .join(SEPARATOR + config.spacingInner) +\n (config.min ? '' : SEPARATOR) + // following the last item\n config.spacingOuter +\n indentation\n );\n}\n\nconst plugin = {\n test(val) {\n return Array.isArray(val);\n },\n serialize(array, config, indentation, depth, refs, printer) {\n const name = array.constructor.name;\n return ++depth > config.maxDepth\n ? '[' + name + ']'\n : (config.min ? '' : name + ' ') +\n '[' +\n serializeItems(array, config, indentation, depth, refs, printer) +\n ']';\n },\n};\n```\n\n```js\nconst val = {\n filter: 'completed',\n items: [\n {\n text: 'Write test',\n completed: true,\n },\n {\n text: 'Write serialize',\n completed: true,\n },\n ],\n};\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n plugins: [plugin],\n }),\n);\n/*\nObject {\n \"filter\": \"completed\",\n \"items\": Array [\n Object {\n \"completed\": true,\n \"text\": \"Write test\",\n },\n Object {\n \"completed\": true,\n \"text\": \"Write serialize\",\n },\n ],\n}\n*/\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n indent: 4,\n plugins: [plugin],\n }),\n);\n/*\nObject {\n \"filter\": \"completed\",\n \"items\": Array [\n Object {\n \"completed\": true,\n \"text\": \"Write test\",\n },\n Object {\n \"completed\": true,\n \"text\": \"Write serialize\",\n },\n ],\n}\n*/\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n maxDepth: 1,\n plugins: [plugin],\n }),\n);\n/*\nObject {\n \"filter\": \"completed\",\n \"items\": [Array],\n}\n*/\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n min: true,\n plugins: [plugin],\n }),\n);\n/*\n{\"filter\": \"completed\", \"items\": [{\"completed\": true, \"text\": \"Write test\"}, {\"completed\": true, \"text\": \"Write serialize\"}]}\n*/\n```\n\n### print\n\nThe **original** interface is adequate for plugins:\n\n- that **do not** depend on options other than `highlight` or `min`\n- that **do not** depend on `depth` or `refs` in recursive traversal, and\n- if values either\n - do **not** require indentation, or\n - do **not** occur as children of JavaScript data structures (for example, array)\n\nWrite `print` to return a string, given the arguments:\n\n- `val` which “passed the test”\n- current `printer(valChild)` callback function: serialize children\n- current `indenter(lines)` callback function: indent lines at the next level\n- unchanging `config` object: derived from `options`\n- unchanging `colors` object: derived from `options`\n\nThe 3 properties of `config` are `min` in `options` and:\n\n- `spacing` and `edgeSpacing` are **newline** if `min` is `false`\n- `spacing` is **space** and `edgeSpacing` is **empty string** if `min` is `true`\n\nEach property of `colors` corresponds to a property of `theme` in `options`:\n\n- the key is the same (for example, `tag`)\n- the value in `colors` is a object with `open` and `close` properties whose values are escape codes from [ansi-styles](https://github.com/chalk/ansi-styles) for the color value in `theme` (for example, `'cyan'`)\n\n### Example of print and test\n\nThis plugin prints functions with the **number of named arguments** excluding rest argument.\n\n```js\nconst plugin = {\n print(val) {\n return `[Function ${val.name || 'anonymous'} ${val.length}]`;\n },\n test(val) {\n return typeof val === 'function';\n },\n};\n```\n\n```js\nconst val = {\n onClick(event) {},\n render() {},\n};\n\nprettyFormat(val, {\n plugins: [plugin],\n});\n/*\nObject {\n \"onClick\": [Function onClick 1],\n \"render\": [Function render 0],\n}\n*/\n\nprettyFormat(val);\n/*\nObject {\n \"onClick\": [Function onClick],\n \"render\": [Function render],\n}\n*/\n```\n\nThis plugin **ignores** the `printFunctionName` option. That limitation of the original `print` interface is a reason to use the improved `serialize` interface, described above.\n\n```js\nprettyFormat(val, {\n plugins: [pluginOld],\n printFunctionName: false,\n});\n/*\nObject {\n \"onClick\": [Function onClick 1],\n \"render\": [Function render 0],\n}\n*/\n\nprettyFormat(val, {\n printFunctionName: false,\n});\n/*\nObject {\n \"onClick\": [Function],\n \"render\": [Function],\n}\n*/\n```\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/facebook/jest/issues"},"homepage":"https://github.com/facebook/jest#readme","_id":"pretty-format@27.0.0-next.7","_nodeVersion":"14.15.3","_npmVersion":"lerna/4.0.0/node@v14.15.3+x64 (darwin)","dist":{"integrity":"sha512-EIZkBDWdmTBGTBmvvVBn/CST1fnESlojElgry2GTOBxFs7fbIIeyf5tb46yqIwJjiPg0oRqIExOBGGWgPw+qRA==","shasum":"48fcf4058857114c6326410894ad39ac97e84555","tarball":"http://localhost:4545/npm/registry/pretty-format/pretty-format-27.0.0-next.7.tgz","fileCount":27,"unpackedSize":67408,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgZyCKCRA9TVsSAnZWagAAxQ0QAJFygK/rfGXFg438t4fT\njh5qTQxYPmMRZWp+gNx52a0MTdKCBUXKK4xxe3yT77yCzxR1Izc47qcYsv+F\nLAbF7MRUM4Ruoicg7BR5XC9nfUgUbZ3S/xJuHaqdC5UGL9qhvt/gptgsx2ax\nnGMnlZV2iuIDz+gOkMkCP6A9JrOWu9sZX6sXGocdIFKDUr9Okc+oCUaQuLyU\nk+rlN2BP/T1Th8fg/bqYEI/maLMDd4MCU6IcqQ0bl8m4bkMKADY8rdbqN3HL\nVMUbml0mQ4TB6//cMILbW1xIpJa9xsaII6Z//DWXHhFAkZGGAGSv9zxrFtID\nd7relcq6AkK1k+Uf93pSnvjlgeg6HKBsNAz2fLwx/pbSBK+RTTfSLRKsntTo\nzldI20hN7cL5voWps0/9PEQpNCqxo5cwiRxfYngr/Sq/baoxHSo02w2qa/fF\nn8dKiMk2g2Gfg0GrMGX272CN62wyXGzfJkQUblC9scz6OuRcPC3/v88WLdYW\nYlMhfg83TNK2ZffHsAQElrIAnTE85bkE30CWAZpObh0R6sgM7QeNEwaghi9z\nYS5q0bl60iIpt3UvukO3rlLEgrjX5trkekmvP4eBNd5WsV7iv+IvKTJ5y251\nt1xVTV4oAT/z1sb9JJphv0F1T5gFvI3VHLjm4+NfHqrjl2/NTRBT8dE59Xp/\nVOa/\r\n=Oh5U\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDfeqLe98de1tw+NBOYXth1Vjgz5zHlVIutRic9uzOYCgIhANzxFt5JOs5T49EjTt/sTxJnM0nHz+tUKDMX01mob9L0"}]},"_npmUser":{"name":"simenb","email":"sbekkhus91@gmail.com"},"directories":{},"maintainers":[{"name":"scotthovestadt","email":"scott.hovestadt@gmail.com"},{"name":"rubennorte","email":"rubennorte@gmail.com"},{"name":"simenb","email":"sbekkhus91@gmail.com"},{"name":"cpojer","email":"christoph.pojer@gmail.com"},{"name":"fb","email":"opensource+npm@fb.com"},{"name":"aaronabramov","email":"aaron@abramov.io"},{"name":"davidzilburg","email":"davidzilburg@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pretty-format_27.0.0-next.7_1617371273959_0.7513344253300966"},"_hasShrinkwrap":false},"27.0.0-next.8":{"name":"pretty-format","version":"27.0.0-next.8","repository":{"type":"git","url":"git+https://github.com/facebook/jest.git","directory":"packages/pretty-format"},"license":"MIT","description":"Stringify any JavaScript value.","main":"./build/index.js","types":"./build/index.d.ts","exports":{".":"./build/index.js","./package.json":"./package.json"},"author":{"name":"James Kyle","email":"me@thejameskyle.com"},"dependencies":{"@jest/types":"^27.0.0-next.8","ansi-regex":"^5.0.0","ansi-styles":"^5.0.0","react-is":"^17.0.1"},"devDependencies":{"@types/react":"*","@types/react-is":"^17.0.0","@types/react-test-renderer":"*","immutable":"4.0.0-rc.9","jest-util":"^27.0.0-next.8","react":"*","react-dom":"*","react-test-renderer":"*"},"engines":{"node":"^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"},"publishConfig":{"access":"public"},"gitHead":"d7ba5030e274b52f029179dfdb860349a36eea37","readme":"# pretty-format\n\nStringify any JavaScript value.\n\n- Serialize built-in JavaScript types.\n- Serialize application-specific data types with built-in or user-defined plugins.\n\n## Installation\n\n```sh\n$ yarn add pretty-format\n```\n\n## Usage\n\n```js\nconst {format: prettyFormat} = require('pretty-format'); // CommonJS\n```\n\n```js\nimport {format as prettyFormat} from 'pretty-format'; // ES2015 modules\n```\n\n```js\nconst val = {object: {}};\nval.circularReference = val;\nval[Symbol('foo')] = 'foo';\nval.map = new Map([['prop', 'value']]);\nval.array = [-0, Infinity, NaN];\n\nconsole.log(prettyFormat(val));\n/*\nObject {\n \"array\": Array [\n -0,\n Infinity,\n NaN,\n ],\n \"circularReference\": [Circular],\n \"map\": Map {\n \"prop\" => \"value\",\n },\n \"object\": Object {},\n Symbol(foo): \"foo\",\n}\n*/\n```\n\n## Usage with options\n\n```js\nfunction onClick() {}\n\nconsole.log(prettyFormat(onClick));\n/*\n[Function onClick]\n*/\n\nconst options = {\n printFunctionName: false,\n};\nconsole.log(prettyFormat(onClick, options));\n/*\n[Function]\n*/\n```\n\n\n| key | type | default | description |\n| :------------------ | :-------- | :--------- | :------------------------------------------------------ |\n| `callToJSON` | `boolean` | `true` | call `toJSON` method (if it exists) on objects |\n| `escapeRegex` | `boolean` | `false` | escape special characters in regular expressions |\n| `escapeString` | `boolean` | `true` | escape special characters in strings |\n| `highlight` | `boolean` | `false` | highlight syntax with colors in terminal (some plugins) |\n| `indent` | `number` | `2` | spaces in each level of indentation |\n| `maxDepth` | `number` | `Infinity` | levels to print in arrays, objects, elements, and so on |\n| `min` | `boolean` | `false` | minimize added space: no indentation nor line breaks |\n| `plugins` | `array` | `[]` | plugins to serialize application-specific data types |\n| `printFunctionName` | `boolean` | `true` | include or omit the name of a function |\n| `theme` | `object` | | colors to highlight syntax in terminal |\n\nProperty values of `theme` are from [ansi-styles colors](https://github.com/chalk/ansi-styles#colors)\n\n```js\nconst DEFAULT_THEME = {\n comment: 'gray',\n content: 'reset',\n prop: 'yellow',\n tag: 'cyan',\n value: 'green',\n};\n```\n\n## Usage with plugins\n\nThe `pretty-format` package provides some built-in plugins, including:\n\n- `ReactElement` for elements from `react`\n- `ReactTestComponent` for test objects from `react-test-renderer`\n\n```js\n// CommonJS\nconst React = require('react');\nconst renderer = require('react-test-renderer');\nconst {format: prettyFormat, plugins} = require('pretty-format');\n\nconst {ReactElement, ReactTestComponent} = plugins;\n```\n\n```js\n// ES2015 modules and destructuring assignment\nimport React from 'react';\nimport renderer from 'react-test-renderer';\nimport {plugins, format as prettyFormat} from 'pretty-format';\n\nconst {ReactElement, ReactTestComponent} = plugins;\n```\n\n```js\nconst onClick = () => {};\nconst element = React.createElement('button', {onClick}, 'Hello World');\n\nconst formatted1 = prettyFormat(element, {\n plugins: [ReactElement],\n printFunctionName: false,\n});\nconst formatted2 = prettyFormat(renderer.create(element).toJSON(), {\n plugins: [ReactTestComponent],\n printFunctionName: false,\n});\n/*\n\n*/\n```\n\n## Usage in Jest\n\nFor snapshot tests, Jest uses `pretty-format` with options that include some of its built-in plugins. For this purpose, plugins are also known as **snapshot serializers**.\n\nTo serialize application-specific data types, you can add modules to `devDependencies` of a project, and then:\n\nIn an **individual** test file, you can add a module as follows. It precedes any modules from Jest configuration.\n\n```js\nimport serializer from 'my-serializer-module';\nexpect.addSnapshotSerializer(serializer);\n\n// tests which have `expect(value).toMatchSnapshot()` assertions\n```\n\nFor **all** test files, you can specify modules in Jest configuration. They precede built-in plugins for React, HTML, and Immutable.js data types. For example, in a `package.json` file:\n\n```json\n{\n \"jest\": {\n \"snapshotSerializers\": [\"my-serializer-module\"]\n }\n}\n```\n\n## Writing plugins\n\nA plugin is a JavaScript object.\n\nIf `options` has a `plugins` array: for the first plugin whose `test(val)` method returns a truthy value, then `prettyFormat(val, options)` returns the result from either:\n\n- `serialize(val, …)` method of the **improved** interface (available in **version 21** or later)\n- `print(val, …)` method of the **original** interface (if plugin does not have `serialize` method)\n\n### test\n\nWrite `test` so it can receive `val` argument of any type. To serialize **objects** which have certain properties, then a guarded expression like `val != null && …` or more concise `val && …` prevents the following errors:\n\n- `TypeError: Cannot read property 'whatever' of null`\n- `TypeError: Cannot read property 'whatever' of undefined`\n\nFor example, `test` method of built-in `ReactElement` plugin:\n\n```js\nconst elementSymbol = Symbol.for('react.element');\nconst test = val => val && val.$$typeof === elementSymbol;\n```\n\nPay attention to efficiency in `test` because `pretty-format` calls it often.\n\n### serialize\n\nThe **improved** interface is available in **version 21** or later.\n\nWrite `serialize` to return a string, given the arguments:\n\n- `val` which “passed the test”\n- unchanging `config` object: derived from `options`\n- current `indentation` string: concatenate to `indent` from `config`\n- current `depth` number: compare to `maxDepth` from `config`\n- current `refs` array: find circular references in objects\n- `printer` callback function: serialize children\n\n### config\n\n\n| key | type | description |\n| :------------------ | :-------- | :------------------------------------------------------ |\n| `callToJSON` | `boolean` | call `toJSON` method (if it exists) on objects |\n| `colors` | `Object` | escape codes for colors to highlight syntax |\n| `escapeRegex` | `boolean` | escape special characters in regular expressions |\n| `escapeString` | `boolean` | escape special characters in strings |\n| `indent` | `string` | spaces in each level of indentation |\n| `maxDepth` | `number` | levels to print in arrays, objects, elements, and so on |\n| `min` | `boolean` | minimize added space: no indentation nor line breaks |\n| `plugins` | `array` | plugins to serialize application-specific data types |\n| `printFunctionName` | `boolean` | include or omit the name of a function |\n| `spacingInner` | `strong` | spacing to separate items in a list |\n| `spacingOuter` | `strong` | spacing to enclose a list of items |\n\nEach property of `colors` in `config` corresponds to a property of `theme` in `options`:\n\n- the key is the same (for example, `tag`)\n- the value in `colors` is a object with `open` and `close` properties whose values are escape codes from [ansi-styles](https://github.com/chalk/ansi-styles) for the color value in `theme` (for example, `'cyan'`)\n\nSome properties in `config` are derived from `min` in `options`:\n\n- `spacingInner` and `spacingOuter` are **newline** if `min` is `false`\n- `spacingInner` is **space** and `spacingOuter` is **empty string** if `min` is `true`\n\n### Example of serialize and test\n\nThis plugin is a pattern you can apply to serialize composite data types. Side note: `pretty-format` does not need a plugin to serialize arrays.\n\n```js\n// We reused more code when we factored out a function for child items\n// that is independent of depth, name, and enclosing punctuation (see below).\nconst SEPARATOR = ',';\nfunction serializeItems(items, config, indentation, depth, refs, printer) {\n if (items.length === 0) {\n return '';\n }\n const indentationItems = indentation + config.indent;\n return (\n config.spacingOuter +\n items\n .map(\n item =>\n indentationItems +\n printer(item, config, indentationItems, depth, refs), // callback\n )\n .join(SEPARATOR + config.spacingInner) +\n (config.min ? '' : SEPARATOR) + // following the last item\n config.spacingOuter +\n indentation\n );\n}\n\nconst plugin = {\n test(val) {\n return Array.isArray(val);\n },\n serialize(array, config, indentation, depth, refs, printer) {\n const name = array.constructor.name;\n return ++depth > config.maxDepth\n ? '[' + name + ']'\n : (config.min ? '' : name + ' ') +\n '[' +\n serializeItems(array, config, indentation, depth, refs, printer) +\n ']';\n },\n};\n```\n\n```js\nconst val = {\n filter: 'completed',\n items: [\n {\n text: 'Write test',\n completed: true,\n },\n {\n text: 'Write serialize',\n completed: true,\n },\n ],\n};\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n plugins: [plugin],\n }),\n);\n/*\nObject {\n \"filter\": \"completed\",\n \"items\": Array [\n Object {\n \"completed\": true,\n \"text\": \"Write test\",\n },\n Object {\n \"completed\": true,\n \"text\": \"Write serialize\",\n },\n ],\n}\n*/\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n indent: 4,\n plugins: [plugin],\n }),\n);\n/*\nObject {\n \"filter\": \"completed\",\n \"items\": Array [\n Object {\n \"completed\": true,\n \"text\": \"Write test\",\n },\n Object {\n \"completed\": true,\n \"text\": \"Write serialize\",\n },\n ],\n}\n*/\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n maxDepth: 1,\n plugins: [plugin],\n }),\n);\n/*\nObject {\n \"filter\": \"completed\",\n \"items\": [Array],\n}\n*/\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n min: true,\n plugins: [plugin],\n }),\n);\n/*\n{\"filter\": \"completed\", \"items\": [{\"completed\": true, \"text\": \"Write test\"}, {\"completed\": true, \"text\": \"Write serialize\"}]}\n*/\n```\n\n### print\n\nThe **original** interface is adequate for plugins:\n\n- that **do not** depend on options other than `highlight` or `min`\n- that **do not** depend on `depth` or `refs` in recursive traversal, and\n- if values either\n - do **not** require indentation, or\n - do **not** occur as children of JavaScript data structures (for example, array)\n\nWrite `print` to return a string, given the arguments:\n\n- `val` which “passed the test”\n- current `printer(valChild)` callback function: serialize children\n- current `indenter(lines)` callback function: indent lines at the next level\n- unchanging `config` object: derived from `options`\n- unchanging `colors` object: derived from `options`\n\nThe 3 properties of `config` are `min` in `options` and:\n\n- `spacing` and `edgeSpacing` are **newline** if `min` is `false`\n- `spacing` is **space** and `edgeSpacing` is **empty string** if `min` is `true`\n\nEach property of `colors` corresponds to a property of `theme` in `options`:\n\n- the key is the same (for example, `tag`)\n- the value in `colors` is a object with `open` and `close` properties whose values are escape codes from [ansi-styles](https://github.com/chalk/ansi-styles) for the color value in `theme` (for example, `'cyan'`)\n\n### Example of print and test\n\nThis plugin prints functions with the **number of named arguments** excluding rest argument.\n\n```js\nconst plugin = {\n print(val) {\n return `[Function ${val.name || 'anonymous'} ${val.length}]`;\n },\n test(val) {\n return typeof val === 'function';\n },\n};\n```\n\n```js\nconst val = {\n onClick(event) {},\n render() {},\n};\n\nprettyFormat(val, {\n plugins: [plugin],\n});\n/*\nObject {\n \"onClick\": [Function onClick 1],\n \"render\": [Function render 0],\n}\n*/\n\nprettyFormat(val);\n/*\nObject {\n \"onClick\": [Function onClick],\n \"render\": [Function render],\n}\n*/\n```\n\nThis plugin **ignores** the `printFunctionName` option. That limitation of the original `print` interface is a reason to use the improved `serialize` interface, described above.\n\n```js\nprettyFormat(val, {\n plugins: [pluginOld],\n printFunctionName: false,\n});\n/*\nObject {\n \"onClick\": [Function onClick 1],\n \"render\": [Function render 0],\n}\n*/\n\nprettyFormat(val, {\n printFunctionName: false,\n});\n/*\nObject {\n \"onClick\": [Function],\n \"render\": [Function],\n}\n*/\n```\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/facebook/jest/issues"},"homepage":"https://github.com/facebook/jest#readme","_id":"pretty-format@27.0.0-next.8","_nodeVersion":"14.15.3","_npmVersion":"lerna/4.0.0/node@v14.15.3+x64 (darwin)","dist":{"integrity":"sha512-Y7Pd+USoRKghYi+dj2RCikTK36AlDO2bMH5sRGMr3fW1l/vVp2Vht2tjVhXvC5T6+yMH2ivtpfI6+99/Igr+6Q==","shasum":"4dc6c34580949180a40c38957ac5e92693f10f2e","tarball":"http://localhost:4545/npm/registry/pretty-format/pretty-format-27.0.0-next.8.tgz","fileCount":27,"unpackedSize":67408,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgdMzVCRA9TVsSAnZWagAA4aYQAJ1JnjF9d74XfkyCDFFO\nusQS3PztvpeO6u3BBud+LF4UVLAjUsac1YpQCmKO2kKkYT9Nmyt5NrZ8OEMY\n21+8dsW6qNktUbUFeGyPCifFWkucvmP+/mTVag5lLEGeVJK24jzDNiWHTCK8\nal4ufI7JoUnl1LGi/QZp8t1AP4E9n7sjDmr1+BTYr07v+XBcqq6Be6kZla1t\n9FgQ6pKqN1lmFDqdv9e/0Q3spJxuqABmz9Cph34FrKl6cy607TndVb/aroqO\nMPoGrz36JIE6quXxvlIQ1Ck0mpNIRMYechZAUZGXbr82DRrbbF4g/nwDEDNq\nlinxE/XhMnDfmM2rJl+C8AZ/eW6ZaBj7l9ac28wZGe5QGqFG324GqlaGcEVl\nubljhIexnSYQL3EB90JoCzzlWpr9x8bOK9VkHcRuNsqqpmh8ozZ4nbnB+aNH\nJ9KCK3KejMcNJVlQcSv97en/bSLdK36siP6bsFfzdBJZZuDURUHBiFOcNxkY\nf6/I7DuUpzFHNdedIWq2oJ5orENDa7gRAE2EJz8oWVDoXpYGHwK3Tc/8sm5U\nn5qZIKs/zP7MI2sU1pVwfbp66lbekpS29BYBX7FKX5cENjddw28G2ZF3nwrt\n0xmntWRVf4Xy4C7QUSAd/PrWDE581UPf7EOSNECaAK+4sftSXi6lhW4lLRQe\nCikc\r\n=d54p\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCTGF1YoPHBFuWc905y8ytC4/iy8HQLFEDEJIo5bG1SQgIhALfXfYJzh4AUqaPtxMf+TDyUjzIKKv2vZU2/OUF3LTIr"}]},"_npmUser":{"name":"simenb","email":"sbekkhus91@gmail.com"},"directories":{},"maintainers":[{"name":"scotthovestadt","email":"scott.hovestadt@gmail.com"},{"name":"rubennorte","email":"rubennorte@gmail.com"},{"name":"simenb","email":"sbekkhus91@gmail.com"},{"name":"fb","email":"opensource+npm@fb.com"},{"name":"aaronabramov","email":"aaron@abramov.io"},{"name":"davidzilburg","email":"davidzilburg@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pretty-format_27.0.0-next.8_1618267349142_0.02346708839333833"},"_hasShrinkwrap":false},"27.0.0-next.9":{"name":"pretty-format","version":"27.0.0-next.9","repository":{"type":"git","url":"git+https://github.com/facebook/jest.git","directory":"packages/pretty-format"},"license":"MIT","description":"Stringify any JavaScript value.","main":"./build/index.js","types":"./build/index.d.ts","exports":{".":"./build/index.js","./package.json":"./package.json"},"author":{"name":"James Kyle","email":"me@thejameskyle.com"},"dependencies":{"@jest/types":"^27.0.0-next.8","ansi-regex":"^5.0.0","ansi-styles":"^5.0.0","react-is":"^17.0.1"},"devDependencies":{"@types/react":"*","@types/react-is":"^17.0.0","@types/react-test-renderer":"*","immutable":"4.0.0-rc.9","jest-util":"^27.0.0-next.9","react":"*","react-dom":"*","react-test-renderer":"*"},"engines":{"node":"^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"},"publishConfig":{"access":"public"},"gitHead":"d836f33f98845794b4eae8149548a81ddcfc6521","readme":"# pretty-format\n\nStringify any JavaScript value.\n\n- Serialize built-in JavaScript types.\n- Serialize application-specific data types with built-in or user-defined plugins.\n\n## Installation\n\n```sh\n$ yarn add pretty-format\n```\n\n## Usage\n\n```js\nconst {format: prettyFormat} = require('pretty-format'); // CommonJS\n```\n\n```js\nimport {format as prettyFormat} from 'pretty-format'; // ES2015 modules\n```\n\n```js\nconst val = {object: {}};\nval.circularReference = val;\nval[Symbol('foo')] = 'foo';\nval.map = new Map([['prop', 'value']]);\nval.array = [-0, Infinity, NaN];\n\nconsole.log(prettyFormat(val));\n/*\nObject {\n \"array\": Array [\n -0,\n Infinity,\n NaN,\n ],\n \"circularReference\": [Circular],\n \"map\": Map {\n \"prop\" => \"value\",\n },\n \"object\": Object {},\n Symbol(foo): \"foo\",\n}\n*/\n```\n\n## Usage with options\n\n```js\nfunction onClick() {}\n\nconsole.log(prettyFormat(onClick));\n/*\n[Function onClick]\n*/\n\nconst options = {\n printFunctionName: false,\n};\nconsole.log(prettyFormat(onClick, options));\n/*\n[Function]\n*/\n```\n\n\n| key | type | default | description |\n| :------------------ | :-------- | :--------- | :------------------------------------------------------ |\n| `callToJSON` | `boolean` | `true` | call `toJSON` method (if it exists) on objects |\n| `escapeRegex` | `boolean` | `false` | escape special characters in regular expressions |\n| `escapeString` | `boolean` | `true` | escape special characters in strings |\n| `highlight` | `boolean` | `false` | highlight syntax with colors in terminal (some plugins) |\n| `indent` | `number` | `2` | spaces in each level of indentation |\n| `maxDepth` | `number` | `Infinity` | levels to print in arrays, objects, elements, and so on |\n| `min` | `boolean` | `false` | minimize added space: no indentation nor line breaks |\n| `plugins` | `array` | `[]` | plugins to serialize application-specific data types |\n| `printFunctionName` | `boolean` | `true` | include or omit the name of a function |\n| `theme` | `object` | | colors to highlight syntax in terminal |\n\nProperty values of `theme` are from [ansi-styles colors](https://github.com/chalk/ansi-styles#colors)\n\n```js\nconst DEFAULT_THEME = {\n comment: 'gray',\n content: 'reset',\n prop: 'yellow',\n tag: 'cyan',\n value: 'green',\n};\n```\n\n## Usage with plugins\n\nThe `pretty-format` package provides some built-in plugins, including:\n\n- `ReactElement` for elements from `react`\n- `ReactTestComponent` for test objects from `react-test-renderer`\n\n```js\n// CommonJS\nconst React = require('react');\nconst renderer = require('react-test-renderer');\nconst {format: prettyFormat, plugins} = require('pretty-format');\n\nconst {ReactElement, ReactTestComponent} = plugins;\n```\n\n```js\n// ES2015 modules and destructuring assignment\nimport React from 'react';\nimport renderer from 'react-test-renderer';\nimport {plugins, format as prettyFormat} from 'pretty-format';\n\nconst {ReactElement, ReactTestComponent} = plugins;\n```\n\n```js\nconst onClick = () => {};\nconst element = React.createElement('button', {onClick}, 'Hello World');\n\nconst formatted1 = prettyFormat(element, {\n plugins: [ReactElement],\n printFunctionName: false,\n});\nconst formatted2 = prettyFormat(renderer.create(element).toJSON(), {\n plugins: [ReactTestComponent],\n printFunctionName: false,\n});\n/*\n\n*/\n```\n\n## Usage in Jest\n\nFor snapshot tests, Jest uses `pretty-format` with options that include some of its built-in plugins. For this purpose, plugins are also known as **snapshot serializers**.\n\nTo serialize application-specific data types, you can add modules to `devDependencies` of a project, and then:\n\nIn an **individual** test file, you can add a module as follows. It precedes any modules from Jest configuration.\n\n```js\nimport serializer from 'my-serializer-module';\nexpect.addSnapshotSerializer(serializer);\n\n// tests which have `expect(value).toMatchSnapshot()` assertions\n```\n\nFor **all** test files, you can specify modules in Jest configuration. They precede built-in plugins for React, HTML, and Immutable.js data types. For example, in a `package.json` file:\n\n```json\n{\n \"jest\": {\n \"snapshotSerializers\": [\"my-serializer-module\"]\n }\n}\n```\n\n## Writing plugins\n\nA plugin is a JavaScript object.\n\nIf `options` has a `plugins` array: for the first plugin whose `test(val)` method returns a truthy value, then `prettyFormat(val, options)` returns the result from either:\n\n- `serialize(val, …)` method of the **improved** interface (available in **version 21** or later)\n- `print(val, …)` method of the **original** interface (if plugin does not have `serialize` method)\n\n### test\n\nWrite `test` so it can receive `val` argument of any type. To serialize **objects** which have certain properties, then a guarded expression like `val != null && …` or more concise `val && …` prevents the following errors:\n\n- `TypeError: Cannot read property 'whatever' of null`\n- `TypeError: Cannot read property 'whatever' of undefined`\n\nFor example, `test` method of built-in `ReactElement` plugin:\n\n```js\nconst elementSymbol = Symbol.for('react.element');\nconst test = val => val && val.$$typeof === elementSymbol;\n```\n\nPay attention to efficiency in `test` because `pretty-format` calls it often.\n\n### serialize\n\nThe **improved** interface is available in **version 21** or later.\n\nWrite `serialize` to return a string, given the arguments:\n\n- `val` which “passed the test”\n- unchanging `config` object: derived from `options`\n- current `indentation` string: concatenate to `indent` from `config`\n- current `depth` number: compare to `maxDepth` from `config`\n- current `refs` array: find circular references in objects\n- `printer` callback function: serialize children\n\n### config\n\n\n| key | type | description |\n| :------------------ | :-------- | :------------------------------------------------------ |\n| `callToJSON` | `boolean` | call `toJSON` method (if it exists) on objects |\n| `colors` | `Object` | escape codes for colors to highlight syntax |\n| `escapeRegex` | `boolean` | escape special characters in regular expressions |\n| `escapeString` | `boolean` | escape special characters in strings |\n| `indent` | `string` | spaces in each level of indentation |\n| `maxDepth` | `number` | levels to print in arrays, objects, elements, and so on |\n| `min` | `boolean` | minimize added space: no indentation nor line breaks |\n| `plugins` | `array` | plugins to serialize application-specific data types |\n| `printFunctionName` | `boolean` | include or omit the name of a function |\n| `spacingInner` | `strong` | spacing to separate items in a list |\n| `spacingOuter` | `strong` | spacing to enclose a list of items |\n\nEach property of `colors` in `config` corresponds to a property of `theme` in `options`:\n\n- the key is the same (for example, `tag`)\n- the value in `colors` is a object with `open` and `close` properties whose values are escape codes from [ansi-styles](https://github.com/chalk/ansi-styles) for the color value in `theme` (for example, `'cyan'`)\n\nSome properties in `config` are derived from `min` in `options`:\n\n- `spacingInner` and `spacingOuter` are **newline** if `min` is `false`\n- `spacingInner` is **space** and `spacingOuter` is **empty string** if `min` is `true`\n\n### Example of serialize and test\n\nThis plugin is a pattern you can apply to serialize composite data types. Side note: `pretty-format` does not need a plugin to serialize arrays.\n\n```js\n// We reused more code when we factored out a function for child items\n// that is independent of depth, name, and enclosing punctuation (see below).\nconst SEPARATOR = ',';\nfunction serializeItems(items, config, indentation, depth, refs, printer) {\n if (items.length === 0) {\n return '';\n }\n const indentationItems = indentation + config.indent;\n return (\n config.spacingOuter +\n items\n .map(\n item =>\n indentationItems +\n printer(item, config, indentationItems, depth, refs), // callback\n )\n .join(SEPARATOR + config.spacingInner) +\n (config.min ? '' : SEPARATOR) + // following the last item\n config.spacingOuter +\n indentation\n );\n}\n\nconst plugin = {\n test(val) {\n return Array.isArray(val);\n },\n serialize(array, config, indentation, depth, refs, printer) {\n const name = array.constructor.name;\n return ++depth > config.maxDepth\n ? '[' + name + ']'\n : (config.min ? '' : name + ' ') +\n '[' +\n serializeItems(array, config, indentation, depth, refs, printer) +\n ']';\n },\n};\n```\n\n```js\nconst val = {\n filter: 'completed',\n items: [\n {\n text: 'Write test',\n completed: true,\n },\n {\n text: 'Write serialize',\n completed: true,\n },\n ],\n};\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n plugins: [plugin],\n }),\n);\n/*\nObject {\n \"filter\": \"completed\",\n \"items\": Array [\n Object {\n \"completed\": true,\n \"text\": \"Write test\",\n },\n Object {\n \"completed\": true,\n \"text\": \"Write serialize\",\n },\n ],\n}\n*/\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n indent: 4,\n plugins: [plugin],\n }),\n);\n/*\nObject {\n \"filter\": \"completed\",\n \"items\": Array [\n Object {\n \"completed\": true,\n \"text\": \"Write test\",\n },\n Object {\n \"completed\": true,\n \"text\": \"Write serialize\",\n },\n ],\n}\n*/\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n maxDepth: 1,\n plugins: [plugin],\n }),\n);\n/*\nObject {\n \"filter\": \"completed\",\n \"items\": [Array],\n}\n*/\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n min: true,\n plugins: [plugin],\n }),\n);\n/*\n{\"filter\": \"completed\", \"items\": [{\"completed\": true, \"text\": \"Write test\"}, {\"completed\": true, \"text\": \"Write serialize\"}]}\n*/\n```\n\n### print\n\nThe **original** interface is adequate for plugins:\n\n- that **do not** depend on options other than `highlight` or `min`\n- that **do not** depend on `depth` or `refs` in recursive traversal, and\n- if values either\n - do **not** require indentation, or\n - do **not** occur as children of JavaScript data structures (for example, array)\n\nWrite `print` to return a string, given the arguments:\n\n- `val` which “passed the test”\n- current `printer(valChild)` callback function: serialize children\n- current `indenter(lines)` callback function: indent lines at the next level\n- unchanging `config` object: derived from `options`\n- unchanging `colors` object: derived from `options`\n\nThe 3 properties of `config` are `min` in `options` and:\n\n- `spacing` and `edgeSpacing` are **newline** if `min` is `false`\n- `spacing` is **space** and `edgeSpacing` is **empty string** if `min` is `true`\n\nEach property of `colors` corresponds to a property of `theme` in `options`:\n\n- the key is the same (for example, `tag`)\n- the value in `colors` is a object with `open` and `close` properties whose values are escape codes from [ansi-styles](https://github.com/chalk/ansi-styles) for the color value in `theme` (for example, `'cyan'`)\n\n### Example of print and test\n\nThis plugin prints functions with the **number of named arguments** excluding rest argument.\n\n```js\nconst plugin = {\n print(val) {\n return `[Function ${val.name || 'anonymous'} ${val.length}]`;\n },\n test(val) {\n return typeof val === 'function';\n },\n};\n```\n\n```js\nconst val = {\n onClick(event) {},\n render() {},\n};\n\nprettyFormat(val, {\n plugins: [plugin],\n});\n/*\nObject {\n \"onClick\": [Function onClick 1],\n \"render\": [Function render 0],\n}\n*/\n\nprettyFormat(val);\n/*\nObject {\n \"onClick\": [Function onClick],\n \"render\": [Function render],\n}\n*/\n```\n\nThis plugin **ignores** the `printFunctionName` option. That limitation of the original `print` interface is a reason to use the improved `serialize` interface, described above.\n\n```js\nprettyFormat(val, {\n plugins: [pluginOld],\n printFunctionName: false,\n});\n/*\nObject {\n \"onClick\": [Function onClick 1],\n \"render\": [Function render 0],\n}\n*/\n\nprettyFormat(val, {\n printFunctionName: false,\n});\n/*\nObject {\n \"onClick\": [Function],\n \"render\": [Function],\n}\n*/\n```\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/facebook/jest/issues"},"homepage":"https://github.com/facebook/jest#readme","_id":"pretty-format@27.0.0-next.9","_nodeVersion":"14.16.1","_npmVersion":"lerna/4.0.0/node@v14.16.1+x64 (darwin)","dist":{"integrity":"sha512-BF2889sl/4yxeInR4tYnJQu6IOKNjZdujqcLaMoQUd1G9CykEBrpCuT6a86Q8iKXyaJMq2MMCfTPHe4TjAwbhA==","shasum":"37272be62520236a17e77038d1c9dd15a6e695ad","tarball":"http://localhost:4545/npm/registry/pretty-format/pretty-format-27.0.0-next.9.tgz","fileCount":27,"unpackedSize":67450,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgkOi+CRA9TVsSAnZWagAAtK4QAIBag7buja3q27EHTTF+\nHvPnpuS3QabuJL41hNlGpdWAFSnIWfOx6OptT1qzMy91XSBoROz72hN6bEpi\nWSxgFuvfwmnRndgoqafBTN09LCa8SikRq6z809/mhE/RgDc9F3UWmW4VSxBA\nqRunHCN3iTysZSl3PEgm+hU6RopXlKiWv9qmv2sk3z2CQw7hD/EG35ROdQuD\nZAEQDBkKXs3OSR2bjPsZGWtcFH/5Z3xBm4vu7aL87jRb/v/ywvPZqe6UEW9t\neIEKxC0PqqItD4DjPQOAJ33HLihbZ1wHImIgMFKgw7vXg9BEtPgKkhT3damG\notJZdazOxFRoqsSC8RH4/mT4i+f7yMdO2NPzyJol1D5BANjJ1sttqyRKNooA\nue/pfNQqopser97okFBYg4NVj4h1gzzSXtnyzQZGwIbVCTiE778CTPdc392x\nTebpJ6jfndb+6Qg2nLIsgxNlFRZa7+adKlae7L9ohpgNwjuxBDconqSzrJIq\nGOsH3X2Jpc8Z3bW6V57UX4QX5ZVmxHe34cVRGLYO0luGBaqCNYp1b7uKSpWH\nuiwJPXltL3v5RzkiQaQfUa3GuzrMAcUP07uET4UJ++bVJ22f+O1K3Ukxs+D/\nvf+Uw/ytIqpU596xlYMa9Yc/3odu0qgDJ9b+/zsOm7bgyBi/DrSULKDfpZr4\n9P+v\r\n=CDYs\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD4cC93vGRj+HgsqtQdqkSnbXCeBnFVZsOSv7+7UPYaEQIgFJKEPVL0m4Nv/UHzo89PSF0dsXtldheI31UlfK37u2o="}]},"_npmUser":{"name":"simenb","email":"sbekkhus91@gmail.com"},"directories":{},"maintainers":[{"name":"scotthovestadt","email":"scott.hovestadt@gmail.com"},{"name":"rubennorte","email":"rubennorte@gmail.com"},{"name":"simenb","email":"sbekkhus91@gmail.com"},{"name":"fb","email":"opensource+npm@fb.com"},{"name":"aaronabramov","email":"aaron@abramov.io"},{"name":"davidzilburg","email":"davidzilburg@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pretty-format_27.0.0-next.9_1620109501875_0.5944508303070835"},"_hasShrinkwrap":false},"27.0.0-next.10":{"name":"pretty-format","version":"27.0.0-next.10","repository":{"type":"git","url":"git+https://github.com/facebook/jest.git","directory":"packages/pretty-format"},"license":"MIT","description":"Stringify any JavaScript value.","main":"./build/index.js","types":"./build/index.d.ts","exports":{".":"./build/index.js","./package.json":"./package.json"},"author":{"name":"James Kyle","email":"me@thejameskyle.com"},"dependencies":{"@jest/types":"^27.0.0-next.10","ansi-regex":"^5.0.0","ansi-styles":"^5.0.0","react-is":"^17.0.1"},"devDependencies":{"@types/react":"*","@types/react-is":"^17.0.0","@types/react-test-renderer":"*","immutable":"4.0.0-rc.9","jest-util":"^27.0.0-next.10","react":"*","react-dom":"*","react-test-renderer":"*"},"engines":{"node":"^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"},"publishConfig":{"access":"public"},"gitHead":"6f44529270310b7dbdf9a0b72b21b5cd50fda4b1","readme":"# pretty-format\n\nStringify any JavaScript value.\n\n- Serialize built-in JavaScript types.\n- Serialize application-specific data types with built-in or user-defined plugins.\n\n## Installation\n\n```sh\n$ yarn add pretty-format\n```\n\n## Usage\n\n```js\nconst {format: prettyFormat} = require('pretty-format'); // CommonJS\n```\n\n```js\nimport {format as prettyFormat} from 'pretty-format'; // ES2015 modules\n```\n\n```js\nconst val = {object: {}};\nval.circularReference = val;\nval[Symbol('foo')] = 'foo';\nval.map = new Map([['prop', 'value']]);\nval.array = [-0, Infinity, NaN];\n\nconsole.log(prettyFormat(val));\n/*\nObject {\n \"array\": Array [\n -0,\n Infinity,\n NaN,\n ],\n \"circularReference\": [Circular],\n \"map\": Map {\n \"prop\" => \"value\",\n },\n \"object\": Object {},\n Symbol(foo): \"foo\",\n}\n*/\n```\n\n## Usage with options\n\n```js\nfunction onClick() {}\n\nconsole.log(prettyFormat(onClick));\n/*\n[Function onClick]\n*/\n\nconst options = {\n printFunctionName: false,\n};\nconsole.log(prettyFormat(onClick, options));\n/*\n[Function]\n*/\n```\n\n\n| key | type | default | description |\n| :------------------ | :-------- | :--------- | :------------------------------------------------------ |\n| `callToJSON` | `boolean` | `true` | call `toJSON` method (if it exists) on objects |\n| `escapeRegex` | `boolean` | `false` | escape special characters in regular expressions |\n| `escapeString` | `boolean` | `true` | escape special characters in strings |\n| `highlight` | `boolean` | `false` | highlight syntax with colors in terminal (some plugins) |\n| `indent` | `number` | `2` | spaces in each level of indentation |\n| `maxDepth` | `number` | `Infinity` | levels to print in arrays, objects, elements, and so on |\n| `min` | `boolean` | `false` | minimize added space: no indentation nor line breaks |\n| `plugins` | `array` | `[]` | plugins to serialize application-specific data types |\n| `printFunctionName` | `boolean` | `true` | include or omit the name of a function |\n| `theme` | `object` | | colors to highlight syntax in terminal |\n\nProperty values of `theme` are from [ansi-styles colors](https://github.com/chalk/ansi-styles#colors)\n\n```js\nconst DEFAULT_THEME = {\n comment: 'gray',\n content: 'reset',\n prop: 'yellow',\n tag: 'cyan',\n value: 'green',\n};\n```\n\n## Usage with plugins\n\nThe `pretty-format` package provides some built-in plugins, including:\n\n- `ReactElement` for elements from `react`\n- `ReactTestComponent` for test objects from `react-test-renderer`\n\n```js\n// CommonJS\nconst React = require('react');\nconst renderer = require('react-test-renderer');\nconst {format: prettyFormat, plugins} = require('pretty-format');\n\nconst {ReactElement, ReactTestComponent} = plugins;\n```\n\n```js\n// ES2015 modules and destructuring assignment\nimport React from 'react';\nimport renderer from 'react-test-renderer';\nimport {plugins, format as prettyFormat} from 'pretty-format';\n\nconst {ReactElement, ReactTestComponent} = plugins;\n```\n\n```js\nconst onClick = () => {};\nconst element = React.createElement('button', {onClick}, 'Hello World');\n\nconst formatted1 = prettyFormat(element, {\n plugins: [ReactElement],\n printFunctionName: false,\n});\nconst formatted2 = prettyFormat(renderer.create(element).toJSON(), {\n plugins: [ReactTestComponent],\n printFunctionName: false,\n});\n/*\n\n*/\n```\n\n## Usage in Jest\n\nFor snapshot tests, Jest uses `pretty-format` with options that include some of its built-in plugins. For this purpose, plugins are also known as **snapshot serializers**.\n\nTo serialize application-specific data types, you can add modules to `devDependencies` of a project, and then:\n\nIn an **individual** test file, you can add a module as follows. It precedes any modules from Jest configuration.\n\n```js\nimport serializer from 'my-serializer-module';\nexpect.addSnapshotSerializer(serializer);\n\n// tests which have `expect(value).toMatchSnapshot()` assertions\n```\n\nFor **all** test files, you can specify modules in Jest configuration. They precede built-in plugins for React, HTML, and Immutable.js data types. For example, in a `package.json` file:\n\n```json\n{\n \"jest\": {\n \"snapshotSerializers\": [\"my-serializer-module\"]\n }\n}\n```\n\n## Writing plugins\n\nA plugin is a JavaScript object.\n\nIf `options` has a `plugins` array: for the first plugin whose `test(val)` method returns a truthy value, then `prettyFormat(val, options)` returns the result from either:\n\n- `serialize(val, …)` method of the **improved** interface (available in **version 21** or later)\n- `print(val, …)` method of the **original** interface (if plugin does not have `serialize` method)\n\n### test\n\nWrite `test` so it can receive `val` argument of any type. To serialize **objects** which have certain properties, then a guarded expression like `val != null && …` or more concise `val && …` prevents the following errors:\n\n- `TypeError: Cannot read property 'whatever' of null`\n- `TypeError: Cannot read property 'whatever' of undefined`\n\nFor example, `test` method of built-in `ReactElement` plugin:\n\n```js\nconst elementSymbol = Symbol.for('react.element');\nconst test = val => val && val.$$typeof === elementSymbol;\n```\n\nPay attention to efficiency in `test` because `pretty-format` calls it often.\n\n### serialize\n\nThe **improved** interface is available in **version 21** or later.\n\nWrite `serialize` to return a string, given the arguments:\n\n- `val` which “passed the test”\n- unchanging `config` object: derived from `options`\n- current `indentation` string: concatenate to `indent` from `config`\n- current `depth` number: compare to `maxDepth` from `config`\n- current `refs` array: find circular references in objects\n- `printer` callback function: serialize children\n\n### config\n\n\n| key | type | description |\n| :------------------ | :-------- | :------------------------------------------------------ |\n| `callToJSON` | `boolean` | call `toJSON` method (if it exists) on objects |\n| `colors` | `Object` | escape codes for colors to highlight syntax |\n| `escapeRegex` | `boolean` | escape special characters in regular expressions |\n| `escapeString` | `boolean` | escape special characters in strings |\n| `indent` | `string` | spaces in each level of indentation |\n| `maxDepth` | `number` | levels to print in arrays, objects, elements, and so on |\n| `min` | `boolean` | minimize added space: no indentation nor line breaks |\n| `plugins` | `array` | plugins to serialize application-specific data types |\n| `printFunctionName` | `boolean` | include or omit the name of a function |\n| `spacingInner` | `strong` | spacing to separate items in a list |\n| `spacingOuter` | `strong` | spacing to enclose a list of items |\n\nEach property of `colors` in `config` corresponds to a property of `theme` in `options`:\n\n- the key is the same (for example, `tag`)\n- the value in `colors` is a object with `open` and `close` properties whose values are escape codes from [ansi-styles](https://github.com/chalk/ansi-styles) for the color value in `theme` (for example, `'cyan'`)\n\nSome properties in `config` are derived from `min` in `options`:\n\n- `spacingInner` and `spacingOuter` are **newline** if `min` is `false`\n- `spacingInner` is **space** and `spacingOuter` is **empty string** if `min` is `true`\n\n### Example of serialize and test\n\nThis plugin is a pattern you can apply to serialize composite data types. Side note: `pretty-format` does not need a plugin to serialize arrays.\n\n```js\n// We reused more code when we factored out a function for child items\n// that is independent of depth, name, and enclosing punctuation (see below).\nconst SEPARATOR = ',';\nfunction serializeItems(items, config, indentation, depth, refs, printer) {\n if (items.length === 0) {\n return '';\n }\n const indentationItems = indentation + config.indent;\n return (\n config.spacingOuter +\n items\n .map(\n item =>\n indentationItems +\n printer(item, config, indentationItems, depth, refs), // callback\n )\n .join(SEPARATOR + config.spacingInner) +\n (config.min ? '' : SEPARATOR) + // following the last item\n config.spacingOuter +\n indentation\n );\n}\n\nconst plugin = {\n test(val) {\n return Array.isArray(val);\n },\n serialize(array, config, indentation, depth, refs, printer) {\n const name = array.constructor.name;\n return ++depth > config.maxDepth\n ? '[' + name + ']'\n : (config.min ? '' : name + ' ') +\n '[' +\n serializeItems(array, config, indentation, depth, refs, printer) +\n ']';\n },\n};\n```\n\n```js\nconst val = {\n filter: 'completed',\n items: [\n {\n text: 'Write test',\n completed: true,\n },\n {\n text: 'Write serialize',\n completed: true,\n },\n ],\n};\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n plugins: [plugin],\n }),\n);\n/*\nObject {\n \"filter\": \"completed\",\n \"items\": Array [\n Object {\n \"completed\": true,\n \"text\": \"Write test\",\n },\n Object {\n \"completed\": true,\n \"text\": \"Write serialize\",\n },\n ],\n}\n*/\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n indent: 4,\n plugins: [plugin],\n }),\n);\n/*\nObject {\n \"filter\": \"completed\",\n \"items\": Array [\n Object {\n \"completed\": true,\n \"text\": \"Write test\",\n },\n Object {\n \"completed\": true,\n \"text\": \"Write serialize\",\n },\n ],\n}\n*/\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n maxDepth: 1,\n plugins: [plugin],\n }),\n);\n/*\nObject {\n \"filter\": \"completed\",\n \"items\": [Array],\n}\n*/\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n min: true,\n plugins: [plugin],\n }),\n);\n/*\n{\"filter\": \"completed\", \"items\": [{\"completed\": true, \"text\": \"Write test\"}, {\"completed\": true, \"text\": \"Write serialize\"}]}\n*/\n```\n\n### print\n\nThe **original** interface is adequate for plugins:\n\n- that **do not** depend on options other than `highlight` or `min`\n- that **do not** depend on `depth` or `refs` in recursive traversal, and\n- if values either\n - do **not** require indentation, or\n - do **not** occur as children of JavaScript data structures (for example, array)\n\nWrite `print` to return a string, given the arguments:\n\n- `val` which “passed the test”\n- current `printer(valChild)` callback function: serialize children\n- current `indenter(lines)` callback function: indent lines at the next level\n- unchanging `config` object: derived from `options`\n- unchanging `colors` object: derived from `options`\n\nThe 3 properties of `config` are `min` in `options` and:\n\n- `spacing` and `edgeSpacing` are **newline** if `min` is `false`\n- `spacing` is **space** and `edgeSpacing` is **empty string** if `min` is `true`\n\nEach property of `colors` corresponds to a property of `theme` in `options`:\n\n- the key is the same (for example, `tag`)\n- the value in `colors` is a object with `open` and `close` properties whose values are escape codes from [ansi-styles](https://github.com/chalk/ansi-styles) for the color value in `theme` (for example, `'cyan'`)\n\n### Example of print and test\n\nThis plugin prints functions with the **number of named arguments** excluding rest argument.\n\n```js\nconst plugin = {\n print(val) {\n return `[Function ${val.name || 'anonymous'} ${val.length}]`;\n },\n test(val) {\n return typeof val === 'function';\n },\n};\n```\n\n```js\nconst val = {\n onClick(event) {},\n render() {},\n};\n\nprettyFormat(val, {\n plugins: [plugin],\n});\n/*\nObject {\n \"onClick\": [Function onClick 1],\n \"render\": [Function render 0],\n}\n*/\n\nprettyFormat(val);\n/*\nObject {\n \"onClick\": [Function onClick],\n \"render\": [Function render],\n}\n*/\n```\n\nThis plugin **ignores** the `printFunctionName` option. That limitation of the original `print` interface is a reason to use the improved `serialize` interface, described above.\n\n```js\nprettyFormat(val, {\n plugins: [pluginOld],\n printFunctionName: false,\n});\n/*\nObject {\n \"onClick\": [Function onClick 1],\n \"render\": [Function render 0],\n}\n*/\n\nprettyFormat(val, {\n printFunctionName: false,\n});\n/*\nObject {\n \"onClick\": [Function],\n \"render\": [Function],\n}\n*/\n```\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/facebook/jest/issues"},"homepage":"https://github.com/facebook/jest#readme","_id":"pretty-format@27.0.0-next.10","_nodeVersion":"14.17.0","_npmVersion":"lerna/4.0.0/node@v14.17.0+x64 (darwin)","dist":{"integrity":"sha512-UejTifPqN0YWSvpKT04dQ9DOyR8XhPezPGEyz0LU61q2T/rUhOc36d7yFrmko4Q902gO2cTy6CktlyWd9+H+2A==","shasum":"401893221e71a1f944fbfbca97a94437a1719a15","tarball":"http://localhost:4545/npm/registry/pretty-format/pretty-format-27.0.0-next.10.tgz","fileCount":27,"unpackedSize":67653,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgpm4ECRA9TVsSAnZWagAApX4QAKJP5jpzwAWri7v2qj2u\n5K2RxIfsNkUpd+iBuGzifgnuOnqzSULSqqBeBSAvgxM/8wTEgr+eA2QKS3O5\n/KEE07EAZ4lrnkZG0+z+alBRpw1rAC1vaHX5BsbVpB4I9dt2X7zAUM+4civM\nqJsSR42Hnfx+kQZAa08Dmt227yuj9JZMU9WNTaqzoMSIXQLsaE9erK7Otbyg\nAoAD4LcBNNIQxdk0Ypd49xOEpe72lZ5yHmGIk+yhB4rvQPjbhNOavlQbUzoz\nJ74mR1SoF27F9eHhjjleJ+p2EGk0hk3FC53t+wmNRytXH7abKyMizH7+r7SP\nps+npboGM6h8C4kb3Ki5AOJV7G0k5jWHaH+uyqt88gZOzB2GS1CP+0tg6Dva\nB52cfvMinmKiEiV6L+EiVaDoTOuVgMq2looraRjzgfc+/cTYnhvVQbXkX26N\nORfbMB3+KEn32B1BB/tkFcDJOgd2pYzl7I48WT+IAi7n1TtmzIteGCis9GEA\nlIOuOpnA7rV/CHyxXP5gK4jBY/Kp/sVu0Npa9b83yChIXS/zEHpMguxnytU8\nVNe8LB38UUP7nfJULRP4TUUmZZYH52/1z0if3Vm/tdxfwAQIeOG5Ro3xHaXD\n/frVMu6M8B2y0ttQH+JuLgyFx7fluPGfNQbUpnRyEVbZ2wYmpq6MI/8P1p7U\nxwDO\r\n=2f8n\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIADyh6iH0aO5vfZBpAQ6wXSpC+AfHUOy9z3tYvsSfnUWAiBeE30vX0ZvZuFJGY+3xFZ+Wp4YtF2CyJGXR/oF0ZbM6Q=="}]},"_npmUser":{"name":"simenb","email":"sbekkhus91@gmail.com"},"directories":{},"maintainers":[{"name":"scotthovestadt","email":"scott.hovestadt@gmail.com"},{"name":"rubennorte","email":"rubennorte@gmail.com"},{"name":"simenb","email":"sbekkhus91@gmail.com"},{"name":"fb","email":"opensource+npm@fb.com"},{"name":"aaronabramov","email":"aaron@abramov.io"},{"name":"davidzilburg","email":"davidzilburg@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pretty-format_27.0.0-next.10_1621519876460_0.9198787476049779"},"_hasShrinkwrap":false},"27.0.0-next.11":{"name":"pretty-format","version":"27.0.0-next.11","repository":{"type":"git","url":"git+https://github.com/facebook/jest.git","directory":"packages/pretty-format"},"license":"MIT","description":"Stringify any JavaScript value.","main":"./build/index.js","types":"./build/index.d.ts","exports":{".":"./build/index.js","./package.json":"./package.json"},"author":{"name":"James Kyle","email":"me@thejameskyle.com"},"dependencies":{"@jest/types":"^27.0.0-next.10","ansi-regex":"^5.0.0","ansi-styles":"^5.0.0","react-is":"^17.0.1"},"devDependencies":{"@types/react":"*","@types/react-is":"^17.0.0","@types/react-test-renderer":"*","immutable":"4.0.0-rc.9","jest-util":"^27.0.0-next.11","react":"*","react-dom":"*","react-test-renderer":"*"},"engines":{"node":"^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"},"publishConfig":{"access":"public"},"gitHead":"e2eb9aeee8aacd441f1c8ac992c698ac4d303f60","readme":"# pretty-format\n\nStringify any JavaScript value.\n\n- Serialize built-in JavaScript types.\n- Serialize application-specific data types with built-in or user-defined plugins.\n\n## Installation\n\n```sh\n$ yarn add pretty-format\n```\n\n## Usage\n\n```js\nconst {format: prettyFormat} = require('pretty-format'); // CommonJS\n```\n\n```js\nimport {format as prettyFormat} from 'pretty-format'; // ES2015 modules\n```\n\n```js\nconst val = {object: {}};\nval.circularReference = val;\nval[Symbol('foo')] = 'foo';\nval.map = new Map([['prop', 'value']]);\nval.array = [-0, Infinity, NaN];\n\nconsole.log(prettyFormat(val));\n/*\nObject {\n \"array\": Array [\n -0,\n Infinity,\n NaN,\n ],\n \"circularReference\": [Circular],\n \"map\": Map {\n \"prop\" => \"value\",\n },\n \"object\": Object {},\n Symbol(foo): \"foo\",\n}\n*/\n```\n\n## Usage with options\n\n```js\nfunction onClick() {}\n\nconsole.log(prettyFormat(onClick));\n/*\n[Function onClick]\n*/\n\nconst options = {\n printFunctionName: false,\n};\nconsole.log(prettyFormat(onClick, options));\n/*\n[Function]\n*/\n```\n\n\n| key | type | default | description |\n| :------------------ | :-------- | :--------- | :------------------------------------------------------ |\n| `callToJSON` | `boolean` | `true` | call `toJSON` method (if it exists) on objects |\n| `escapeRegex` | `boolean` | `false` | escape special characters in regular expressions |\n| `escapeString` | `boolean` | `true` | escape special characters in strings |\n| `highlight` | `boolean` | `false` | highlight syntax with colors in terminal (some plugins) |\n| `indent` | `number` | `2` | spaces in each level of indentation |\n| `maxDepth` | `number` | `Infinity` | levels to print in arrays, objects, elements, and so on |\n| `min` | `boolean` | `false` | minimize added space: no indentation nor line breaks |\n| `plugins` | `array` | `[]` | plugins to serialize application-specific data types |\n| `printFunctionName` | `boolean` | `true` | include or omit the name of a function |\n| `theme` | `object` | | colors to highlight syntax in terminal |\n\nProperty values of `theme` are from [ansi-styles colors](https://github.com/chalk/ansi-styles#colors)\n\n```js\nconst DEFAULT_THEME = {\n comment: 'gray',\n content: 'reset',\n prop: 'yellow',\n tag: 'cyan',\n value: 'green',\n};\n```\n\n## Usage with plugins\n\nThe `pretty-format` package provides some built-in plugins, including:\n\n- `ReactElement` for elements from `react`\n- `ReactTestComponent` for test objects from `react-test-renderer`\n\n```js\n// CommonJS\nconst React = require('react');\nconst renderer = require('react-test-renderer');\nconst {format: prettyFormat, plugins} = require('pretty-format');\n\nconst {ReactElement, ReactTestComponent} = plugins;\n```\n\n```js\n// ES2015 modules and destructuring assignment\nimport React from 'react';\nimport renderer from 'react-test-renderer';\nimport {plugins, format as prettyFormat} from 'pretty-format';\n\nconst {ReactElement, ReactTestComponent} = plugins;\n```\n\n```js\nconst onClick = () => {};\nconst element = React.createElement('button', {onClick}, 'Hello World');\n\nconst formatted1 = prettyFormat(element, {\n plugins: [ReactElement],\n printFunctionName: false,\n});\nconst formatted2 = prettyFormat(renderer.create(element).toJSON(), {\n plugins: [ReactTestComponent],\n printFunctionName: false,\n});\n/*\n\n*/\n```\n\n## Usage in Jest\n\nFor snapshot tests, Jest uses `pretty-format` with options that include some of its built-in plugins. For this purpose, plugins are also known as **snapshot serializers**.\n\nTo serialize application-specific data types, you can add modules to `devDependencies` of a project, and then:\n\nIn an **individual** test file, you can add a module as follows. It precedes any modules from Jest configuration.\n\n```js\nimport serializer from 'my-serializer-module';\nexpect.addSnapshotSerializer(serializer);\n\n// tests which have `expect(value).toMatchSnapshot()` assertions\n```\n\nFor **all** test files, you can specify modules in Jest configuration. They precede built-in plugins for React, HTML, and Immutable.js data types. For example, in a `package.json` file:\n\n```json\n{\n \"jest\": {\n \"snapshotSerializers\": [\"my-serializer-module\"]\n }\n}\n```\n\n## Writing plugins\n\nA plugin is a JavaScript object.\n\nIf `options` has a `plugins` array: for the first plugin whose `test(val)` method returns a truthy value, then `prettyFormat(val, options)` returns the result from either:\n\n- `serialize(val, …)` method of the **improved** interface (available in **version 21** or later)\n- `print(val, …)` method of the **original** interface (if plugin does not have `serialize` method)\n\n### test\n\nWrite `test` so it can receive `val` argument of any type. To serialize **objects** which have certain properties, then a guarded expression like `val != null && …` or more concise `val && …` prevents the following errors:\n\n- `TypeError: Cannot read property 'whatever' of null`\n- `TypeError: Cannot read property 'whatever' of undefined`\n\nFor example, `test` method of built-in `ReactElement` plugin:\n\n```js\nconst elementSymbol = Symbol.for('react.element');\nconst test = val => val && val.$$typeof === elementSymbol;\n```\n\nPay attention to efficiency in `test` because `pretty-format` calls it often.\n\n### serialize\n\nThe **improved** interface is available in **version 21** or later.\n\nWrite `serialize` to return a string, given the arguments:\n\n- `val` which “passed the test”\n- unchanging `config` object: derived from `options`\n- current `indentation` string: concatenate to `indent` from `config`\n- current `depth` number: compare to `maxDepth` from `config`\n- current `refs` array: find circular references in objects\n- `printer` callback function: serialize children\n\n### config\n\n\n| key | type | description |\n| :------------------ | :-------- | :------------------------------------------------------ |\n| `callToJSON` | `boolean` | call `toJSON` method (if it exists) on objects |\n| `colors` | `Object` | escape codes for colors to highlight syntax |\n| `escapeRegex` | `boolean` | escape special characters in regular expressions |\n| `escapeString` | `boolean` | escape special characters in strings |\n| `indent` | `string` | spaces in each level of indentation |\n| `maxDepth` | `number` | levels to print in arrays, objects, elements, and so on |\n| `min` | `boolean` | minimize added space: no indentation nor line breaks |\n| `plugins` | `array` | plugins to serialize application-specific data types |\n| `printFunctionName` | `boolean` | include or omit the name of a function |\n| `spacingInner` | `strong` | spacing to separate items in a list |\n| `spacingOuter` | `strong` | spacing to enclose a list of items |\n\nEach property of `colors` in `config` corresponds to a property of `theme` in `options`:\n\n- the key is the same (for example, `tag`)\n- the value in `colors` is a object with `open` and `close` properties whose values are escape codes from [ansi-styles](https://github.com/chalk/ansi-styles) for the color value in `theme` (for example, `'cyan'`)\n\nSome properties in `config` are derived from `min` in `options`:\n\n- `spacingInner` and `spacingOuter` are **newline** if `min` is `false`\n- `spacingInner` is **space** and `spacingOuter` is **empty string** if `min` is `true`\n\n### Example of serialize and test\n\nThis plugin is a pattern you can apply to serialize composite data types. Side note: `pretty-format` does not need a plugin to serialize arrays.\n\n```js\n// We reused more code when we factored out a function for child items\n// that is independent of depth, name, and enclosing punctuation (see below).\nconst SEPARATOR = ',';\nfunction serializeItems(items, config, indentation, depth, refs, printer) {\n if (items.length === 0) {\n return '';\n }\n const indentationItems = indentation + config.indent;\n return (\n config.spacingOuter +\n items\n .map(\n item =>\n indentationItems +\n printer(item, config, indentationItems, depth, refs), // callback\n )\n .join(SEPARATOR + config.spacingInner) +\n (config.min ? '' : SEPARATOR) + // following the last item\n config.spacingOuter +\n indentation\n );\n}\n\nconst plugin = {\n test(val) {\n return Array.isArray(val);\n },\n serialize(array, config, indentation, depth, refs, printer) {\n const name = array.constructor.name;\n return ++depth > config.maxDepth\n ? '[' + name + ']'\n : (config.min ? '' : name + ' ') +\n '[' +\n serializeItems(array, config, indentation, depth, refs, printer) +\n ']';\n },\n};\n```\n\n```js\nconst val = {\n filter: 'completed',\n items: [\n {\n text: 'Write test',\n completed: true,\n },\n {\n text: 'Write serialize',\n completed: true,\n },\n ],\n};\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n plugins: [plugin],\n }),\n);\n/*\nObject {\n \"filter\": \"completed\",\n \"items\": Array [\n Object {\n \"completed\": true,\n \"text\": \"Write test\",\n },\n Object {\n \"completed\": true,\n \"text\": \"Write serialize\",\n },\n ],\n}\n*/\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n indent: 4,\n plugins: [plugin],\n }),\n);\n/*\nObject {\n \"filter\": \"completed\",\n \"items\": Array [\n Object {\n \"completed\": true,\n \"text\": \"Write test\",\n },\n Object {\n \"completed\": true,\n \"text\": \"Write serialize\",\n },\n ],\n}\n*/\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n maxDepth: 1,\n plugins: [plugin],\n }),\n);\n/*\nObject {\n \"filter\": \"completed\",\n \"items\": [Array],\n}\n*/\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n min: true,\n plugins: [plugin],\n }),\n);\n/*\n{\"filter\": \"completed\", \"items\": [{\"completed\": true, \"text\": \"Write test\"}, {\"completed\": true, \"text\": \"Write serialize\"}]}\n*/\n```\n\n### print\n\nThe **original** interface is adequate for plugins:\n\n- that **do not** depend on options other than `highlight` or `min`\n- that **do not** depend on `depth` or `refs` in recursive traversal, and\n- if values either\n - do **not** require indentation, or\n - do **not** occur as children of JavaScript data structures (for example, array)\n\nWrite `print` to return a string, given the arguments:\n\n- `val` which “passed the test”\n- current `printer(valChild)` callback function: serialize children\n- current `indenter(lines)` callback function: indent lines at the next level\n- unchanging `config` object: derived from `options`\n- unchanging `colors` object: derived from `options`\n\nThe 3 properties of `config` are `min` in `options` and:\n\n- `spacing` and `edgeSpacing` are **newline** if `min` is `false`\n- `spacing` is **space** and `edgeSpacing` is **empty string** if `min` is `true`\n\nEach property of `colors` corresponds to a property of `theme` in `options`:\n\n- the key is the same (for example, `tag`)\n- the value in `colors` is a object with `open` and `close` properties whose values are escape codes from [ansi-styles](https://github.com/chalk/ansi-styles) for the color value in `theme` (for example, `'cyan'`)\n\n### Example of print and test\n\nThis plugin prints functions with the **number of named arguments** excluding rest argument.\n\n```js\nconst plugin = {\n print(val) {\n return `[Function ${val.name || 'anonymous'} ${val.length}]`;\n },\n test(val) {\n return typeof val === 'function';\n },\n};\n```\n\n```js\nconst val = {\n onClick(event) {},\n render() {},\n};\n\nprettyFormat(val, {\n plugins: [plugin],\n});\n/*\nObject {\n \"onClick\": [Function onClick 1],\n \"render\": [Function render 0],\n}\n*/\n\nprettyFormat(val);\n/*\nObject {\n \"onClick\": [Function onClick],\n \"render\": [Function render],\n}\n*/\n```\n\nThis plugin **ignores** the `printFunctionName` option. That limitation of the original `print` interface is a reason to use the improved `serialize` interface, described above.\n\n```js\nprettyFormat(val, {\n plugins: [pluginOld],\n printFunctionName: false,\n});\n/*\nObject {\n \"onClick\": [Function onClick 1],\n \"render\": [Function render 0],\n}\n*/\n\nprettyFormat(val, {\n printFunctionName: false,\n});\n/*\nObject {\n \"onClick\": [Function],\n \"render\": [Function],\n}\n*/\n```\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/facebook/jest/issues"},"homepage":"https://github.com/facebook/jest#readme","_id":"pretty-format@27.0.0-next.11","_nodeVersion":"14.17.0","_npmVersion":"lerna/4.0.0/node@v14.17.0+x64 (darwin)","dist":{"integrity":"sha512-jfm9IO7NFT9W7omxxQ0NEBaax94YqXBurPZUPOR4jj21SFB5eNSNEFZubotcgB6ha2oOkP2rPwmJFO+DF1g9+w==","shasum":"5badcab597ad026fbcfea6d2b6ac7f61afb5e88b","tarball":"http://localhost:4545/npm/registry/pretty-format/pretty-format-27.0.0-next.11.tgz","fileCount":27,"unpackedSize":67653,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgpuKaCRA9TVsSAnZWagAAb2YP/1XuX2NnvSk1VdW4yGyX\nhcDhyP3RV3phWp+mz2KGVSWQuJ5CYAlmc+0FuKoiqpjEvHk1bNJvV5Rj4wX2\n3LPpus/Ohe+dwg3Eb2CTWasXohJ/GujMonBw1yugKlG5O1PIYmxlPc905v0Z\n6k4Czpx0CrPJtJhRrlnLfnYD0NIIQkRJwW0zqYaH5rflzS/1ZeB8SG/BCI9u\nL7DExystGhWBAe/zbV3uKFQD6Fu05GlxExHnFoe7IBX+UrbAt6WQJT3nBQbp\nGcyOHT448ikCTBYFy7FkOccZEOdhlU6hVj7QU9KzcV5O8lWtp+mE6W2Bl0ih\ncYyi1x5MxoZIRdCkoVT8sAlKFtF/iQGNzstf4z7bYjbKrjzg42f2aGFsIhKd\nXn9WLFQZKFTYaNo1lDCYHRXUO3DkfJ7RMyL7mx/B+VlGwBxS2SSML/jLHdSL\nUZxoFaLUKj8uMW2tesyxXtO+E5aCixgBGL/3sHeaMP2OD9m7fLc0p92SlrNJ\nGslPwrELD+VCX+VhGQhcM7FScw8EO96L32TXDyQtY67/E0gFBWmaxOQtX0HV\nB8P+k4iqBI4qI4c1Z15hTH9h6eqChJXCowwfqz8dlVNRd/rm2E2DeLMlssww\nHp0xn8C9zKz5AtzZq/PYD5Cb6UVNl3ItvXuSI5hONq8p5PKmXSyYgqxDStGq\ninOF\r\n=mgVr\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICuU7VLWQ76Mwo3pWJViGfymq5pkhw1JLekd3YK42zB5AiEAzI76y8h4vv/xnkRGmxnfnC8XYBhRv8tWrtAS84capu0="}]},"_npmUser":{"name":"simenb","email":"sbekkhus91@gmail.com"},"directories":{},"maintainers":[{"name":"scotthovestadt","email":"scott.hovestadt@gmail.com"},{"name":"rubennorte","email":"rubennorte@gmail.com"},{"name":"simenb","email":"sbekkhus91@gmail.com"},{"name":"fb","email":"opensource+npm@fb.com"},{"name":"aaronabramov","email":"aaron@abramov.io"},{"name":"davidzilburg","email":"davidzilburg@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pretty-format_27.0.0-next.11_1621549722252_0.765175572961817"},"_hasShrinkwrap":false},"27.0.0":{"name":"pretty-format","version":"27.0.0","repository":{"type":"git","url":"git+https://github.com/facebook/jest.git","directory":"packages/pretty-format"},"license":"MIT","description":"Stringify any JavaScript value.","main":"./build/index.js","types":"./build/index.d.ts","exports":{".":"./build/index.js","./package.json":"./package.json"},"author":{"name":"James Kyle","email":"me@thejameskyle.com"},"dependencies":{"@jest/types":"^27.0.0-next.10","ansi-regex":"^5.0.0","ansi-styles":"^5.0.0","react-is":"^17.0.1"},"devDependencies":{"@types/react":"*","@types/react-is":"^17.0.0","@types/react-test-renderer":"*","immutable":"4.0.0-rc.9","jest-util":"^27.0.0-next.11","react":"*","react-dom":"*","react-test-renderer":"*"},"engines":{"node":"^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"},"publishConfig":{"access":"public"},"gitHead":"be16e47afcc9f64653b9a47782cb48a5ca243e65","bugs":{"url":"https://github.com/facebook/jest/issues"},"homepage":"https://github.com/facebook/jest#readme","_id":"pretty-format@27.0.0","_nodeVersion":"14.17.0","_npmVersion":"lerna/4.0.0/node@v14.17.0+x64 (darwin)","dist":{"integrity":"sha512-iqiGgQH6090aZg6B60zIi6aUkXyRhsy5u3DfMduTsRJgj5wKMg27fGhosmAjEZCqR7NAXOhdWPskJxnx3psTug==","shasum":"df5389b8e3064b5b41f55f156bd125b7e55cbe64","tarball":"http://localhost:4545/npm/registry/pretty-format/pretty-format-27.0.0.tgz","fileCount":27,"unpackedSize":68500,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgrLIICRA9TVsSAnZWagAAiuwP/iiyMquKBtqBfvWYywFn\nQJVKJBMOwLaXFjpq+eGzEuAOVpiFpQmPtpoUsprMTnYEG8MXGJi0j79/T91x\nK+Q6/ok16lEeqp6u04uY8Ncx8eiOj+losAovD74mXle29LcFCuTbh9P2f8FU\nWc4djVmw+9i3BEtTXlmGmmyFEUxqnQtcWguOjPfHXyDubymximCPbVlOobp2\n+wIpRYuw+61PgKyJXJwfOutsanWeKfRuMEh4VqjPogiXgBpaMIg1FYxb8HzM\nzOXaN6S2dzMaLpxDTwvSSQ+Tf9FyEoaM//x0JscgCeIugFitdcdJWx4PfVfu\n641NAkwBHG4TcY2qzWv3NB8vlwngyG5EJVExCh6dX1efdJXQpX5DT1A1Qxgo\nMhTS0uctwgzevwMIywcNAxrcioWDfHY5TqHKMcBn5TE1lgn4UKDqYmhawT71\nhXY+kp1CO1Y+7q9N/Uv0JEcMYxoabT02UaLATfsuJF8RYfJsQQ+/KKeYgxF8\n7mgD/xJ8VcPtX2JjmWc9Qag0jXNg8lnjIHf9/rlovvoQfyid9G9erpyFwEUN\nwamIf4mwNuZ4NEyFYMdCPdIhxi8u48ChNL0vFoNaWqLXCLY5XBsXyjw36btX\n4Knm/N6EPKOjasjcdf3a7cu+4LnFbjOqOXtw+DVp7kIZKvcEegJn39lXRAgl\ny21j\r\n=LTLz\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHbu9ofz0D8Rza0hhk2VvVf1teA6ZYanq3O2hGz2m9vGAiA3MHB7Aha17ysb1V4Aiv7JTNma9ZOa7aaPxDQihCrBQQ=="}]},"_npmUser":{"name":"simenb","email":"sbekkhus91@gmail.com"},"directories":{},"maintainers":[{"name":"scotthovestadt","email":"scott.hovestadt@gmail.com"},{"name":"rubennorte","email":"rubennorte@gmail.com"},{"name":"simenb","email":"sbekkhus91@gmail.com"},{"name":"fb","email":"opensource+npm@fb.com"},{"name":"aaronabramov","email":"aaron@abramov.io"},{"name":"davidzilburg","email":"davidzilburg@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pretty-format_27.0.0_1621930504103_0.04777645672754249"},"_hasShrinkwrap":false},"27.0.1":{"name":"pretty-format","version":"27.0.1","repository":{"type":"git","url":"git+https://github.com/facebook/jest.git","directory":"packages/pretty-format"},"license":"MIT","description":"Stringify any JavaScript value.","main":"./build/index.js","types":"./build/index.d.ts","exports":{".":"./build/index.js","./package.json":"./package.json"},"author":{"name":"James Kyle","email":"me@thejameskyle.com"},"dependencies":{"@jest/types":"^27.0.1","ansi-regex":"^5.0.0","ansi-styles":"^5.0.0","react-is":"^17.0.1"},"devDependencies":{"@types/react":"*","@types/react-is":"^17.0.0","@types/react-test-renderer":"*","immutable":"4.0.0-rc.9","jest-util":"^27.0.1","react":"*","react-dom":"*","react-test-renderer":"*"},"engines":{"node":"^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"},"publishConfig":{"access":"public"},"gitHead":"2cb20e945a26b2c9867b30b787e81f6317e59aa1","bugs":{"url":"https://github.com/facebook/jest/issues"},"homepage":"https://github.com/facebook/jest#readme","_id":"pretty-format@27.0.1","_nodeVersion":"14.17.0","_npmVersion":"lerna/4.0.0/node@v14.17.0+x64 (darwin)","dist":{"integrity":"sha512-qE+0J6c/gd+R6XTcQgPJMc5hMJNsxzSF5p8iZSbMZ7GQzYGlSLNkh2P80Wa2dbF4gEVUsJEgcrBY+1L2/j265w==","shasum":"c4094621dfbd3e8ab751964d1cf01edc6f88474d","tarball":"http://localhost:4545/npm/registry/pretty-format/pretty-format-27.0.1.tgz","fileCount":27,"unpackedSize":68484,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgrMwmCRA9TVsSAnZWagAAYu0P/0uStRMUIl7hSL5SyUid\nmxczAR/+GVIMeTQLeI7tMMJneK1gnWsVEqycMd0UJ0rsdfEvnuqPgGBtBr+h\nND7DgeYiPcjc6InkZg8capJtcDu0esvWMxtnrAQlwbgVteFrb+k8AgqkL8zX\n1t/McpIWGbzLtbsIIxBPeCX3+zdtRSqI6pV0H3Z/lugRV2TEer1YXsPtTMZK\nIGOqn2XkeRZAGycWCC7AtrVAbypVTjSgzC9z/RKLTi4uuKyYJVROswqhh6mb\nB3uM7LYgggHXJ45lXBlEuqfqrsWKpsnaHCjpGNKFgzu6PQ0iR/tqfQ918YM/\ncFngMhg8z3jnNoKIRD+PSTg0l1FT1IV6x4tlVpNk7/+RJ131Er+cz9PWTWPL\nZkUwkkC75g0HuDRRVNC/piI+NfEi/MdNTR2+SmdIbmSG82Isiokmoog2c1FN\nWWdRHf4wuB/SsKawBbXVuva13JWk7yHea73n/HL83lD2Du9e2kOLy57iUYfR\nfDNOmSoQI688U7Uwyqbga0nMfBf5c67uSMxsO6hJq/uSIi1ylZ32VI3CWsQO\nGd01WVWZmOCWG9mRFrW7oevUT7Lcc+IhPo6MaEvhbTp+mZjbzIudEWh6VfMJ\nKjG8asV5jqGhOK+NXDlCAu9z53D0ohISAlpX9AxTNNj9V6e87+gMBKx/OF/t\nBnqf\r\n=c0Up\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCj+UmXDqoOEEmPU7pr53Umw/2+S2WmARpmO/IJCNMptgIhAPdnW/SvLDoAODWZc3sNIrwdrC9XVGf4UkoDL3ZNhAgP"}]},"_npmUser":{"name":"simenb","email":"sbekkhus91@gmail.com"},"directories":{},"maintainers":[{"name":"scotthovestadt","email":"scott.hovestadt@gmail.com"},{"name":"rubennorte","email":"rubennorte@gmail.com"},{"name":"simenb","email":"sbekkhus91@gmail.com"},{"name":"fb","email":"opensource+npm@fb.com"},{"name":"aaronabramov","email":"aaron@abramov.io"},{"name":"davidzilburg","email":"davidzilburg@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pretty-format_27.0.1_1621937189610_0.1666170729839298"},"_hasShrinkwrap":false},"27.0.2":{"name":"pretty-format","version":"27.0.2","repository":{"type":"git","url":"git+https://github.com/facebook/jest.git","directory":"packages/pretty-format"},"license":"MIT","description":"Stringify any JavaScript value.","main":"./build/index.js","types":"./build/index.d.ts","exports":{".":"./build/index.js","./package.json":"./package.json"},"author":{"name":"James Kyle","email":"me@thejameskyle.com"},"dependencies":{"@jest/types":"^27.0.2","ansi-regex":"^5.0.0","ansi-styles":"^5.0.0","react-is":"^17.0.1"},"devDependencies":{"@types/react":"*","@types/react-is":"^17.0.0","@types/react-test-renderer":"*","immutable":"4.0.0-rc.9","jest-util":"^27.0.2","react":"*","react-dom":"*","react-test-renderer":"*"},"engines":{"node":"^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"},"publishConfig":{"access":"public"},"gitHead":"7ca8a22b8453e95c63842ee6aa4d8d8d8b4f9612","bugs":{"url":"https://github.com/facebook/jest/issues"},"homepage":"https://github.com/facebook/jest#readme","_id":"pretty-format@27.0.2","_nodeVersion":"14.17.0","_npmVersion":"lerna/4.0.0/node@v14.17.0+x64 (darwin)","dist":{"integrity":"sha512-mXKbbBPnYTG7Yra9qFBtqj+IXcsvxsvOBco3QHxtxTl+hHKq6QdzMZ+q0CtL4ORHZgwGImRr2XZUX2EWzORxig==","shasum":"9283ff8c4f581b186b2d4da461617143dca478a4","tarball":"http://localhost:4545/npm/registry/pretty-format/pretty-format-27.0.2.tgz","fileCount":27,"unpackedSize":68484,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgsi5xCRA9TVsSAnZWagAAf/IP/RQBw7xE60RlsuWm50e8\nmnhuMmbKVleFXKluPr0W2cND7seuiGm1TPooLySC9o4FYbG7DjPPoQ92dLvU\nvO3Pg18HWiRLHTVR7k1S+Yj0Nh4H2ecIC9cGorg5WPvNS/IPFs0rIBZhHNL5\n9VnvcXh11HBsVcsHJ4UzSqNQPpqubRodviPA1iMszE8Wng2efMXwVS2OkYUv\ngPRXh6wAE4bmaYdYhdGI0UwU7uB4ETbmtB5YwYg19Neax8aqon7IQm08ne9B\ndKpPSHjDfGhbB1zyKGcsPH06wJlvFbxQVcNtnia503ER8Kp8efE7dzXjAPxt\nOCGtIEOmL3Xj4CEly9SavEo4Y37Xw5PDi5vhThSmaswt5WTEL9nXi81AhcxW\nrcAGc1V6QhoLUqy2Duj0JmG3z/tYGOqVDwYkXsHXy3TGzXlsYxIIFmcR5/jm\n1BwNKBnlfrkkUj5LyUdp9DIGY0+E7r/d9nO8wbAHbVYRNxLrwv/zIPDxGsfM\nIFyPpVSnP0c9wo5gHYKR1O0zNsOMSogrdKy+1r+Eg4NsBwzl6sGnFqVs9d/A\n2lGPO9NLPu2/R1lYX153ow3Rancm9mnTfiVU25eBm0h+2vAmw7jAdBmIEG8l\nR4Z8bCIvFEMKOojpx1Evgr3HAsIsY9Zgm/92x+X6it048nduJILgwZZYpQ7A\nAJEP\r\n=L026\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDkJIM8d84uGZ6HpGgsTbIYvlCRHD5MVqAFxQQomkdzEAiEA4hv3XDSZPGzsiTjxChm0M+h1Vjn2DVGq0c0imcnY2Mo="}]},"_npmUser":{"name":"simenb","email":"sbekkhus91@gmail.com"},"directories":{},"maintainers":[{"name":"scotthovestadt","email":"scott.hovestadt@gmail.com"},{"name":"rubennorte","email":"rubennorte@gmail.com"},{"name":"simenb","email":"sbekkhus91@gmail.com"},{"name":"fb","email":"opensource+npm@fb.com"},{"name":"aaronabramov","email":"aaron@abramov.io"},{"name":"davidzilburg","email":"davidzilburg@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pretty-format_27.0.2_1622290032622_0.30911559142867273"},"_hasShrinkwrap":false},"27.0.6":{"name":"pretty-format","version":"27.0.6","repository":{"type":"git","url":"git+https://github.com/facebook/jest.git","directory":"packages/pretty-format"},"license":"MIT","description":"Stringify any JavaScript value.","main":"./build/index.js","types":"./build/index.d.ts","exports":{".":"./build/index.js","./package.json":"./package.json"},"author":{"name":"James Kyle","email":"me@thejameskyle.com"},"dependencies":{"@jest/types":"^27.0.6","ansi-regex":"^5.0.0","ansi-styles":"^5.0.0","react-is":"^17.0.1"},"devDependencies":{"@types/react":"*","@types/react-is":"^17.0.0","@types/react-test-renderer":"*","immutable":"4.0.0-rc.9","jest-util":"^27.0.6","react":"*","react-dom":"*","react-test-renderer":"*"},"engines":{"node":"^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"},"publishConfig":{"access":"public"},"gitHead":"d257d1c44ba62079bd4307ae78ba226d47c56ac9","bugs":{"url":"https://github.com/facebook/jest/issues"},"homepage":"https://github.com/facebook/jest#readme","_id":"pretty-format@27.0.6","_nodeVersion":"14.17.1","_npmVersion":"lerna/4.0.0/node@v14.17.1+x64 (darwin)","dist":{"integrity":"sha512-8tGD7gBIENgzqA+UBzObyWqQ5B778VIFZA/S66cclyd5YkFLYs2Js7gxDKf0MXtTc9zcS7t1xhdfcElJ3YIvkQ==","shasum":"ab770c47b2c6f893a21aefc57b75da63ef49a11f","tarball":"http://localhost:4545/npm/registry/pretty-format/pretty-format-27.0.6.tgz","fileCount":27,"unpackedSize":69174,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJg2gFgCRA9TVsSAnZWagAAQQAP/0Agmh17kFnoOne7IJ/0\nC/p1r1ZGYDiojFRRFgPN66NSV5qebzkapLD1tcOCtSRhPCKJwuqqucPuKVe6\nVkR7asBjP37uBqfxQsGWcTFeUbhmURXjUQVLwfivs1Nr5cq/yvHBeIV1/013\n/KGt+yPcZvH9k1QNBMBX/yWwXgyj1lqflHGnNT1t3sCy571u02giEJkGcfcx\nvLrnMvZoQ0M+P4bHmDKLKh8+yxiqCJ/9pM4GwNMjIoKaWVTMuhXvAf/vpW4y\nnSaCwEaNQnZk/9qF9VAhSesvF1IS2JvopGRudCRXlR+hWKnIANmGxhgTZI/+\n2cyQYSem7DZYv59ahRwr/j+Ra4OYPIpHjcvGwAm22n7wSKA0+tCo6TC1Jmzw\nK7xWwpFAP+p03MfLwwyUaJc1BzzclQJ1w+jCXpRynMtB7f7flqxWpUzA6G3c\n+3zKfHel7NDNQq4/zE3g1VSTcP0urwK9A9qQv5N2X1NPbObhUFt/sWnIeWte\nAKQ7OiXZQxE+KsHLs6s9v1D0KDrtp3LXDCiml7rNi2vifZQJXdE8bBMNQRVB\n17hNHn/cHQDofKE6FEXG51TBUOswzZAxq/M9OgXSrx/QcgZdYjK09GHqDNR1\nPlfFXoVoWes7XsfjnVfYJ11HUVkxPAJ8XQL+dy69JMQgOE7PZ+zTp8O5jIlK\ngwfE\r\n=pX90\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHVfRwD5/bGxLfZESlftb4x2Ae7adojS6Rf8Rv5hay7yAiB/7rWRgnLL2/n0XZ6K2doLZ8TOXaTl/r+FOJX0UhWgUA=="}]},"_npmUser":{"name":"simenb","email":"sbekkhus91@gmail.com"},"directories":{},"maintainers":[{"name":"scotthovestadt","email":"scott.hovestadt@gmail.com"},{"name":"rubennorte","email":"rubennorte@gmail.com"},{"name":"simenb","email":"sbekkhus91@gmail.com"},{"name":"fb","email":"opensource+npm@fb.com"},{"name":"aaronabramov","email":"aaron@abramov.io"},{"name":"davidzilburg","email":"davidzilburg@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pretty-format_27.0.6_1624899935644_0.5213734473603584"},"_hasShrinkwrap":false},"27.1.0":{"name":"pretty-format","version":"27.1.0","repository":{"type":"git","url":"git+https://github.com/facebook/jest.git","directory":"packages/pretty-format"},"license":"MIT","description":"Stringify any JavaScript value.","main":"./build/index.js","types":"./build/index.d.ts","exports":{".":"./build/index.js","./package.json":"./package.json"},"author":{"name":"James Kyle","email":"me@thejameskyle.com"},"dependencies":{"@jest/types":"^27.1.0","ansi-regex":"^5.0.0","ansi-styles":"^5.0.0","react-is":"^17.0.1"},"devDependencies":{"@types/react":"*","@types/react-is":"^17.0.0","@types/react-test-renderer":"*","immutable":"4.0.0-rc.9","jest-util":"^27.1.0","react":"*","react-dom":"*","react-test-renderer":"*"},"engines":{"node":"^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"},"publishConfig":{"access":"public"},"gitHead":"5ef792e957e83428d868a18618b8629e32719993","bugs":{"url":"https://github.com/facebook/jest/issues"},"homepage":"https://github.com/facebook/jest#readme","_id":"pretty-format@27.1.0","_nodeVersion":"14.17.5","_npmVersion":"lerna/4.0.0/node@v14.17.5+x64 (darwin)","dist":{"integrity":"sha512-4aGaud3w3rxAO6OXmK3fwBFQ0bctIOG3/if+jYEFGNGIs0EvuidQm3bZ9mlP2/t9epLNC/12czabfy7TZNSwVA==","shasum":"022f3fdb19121e0a2612f3cff8d724431461b9ca","tarball":"http://localhost:4545/npm/registry/pretty-format/pretty-format-27.1.0.tgz","fileCount":27,"unpackedSize":69290,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhKLeICRA9TVsSAnZWagAADqEP/0q+FFQzpNfaqjEUs1yZ\nBa7fDJX/rXYOePtk251iOvQmLxbNYURTTKKrdkQB1XJYxOcfbRcrnmBGknII\n12TKnXu+3fu/Tzx3wStosNlLQtd0LAqSXoHEGf2I65PDDkuJVHfe3m5owZvb\n45M+KYtCixbqksKG0NoiroO/WmYU0qpu7Y8GdxR8+7H37jiLrzlRLkuECQnK\npAhoTIrssC6IbFf+ethtR1ihL7K/JohzEv4MxYIK0Jw6MT24ezqwWQLcECzA\nMas9Fxerjlv/1DSyM/v5OyBP+nIBgnGdZQYw/p1mNHPywlKkU0LcVaun+pce\nNiRMcLtCbz01CnUNu70W+U562O7wtR3wBtM9D6X+I5cAVW6mpRYCjycbQeCV\nkXantXwi1cdgx9wRhSBpI6YH7AvMfCwWl05ZC1+JHIIyGI0vMh33/pCwjy1C\n1ESx68cOiccLPSJEW/ch2oEyGwiiIQegNISHEkd31axUSScuqcqKJCCEEByZ\ntIM4I4qS7z/hN1mvjFA3GwwjmTZGM4EcdiOo2V+43EZGZvN98Yncak956Gor\nR5TWtak9l5x2x7ACGuuQzoAO+sJc1ZFV7cyzrbpF5YuY4b5+IvcyleBnAxCw\nH/FD2Y2U4HWBqvs7VtDgc8YgXhTZpOe2I2b+zSA/YKqKAZobnOWF97rLQ2sU\noAnb\r\n=phYb\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEuHHpMjddH4qHLJQbDBim9WazwraaVtlvBN74m61uJZAiALn93jdjl3c68zye0OmzDG/p1nPD2mSaHvZ5LnMcCHdg=="}]},"_npmUser":{"name":"simenb","email":"sbekkhus91@gmail.com"},"directories":{},"maintainers":[{"name":"scotthovestadt","email":"scott.hovestadt@gmail.com"},{"name":"rubennorte","email":"rubennorte@gmail.com"},{"name":"simenb","email":"sbekkhus91@gmail.com"},{"name":"fb","email":"opensource+npm@fb.com"},{"name":"aaronabramov","email":"aaron@abramov.io"},{"name":"davidzilburg","email":"davidzilburg@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pretty-format_27.1.0_1630058376503_0.5870293893812262"},"_hasShrinkwrap":false},"27.1.1":{"name":"pretty-format","version":"27.1.1","repository":{"type":"git","url":"git+https://github.com/facebook/jest.git","directory":"packages/pretty-format"},"license":"MIT","description":"Stringify any JavaScript value.","main":"./build/index.js","types":"./build/index.d.ts","exports":{".":"./build/index.js","./package.json":"./package.json"},"author":{"name":"James Kyle","email":"me@thejameskyle.com"},"dependencies":{"@jest/types":"^27.1.1","ansi-regex":"^5.0.0","ansi-styles":"^5.0.0","react-is":"^17.0.1"},"devDependencies":{"@types/react":"*","@types/react-is":"^17.0.0","@types/react-test-renderer":"*","immutable":"4.0.0-rc.9","jest-util":"^27.1.1","react":"*","react-dom":"*","react-test-renderer":"*"},"engines":{"node":"^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"},"publishConfig":{"access":"public"},"gitHead":"111198b62dbfc3a730f7b1693e311608e834fe1d","bugs":{"url":"https://github.com/facebook/jest/issues"},"homepage":"https://github.com/facebook/jest#readme","_id":"pretty-format@27.1.1","_nodeVersion":"14.17.5","_npmVersion":"lerna/4.0.0/node@v14.17.5+x64 (darwin)","dist":{"integrity":"sha512-zdBi/xlstKJL42UH7goQti5Hip/B415w1Mfj+WWWYMBylAYtKESnXGUtVVcMVid9ReVjypCotUV6CEevYPHv2g==","shasum":"cbaf9ec6cd7cfc3141478b6f6293c0ccdbe968e0","tarball":"http://localhost:4545/npm/registry/pretty-format/pretty-format-27.1.1.tgz","fileCount":27,"unpackedSize":69290,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhOIx7CRA9TVsSAnZWagAAVf8QAIYRK5By1vrocCPYfmYf\ngA3t39+eW4zcc172sddTh21iptOmLUc13Denbgo/7+rXjzysyto6xKYdB9Gu\nwG4Y82vurqUrOqLiJ5kIipJADRJEUFUghtY+Wk4H22wg2mirpCt/Qg+tFskp\nAjGAdmFERUE12Rvo3sPFuIAkOZjnsN2iE/tHnbYs7ogFd0+gRGIZb0WasjKR\n8Dqc05Tu69aJSvL4zDTdJf1cUaLWrrW4rV7B8lHZbbPwKFBuDvNSfgXKrbLV\nA9G6L7QuR84kPnam3nPUGB4ypFTT52//M8pCNIFyDyFcrUBgSfRurOyNNOYa\nGyfhim6aLaOe+IfhmTmJsumxxFzn1rPygFl0iAJGCnMNWwOQbM2rqmcNHvi6\ntRJyOYMlO7Z2aWSXbrGwH5kRU5pjSeim/ic9x6WComQtREoEiJLbtvNhxfRi\n606E9/H7sC018W6FUvET5aUous3Q+KA5FsuJCB/U0RQno7fP9yVri+ITzTkb\n3GOHIyT3Vb3Jt8Bj0hrgX1Ypru0igkrLEh6e69RtCJSDCiG/0mFqhDkr9P1A\nWtiHVeOcogxud3teIGWpw5Ykqm+DeoLDXLSQWI7GoCNF6F0f64VwDW28Yz4t\nEOOu1U0juBrI1bw8YiWyBpFJQCpSrJkvgh/U3bhOIJdlVUj5YgEecrKmvY+4\na9mM\r\n=xvTr\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCofl9PkNboQufU9so0uhQBBxjR324iPB/xpGkkcjBMNwIgcf6VwEYWFNNqxz33Us0AOrcEycpuHq54YQB/2QY8UUw="}]},"_npmUser":{"name":"simenb","email":"sbekkhus91@gmail.com"},"directories":{},"maintainers":[{"name":"scotthovestadt","email":"scott.hovestadt@gmail.com"},{"name":"rubennorte","email":"rubennorte@gmail.com"},{"name":"simenb","email":"sbekkhus91@gmail.com"},{"name":"fb","email":"opensource+npm@fb.com"},{"name":"aaronabramov","email":"aaron@abramov.io"},{"name":"davidzilburg","email":"davidzilburg@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pretty-format_27.1.1_1631095930894_0.8509631842344652"},"_hasShrinkwrap":false},"27.2.0":{"name":"pretty-format","version":"27.2.0","repository":{"type":"git","url":"git+https://github.com/facebook/jest.git","directory":"packages/pretty-format"},"license":"MIT","description":"Stringify any JavaScript value.","main":"./build/index.js","types":"./build/index.d.ts","exports":{".":"./build/index.js","./package.json":"./package.json"},"author":{"name":"James Kyle","email":"me@thejameskyle.com"},"dependencies":{"@jest/types":"^27.1.1","ansi-regex":"^5.0.0","ansi-styles":"^5.0.0","react-is":"^17.0.1"},"devDependencies":{"@types/react":"*","@types/react-is":"^17.0.0","@types/react-test-renderer":"*","immutable":"4.0.0-rc.9","jest-util":"^27.2.0","react":"*","react-dom":"*","react-test-renderer":"*"},"engines":{"node":"^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"},"publishConfig":{"access":"public"},"gitHead":"b05635c539f8f673dfed5bf05ea727a8d5d7bbe2","bugs":{"url":"https://github.com/facebook/jest/issues"},"homepage":"https://github.com/facebook/jest#readme","_id":"pretty-format@27.2.0","_nodeVersion":"14.17.5","_npmVersion":"lerna/4.0.0/node@v14.17.5+x64 (darwin)","dist":{"integrity":"sha512-KyJdmgBkMscLqo8A7K77omgLx5PWPiXJswtTtFV7XgVZv2+qPk6UivpXXO+5k6ZEbWIbLoKdx1pZ6ldINzbwTA==","shasum":"ee37a94ce2a79765791a8649ae374d468c18ef19","tarball":"http://localhost:4545/npm/registry/pretty-format/pretty-format-27.2.0.tgz","fileCount":27,"unpackedSize":69288,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhPwaKCRA9TVsSAnZWagAA+AgP/3sVHt3AnVeLg25ch2HA\n16SpwDZBQeL8jUczRZNCZDRvaMYPUX38nCQJ4bku3NnCr9VGQrkpRZBe0pll\nyGlcXEVnZsKdzI0jODtz7yBcndw4WeG0f+mfQcBJocDQng0IXO4zx3UMsu1c\n/0jUInuI3J4dhEVaY4MTAJvSwQ7UIwJLxaLc03K/6WX2FWjlrThOizLh2NYC\nvxDfQUvOK6LYrnv76MCdj+m5P0J6KrbKqMZpftTvzK6rDYLYo6d0NLX8l5tj\n+Z44vKIy/m8DrnlKoRJfNlpS1NQ9AFSmV7d+V2/E1iyE9QR7enReqn3WoezO\nBh9hCejupyBhoR0veRXuYyvOuaiBGG+jCFVLM/6dMYeClWBl9M1Zaqn2JTgO\nTmT2gMSBnC+ClvNsqgh7p1rmJvsgF6OX8Ih0wAeT/AGUfzBqPoN4HJUlmdYW\nxPVRrtyBGfbcp9joP/v/ieNvyRrA5fQtZqOofPIC90H8AYrflJC+VJBvekIY\nLjkvJk3edJFtQZEQ4dZXExSPxPrab0x+HepArPvtn//yWHxITkqrrUZCRL8k\nVvaeM/bx3y0WonCtuxdtQeceSQeBc7itKXVo8PDhMbVggRfXMyYJrxqXFTJD\nfZb2JtF0MtUlj708eMWyYZkaErZo8uB1MrYJqY0RkhW612o+3Hcf6Ag03Sal\nciK+\r\n=Pv2P\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCHZVXwzZqZq1eGe7Et/MORJ8/xMsRp2teWadJTEua06QIgAMaUsP//R+h4K9wlRmGHF+cCn/2JGFT7en4EnyWR24s="}]},"_npmUser":{"name":"simenb","email":"sbekkhus91@gmail.com"},"directories":{},"maintainers":[{"name":"scotthovestadt","email":"scott.hovestadt@gmail.com"},{"name":"rubennorte","email":"rubennorte@gmail.com"},{"name":"simenb","email":"sbekkhus91@gmail.com"},{"name":"fb","email":"opensource+npm@fb.com"},{"name":"aaronabramov","email":"aaron@abramov.io"},{"name":"davidzilburg","email":"davidzilburg@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pretty-format_27.2.0_1631520394504_0.7457474256325933"},"_hasShrinkwrap":false},"27.2.2":{"name":"pretty-format","version":"27.2.2","repository":{"type":"git","url":"git+https://github.com/facebook/jest.git","directory":"packages/pretty-format"},"license":"MIT","description":"Stringify any JavaScript value.","main":"./build/index.js","types":"./build/index.d.ts","exports":{".":"./build/index.js","./package.json":"./package.json"},"author":{"name":"James Kyle","email":"me@thejameskyle.com"},"dependencies":{"@jest/types":"^27.1.1","ansi-regex":"^5.0.1","ansi-styles":"^5.0.0","react-is":"^17.0.1"},"devDependencies":{"@types/react":"*","@types/react-is":"^17.0.0","@types/react-test-renderer":"*","immutable":"4.0.0-rc.9","jest-util":"^27.2.0","react":"*","react-dom":"*","react-test-renderer":"*"},"engines":{"node":"^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"},"publishConfig":{"access":"public"},"gitHead":"f54d96fec55518640b900d6994b2c4153316d1ed","bugs":{"url":"https://github.com/facebook/jest/issues"},"homepage":"https://github.com/facebook/jest#readme","_id":"pretty-format@27.2.2","_nodeVersion":"14.17.6","_npmVersion":"lerna/4.0.0/node@v14.17.6+x64 (darwin)","dist":{"integrity":"sha512-+DdLh+rtaElc2SQOE/YPH8k2g3Rf2OXWEpy06p8Szs3hdVSYD87QOOlYRHWAeb/59XTmeVmRKvDD0svHqf6ycA==","shasum":"c080f1ab7ac64302e4d438f208596fc649dbeeb3","tarball":"http://localhost:4545/npm/registry/pretty-format/pretty-format-27.2.2.tgz","fileCount":27,"unpackedSize":69288,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCxuY1einYrCPexKcfPv1hcrueUmeLXfaWyl1HPr9q7lgIgYOmbgxAAL0vRRwOIohbGL3pNj5FAcgJ4ZP1N6NhXJPA="}]},"_npmUser":{"name":"simenb","email":"sbekkhus91@gmail.com"},"directories":{},"maintainers":[{"name":"scotthovestadt","email":"scott.hovestadt@gmail.com"},{"name":"rubennorte","email":"rubennorte@gmail.com"},{"name":"simenb","email":"sbekkhus91@gmail.com"},{"name":"fb","email":"opensource+npm@fb.com"},{"name":"aaronabramov","email":"aaron@abramov.io"},{"name":"davidzilburg","email":"davidzilburg@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pretty-format_27.2.2_1632576906925_0.7330380426794147"},"_hasShrinkwrap":false},"27.2.3":{"name":"pretty-format","version":"27.2.3","repository":{"type":"git","url":"git+https://github.com/facebook/jest.git","directory":"packages/pretty-format"},"license":"MIT","description":"Stringify any JavaScript value.","main":"./build/index.js","types":"./build/index.d.ts","exports":{".":"./build/index.js","./package.json":"./package.json"},"author":{"name":"James Kyle","email":"me@thejameskyle.com"},"dependencies":{"@jest/types":"^27.2.3","ansi-regex":"^5.0.1","ansi-styles":"^5.0.0","react-is":"^17.0.1"},"devDependencies":{"@types/react":"*","@types/react-is":"^17.0.0","@types/react-test-renderer":"*","immutable":"4.0.0-rc.9","jest-util":"^27.2.3","react":"*","react-dom":"*","react-test-renderer":"*"},"engines":{"node":"^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"},"publishConfig":{"access":"public"},"gitHead":"ae53efe274dee5464d11f1b574d2d825685cd031","bugs":{"url":"https://github.com/facebook/jest/issues"},"homepage":"https://github.com/facebook/jest#readme","_id":"pretty-format@27.2.3","_nodeVersion":"14.17.6","_npmVersion":"lerna/4.0.0/node@v14.17.6+x64 (darwin)","dist":{"integrity":"sha512-wvg2HzuGKKEE/nKY4VdQ/LM8w8pRZvp0XpqhwgaZBbjTwd5UdF2I4wvwZjyUwu8G+HI6g4t6u9b2FZlKhlzxcQ==","shasum":"c76710de6ebd8b1b412a5668bacf4a6c2f21a029","tarball":"http://localhost:4545/npm/registry/pretty-format/pretty-format-27.2.3.tgz","fileCount":27,"unpackedSize":69288,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCLMYlAtJNE2eR/6gzzfHFeLpcR7gzc6gVUBdtrmxgM1QIgOdd0Qe0PX5cMSDzEWjEu0uIfqQE2W88EpjmyNlJFDcY="}]},"_npmUser":{"name":"simenb","email":"sbekkhus91@gmail.com"},"directories":{},"maintainers":[{"name":"scotthovestadt","email":"scott.hovestadt@gmail.com"},{"name":"rubennorte","email":"rubennorte@gmail.com"},{"name":"simenb","email":"sbekkhus91@gmail.com"},{"name":"fb","email":"opensource+npm@fb.com"},{"name":"aaronabramov","email":"aaron@abramov.io"},{"name":"davidzilburg","email":"davidzilburg@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pretty-format_27.2.3_1632823880653_0.6784063197390855"},"_hasShrinkwrap":false},"27.2.4":{"name":"pretty-format","version":"27.2.4","repository":{"type":"git","url":"git+https://github.com/facebook/jest.git","directory":"packages/pretty-format"},"license":"MIT","description":"Stringify any JavaScript value.","main":"./build/index.js","types":"./build/index.d.ts","exports":{".":"./build/index.js","./package.json":"./package.json"},"author":{"name":"James Kyle","email":"me@thejameskyle.com"},"dependencies":{"@jest/types":"^27.2.4","ansi-regex":"^5.0.1","ansi-styles":"^5.0.0","react-is":"^17.0.1"},"devDependencies":{"@types/react":"*","@types/react-is":"^17.0.0","@types/react-test-renderer":"*","immutable":"4.0.0-rc.9","jest-util":"^27.2.4","react":"*","react-dom":"*","react-test-renderer":"*"},"engines":{"node":"^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"},"publishConfig":{"access":"public"},"gitHead":"5886f6c4d681aa9fc9bfc2517efd2b7f6035a4cd","bugs":{"url":"https://github.com/facebook/jest/issues"},"homepage":"https://github.com/facebook/jest#readme","_id":"pretty-format@27.2.4","_nodeVersion":"14.17.6","_npmVersion":"lerna/4.0.0/node@v14.17.6+x64 (darwin)","dist":{"integrity":"sha512-NUjw22WJHldzxyps2YjLZkUj6q1HvjqFezkB9Y2cklN8NtVZN/kZEXGZdFw4uny3oENzV5EEMESrkI0YDUH8vg==","shasum":"08ea39c5eab41b082852d7093059a091f6ddc748","tarball":"http://localhost:4545/npm/registry/pretty-format/pretty-format-27.2.4.tgz","fileCount":27,"unpackedSize":69288,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC76dCifCC0mFXFfQLEs9AfSUMd6h8yKuLNFjV/Iw45QAIhAO+kwwGHaQZkSeTJA3PIBWbHxFfK2ROOFdfIm/+DOGo0"}]},"_npmUser":{"name":"simenb","email":"sbekkhus91@gmail.com"},"directories":{},"maintainers":[{"name":"scotthovestadt","email":"scott.hovestadt@gmail.com"},{"name":"rubennorte","email":"rubennorte@gmail.com"},{"name":"simenb","email":"sbekkhus91@gmail.com"},{"name":"fb","email":"opensource+npm@fb.com"},{"name":"aaronabramov","email":"aaron@abramov.io"},{"name":"davidzilburg","email":"davidzilburg@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pretty-format_27.2.4_1632924287010_0.21851018986795312"},"_hasShrinkwrap":false},"27.2.5":{"name":"pretty-format","version":"27.2.5","repository":{"type":"git","url":"git+https://github.com/facebook/jest.git","directory":"packages/pretty-format"},"license":"MIT","description":"Stringify any JavaScript value.","main":"./build/index.js","types":"./build/index.d.ts","exports":{".":"./build/index.js","./package.json":"./package.json"},"author":{"name":"James Kyle","email":"me@thejameskyle.com"},"dependencies":{"@jest/types":"^27.2.5","ansi-regex":"^5.0.1","ansi-styles":"^5.0.0","react-is":"^17.0.1"},"devDependencies":{"@types/react":"*","@types/react-is":"^17.0.0","@types/react-test-renderer":"*","immutable":"4.0.0-rc.9","jest-util":"^27.2.5","react":"*","react-dom":"*","react-test-renderer":"*"},"engines":{"node":"^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"},"publishConfig":{"access":"public"},"gitHead":"251b8014e8e3ac8da2fca88b5a1bc401f3b92326","bugs":{"url":"https://github.com/facebook/jest/issues"},"homepage":"https://github.com/facebook/jest#readme","_id":"pretty-format@27.2.5","_nodeVersion":"14.17.6","_npmVersion":"lerna/4.0.0/node@v14.17.6+x64 (darwin)","dist":{"integrity":"sha512-+nYn2z9GgicO9JiqmY25Xtq8SYfZ/5VCpEU3pppHHNAhd1y+ZXxmNPd1evmNcAd6Hz4iBV2kf0UpGth5A/VJ7g==","shasum":"7cfe2a8e8f01a5b5b29296a0b70f4140df0830c5","tarball":"http://localhost:4545/npm/registry/pretty-format/pretty-format-27.2.5.tgz","fileCount":27,"unpackedSize":69288,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAsAhKy9cOYAS4JySi+AaFSvhD9XtJ1quh5q9pkw3FBhAiB1UGxnHIhuPpy2kmq2zCLjbpka3n2us0w6pDsIpNGm7g=="}]},"_npmUser":{"name":"simenb","email":"sbekkhus91@gmail.com"},"directories":{},"maintainers":[{"name":"scotthovestadt","email":"scott.hovestadt@gmail.com"},{"name":"rubennorte","email":"rubennorte@gmail.com"},{"name":"simenb","email":"sbekkhus91@gmail.com"},{"name":"fb","email":"opensource+npm@fb.com"},{"name":"aaronabramov","email":"aaron@abramov.io"},{"name":"davidzilburg","email":"davidzilburg@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pretty-format_27.2.5_1633700359574_0.7141862870197635"},"_hasShrinkwrap":false},"27.3.0":{"name":"pretty-format","version":"27.3.0","repository":{"type":"git","url":"git+https://github.com/facebook/jest.git","directory":"packages/pretty-format"},"license":"MIT","description":"Stringify any JavaScript value.","main":"./build/index.js","types":"./build/index.d.ts","exports":{".":"./build/index.js","./package.json":"./package.json"},"author":{"name":"James Kyle","email":"me@thejameskyle.com"},"dependencies":{"@jest/types":"^27.2.5","ansi-regex":"^5.0.1","ansi-styles":"^5.0.0","react-is":"^17.0.1"},"devDependencies":{"@types/react":"*","@types/react-is":"^17.0.0","@types/react-test-renderer":"*","immutable":"4.0.0-rc.9","jest-util":"^27.3.0","react":"*","react-dom":"*","react-test-renderer":"*"},"engines":{"node":"^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"},"publishConfig":{"access":"public"},"gitHead":"14b0c2c1d6f81b64adf8b827649ece80a4448cfc","bugs":{"url":"https://github.com/facebook/jest/issues"},"homepage":"https://github.com/facebook/jest#readme","_id":"pretty-format@27.3.0","_nodeVersion":"14.17.6","_npmVersion":"lerna/4.0.0/node@v14.17.6+x64 (darwin)","dist":{"integrity":"sha512-Nkdd0xmxZdjCe6GoJomHnrLcCYGYzZKI/fRnUX0sCwDai2mmCHJfC9Ecx33lYgaxAFS/pJCAqhfxmWlm1wNVag==","shasum":"ab4679ffc25dd9bc29bab220a4a70a873a19600e","tarball":"http://localhost:4545/npm/registry/pretty-format/pretty-format-27.3.0.tgz","fileCount":27,"unpackedSize":69288,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIE6SihF+OWxvTDfYTHi5gRb470KxbN35y12qGBQI8AyYAiEApT6anfsfQeaM28+YSDpeyAOne2hur8wIpSIFxQ3VqCU="}]},"_npmUser":{"name":"simenb","email":"sbekkhus91@gmail.com"},"directories":{},"maintainers":[{"name":"scotthovestadt","email":"scott.hovestadt@gmail.com"},{"name":"rubennorte","email":"rubennorte@gmail.com"},{"name":"simenb","email":"sbekkhus91@gmail.com"},{"name":"fb","email":"opensource+npm@fb.com"},{"name":"aaronabramov","email":"aaron@abramov.io"},{"name":"davidzilburg","email":"davidzilburg@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pretty-format_27.3.0_1634495685899_0.8009134202052051"},"_hasShrinkwrap":false},"27.3.1":{"name":"pretty-format","version":"27.3.1","repository":{"type":"git","url":"git+https://github.com/facebook/jest.git","directory":"packages/pretty-format"},"license":"MIT","description":"Stringify any JavaScript value.","main":"./build/index.js","types":"./build/index.d.ts","exports":{".":"./build/index.js","./package.json":"./package.json"},"author":{"name":"James Kyle","email":"me@thejameskyle.com"},"dependencies":{"@jest/types":"^27.2.5","ansi-regex":"^5.0.1","ansi-styles":"^5.0.0","react-is":"^17.0.1"},"devDependencies":{"@types/react":"*","@types/react-is":"^17.0.0","@types/react-test-renderer":"*","immutable":"4.0.0-rc.9","jest-util":"^27.3.1","react":"*","react-dom":"*","react-test-renderer":"*"},"engines":{"node":"^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"},"publishConfig":{"access":"public"},"gitHead":"4f3328f3227aa0668486f819b3353af5b6cc797b","bugs":{"url":"https://github.com/facebook/jest/issues"},"homepage":"https://github.com/facebook/jest#readme","_id":"pretty-format@27.3.1","_nodeVersion":"14.17.6","_npmVersion":"lerna/4.0.0/node@v14.17.6+x64 (darwin)","dist":{"integrity":"sha512-DR/c+pvFc52nLimLROYjnXPtolawm+uWDxr4FjuLDLUn+ktWnSN851KoHwHzzqq6rfCOjkzN8FLgDrSub6UDuA==","shasum":"7e9486365ccdd4a502061fa761d3ab9ca1b78df5","tarball":"http://localhost:4545/npm/registry/pretty-format/pretty-format-27.3.1.tgz","fileCount":27,"unpackedSize":69288,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDRnWBfYXRrpy/2sKmhorqeVumtj8mKzp/3q3FBCnWqeAiBvQCTCNhh7dhSO5ZpKTD96yEtYYrwn088r1qMeXGusfA=="}]},"_npmUser":{"name":"simenb","email":"sbekkhus91@gmail.com"},"directories":{},"maintainers":[{"name":"scotthovestadt","email":"scott.hovestadt@gmail.com"},{"name":"rubennorte","email":"rubennorte@gmail.com"},{"name":"simenb","email":"sbekkhus91@gmail.com"},{"name":"fb","email":"opensource+npm@fb.com"},{"name":"aaronabramov","email":"aaron@abramov.io"},{"name":"davidzilburg","email":"davidzilburg@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pretty-format_27.3.1_1634626651703_0.4872332383578355"},"_hasShrinkwrap":false},"27.4.0":{"name":"pretty-format","version":"27.4.0","repository":{"type":"git","url":"git+https://github.com/facebook/jest.git","directory":"packages/pretty-format"},"license":"MIT","description":"Stringify any JavaScript value.","main":"./build/index.js","types":"./build/index.d.ts","exports":{".":{"types":"./build/index.d.ts","default":"./build/index.js"},"./package.json":"./package.json"},"author":{"name":"James Kyle","email":"me@thejameskyle.com"},"dependencies":{"@jest/types":"^27.4.0","ansi-regex":"^5.0.1","ansi-styles":"^5.0.0","react-is":"^17.0.1"},"devDependencies":{"@types/react":"*","@types/react-is":"^17.0.0","@types/react-test-renderer":"*","immutable":"4.0.0-rc.9","jest-util":"^27.4.0","react":"*","react-dom":"*","react-test-renderer":"*"},"engines":{"node":"^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"},"publishConfig":{"access":"public"},"gitHead":"0dc6dde296550370ade2574d6665748fed37f9c9","bugs":{"url":"https://github.com/facebook/jest/issues"},"homepage":"https://github.com/facebook/jest#readme","_id":"pretty-format@27.4.0","_nodeVersion":"16.13.0","_npmVersion":"lerna/4.0.0/node@v16.13.0+x64 (darwin)","dist":{"integrity":"sha512-n0QR6hMREfp6nLzfVksXMAfIxk1ffOOfbb/FzKHFmRtn9iJKaZXB8WMzLr8a72IASShEAhqK06nlwp1gVWgqKg==","shasum":"440a7b86612a18b0865831a6d8585d989a5420e9","tarball":"http://localhost:4545/npm/registry/pretty-format/pretty-format-27.4.0.tgz","fileCount":27,"unpackedSize":69977,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhpNd8CRA9TVsSAnZWagAA1CoQAJHxMZdPIOOwwXLuxmJx\nihHS8CzEjrSZ0qvGhzHDqXE+k+Jc7RZOaptc0p9FEHqD82l7gEcBYoGKzP5O\nB5FMB3UDGDv7Bvufs2Cm3o9/khrFpqGc4EsVvKYD5JlEm8t2+tj2awP5D5SA\nuSFvTb5ZQ5UR8gwn31eqp6y4j/ioDymlCz1SWFuTInrjobTDD/maromCbe1h\nJmio0gfYc4nolIM3wB24EFWSUremN5v6s5A7jjsp9ED28Hf3bgsPHxh2qVSX\nm0WKag2x5wFELRIZx8U4uqQuVjftAioDAwQO0s0+KsI+WmPeNccKLhhFVzzx\nsO1cUuiBTJ5K0iKiR+gV0A8MoZW+wrnbytMq/H2QbuAlrx9sXtZelDVtwiy3\nqOwCLo2WGQcbuoNAZZiBEIi0/4Q/uzW7y0KZC5IVlsQfJB4UN98LZz9FonYY\n34/WSAj/aCfgs2+Tu1QYhPA+zSKfLgrmHtkRr8++IPn1WFhO2WZQl5L7qBzb\n1GPRZAEpOCqJ2WqEIj1OJUWK8cmVlK9zq9nbm5hEnHRdeNmoR0BimQze25q4\nywgzNaQPDcZvjBwwEP2IZem+LtC2YU5HmhvanGqN/nV2EHaeGPMJrbHPqcSH\nkRrzoyI8U9lP+v7kX9XiQ7r3ZLfANj/6rTPWfee83zy84u5qhNZPK/cAH9lN\nPgwx\r\n=sR+l\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCJb24Kk62hIOYjKFtzq3OTmF4ziIuK9ghmlAQraTfwZAIgGrEaWwg0+Y2++gGVreZasRXhVVx4HJFniQoockQthl4="}]},"_npmUser":{"name":"simenb","email":"sbekkhus91@gmail.com"},"directories":{},"maintainers":[{"name":"scotthovestadt","email":"scott.hovestadt@gmail.com"},{"name":"rubennorte","email":"rubennorte@gmail.com"},{"name":"simenb","email":"sbekkhus91@gmail.com"},{"name":"fb","email":"opensource+npm@fb.com"},{"name":"aaronabramov","email":"aaron@abramov.io"},{"name":"davidzilburg","email":"davidzilburg@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pretty-format_27.4.0_1638193019856_0.8309245901723756"},"_hasShrinkwrap":false},"27.4.1":{"name":"pretty-format","version":"27.4.1","repository":{"type":"git","url":"git+https://github.com/facebook/jest.git","directory":"packages/pretty-format"},"license":"MIT","description":"Stringify any JavaScript value.","main":"./build/index.js","types":"./build/index.d.ts","exports":{".":{"types":"./build/index.d.ts","default":"./build/index.js"},"./package.json":"./package.json"},"author":{"name":"James Kyle","email":"me@thejameskyle.com"},"dependencies":{"@jest/types":"^27.4.1","ansi-regex":"^5.0.1","ansi-styles":"^5.0.0","react-is":"^17.0.1"},"devDependencies":{"@types/react":"*","@types/react-is":"^17.0.0","@types/react-test-renderer":"*","immutable":"4.0.0-rc.9","jest-util":"^27.4.1","react":"*","react-dom":"*","react-test-renderer":"*"},"engines":{"node":"^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"},"publishConfig":{"access":"public"},"gitHead":"fa4a3982766b107ff604ba54081d9e4378f318a9","bugs":{"url":"https://github.com/facebook/jest/issues"},"homepage":"https://github.com/facebook/jest#readme","_id":"pretty-format@27.4.1","_nodeVersion":"16.13.0","_npmVersion":"lerna/4.0.0/node@v16.13.0+x64 (darwin)","dist":{"integrity":"sha512-JJw4GzG0vP5dHA+D84zryrX3S34B6rZaJj6zsrN/sdNpcUNf1X6aH/7sPSqwtAGNXCxDqMa1wAKX4EH1Tv62aw==","shasum":"64e20137590b3232744a36163237981337c90931","tarball":"http://localhost:4545/npm/registry/pretty-format/pretty-format-27.4.1.tgz","fileCount":27,"unpackedSize":69977,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhpeKyCRA9TVsSAnZWagAAkk4P/jOuYFhTiomfojiBuWS1\n8E9Uk2mSIpAh6imxTbcMgUCxFVgBwSWpdG9id+VaUg1BfYJcyJHk9Tt/vNEE\nC+l8WiC6RdnDP4OYy28nqGH2ka7Bg3Sv5YaAzz3yYaL2wb0hAlEraUKCn3Sv\nuyHFJ9YzAPyfb5j7R+Jc/Ko3a2YUOfyCjrx5Dccapust1K2j1AAzmA8OqqGq\nmzjzbvaWSxJtHf3pDV5tZRzlib9QZl5hkbeiTgNYYLD/K7b0VkfjJq8azF1p\nhbGn5hfkifxTzSqL8PuBwjYDYv7TareC5PJ8RNaFFYBQEqdDmIgy3CBKIZQT\nmHhiCCxLvW0r4JX1pYavChqciwKboSFSlz3lIVhW8YC/Tv7ZHImBbgmePTbT\nz+HmAjQ7AikxhaLhTKl3UZKwkuvgphGqyQZVVcIZE5roIB/aS63vHW/l2Afk\nhQfSahL+rb40cO62dShJFYpwW5yEYwDsYMDgfUf1BpAwx9egZQA2vd4ke/BD\n9DZO+467aqHjUO899d59WwDPDrfGIVYZXd5nXapgslfQ7RQesWNS+UOChYIG\nOTfqydyWFaF8SboXF2iXZ+uCXjX/+PfQrpgsUkEBs8utBlL+gjjH1NzIJG1c\n8Tth6hoOPVgplzkBz8Ch4HHFkguwuLTBnyUQOwBiQkSCsDX2lj/xAcgwRpoO\nuucZ\r\n=PdZH\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBjYckBHcmX2t8SLAU3DqUvx5d65WerScqSym+PwPkmcAiALY/kF19/uDZc8Wab+QefMdRzJhoqcZD+plb90io44VQ=="}]},"_npmUser":{"name":"simenb","email":"sbekkhus91@gmail.com"},"directories":{},"maintainers":[{"name":"scotthovestadt","email":"scott.hovestadt@gmail.com"},{"name":"rubennorte","email":"rubennorte@gmail.com"},{"name":"simenb","email":"sbekkhus91@gmail.com"},{"name":"fb","email":"opensource+npm@fb.com"},{"name":"aaronabramov","email":"aaron@abramov.io"},{"name":"davidzilburg","email":"davidzilburg@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pretty-format_27.4.1_1638261426799_0.08379534400524391"},"_hasShrinkwrap":false},"27.4.2":{"name":"pretty-format","version":"27.4.2","repository":{"type":"git","url":"git+https://github.com/facebook/jest.git","directory":"packages/pretty-format"},"license":"MIT","description":"Stringify any JavaScript value.","main":"./build/index.js","types":"./build/index.d.ts","exports":{".":{"types":"./build/index.d.ts","default":"./build/index.js"},"./package.json":"./package.json"},"author":{"name":"James Kyle","email":"me@thejameskyle.com"},"dependencies":{"@jest/types":"^27.4.2","ansi-regex":"^5.0.1","ansi-styles":"^5.0.0","react-is":"^17.0.1"},"devDependencies":{"@types/react":"*","@types/react-is":"^17.0.0","@types/react-test-renderer":"*","immutable":"4.0.0-rc.9","jest-util":"^27.4.2","react":"*","react-dom":"*","react-test-renderer":"*"},"engines":{"node":"^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"},"publishConfig":{"access":"public"},"gitHead":"7965591f785e936ada194f9d58f852735b50ab1c","bugs":{"url":"https://github.com/facebook/jest/issues"},"homepage":"https://github.com/facebook/jest#readme","_id":"pretty-format@27.4.2","_nodeVersion":"16.13.0","_npmVersion":"lerna/4.0.0/node@v16.13.0+x64 (darwin)","dist":{"integrity":"sha512-p0wNtJ9oLuvgOQDEIZ9zQjZffK7KtyR6Si0jnXULIDwrlNF8Cuir3AZP0hHv0jmKuNN/edOnbMjnzd4uTcmWiw==","shasum":"e4ce92ad66c3888423d332b40477c87d1dac1fb8","tarball":"http://localhost:4545/npm/registry/pretty-format/pretty-format-27.4.2.tgz","fileCount":27,"unpackedSize":69977,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhphDCCRA9TVsSAnZWagAACucP+we9uul6FqdswOG2bKYE\ng8HJ3iF0NCeQkXCXn+EDCP8/fBCByq7euGtO7ZkqRNRVEH0QjHhFiBb47syX\nmOwpFmddqcpvlbc2zlRg567tlEs7/vc0632JRmdcyLcgkB3vuMxGMMAeeIeN\ntT9iVQqVai7xzDsgAt97lDeNvcAXfDWSSHtwEtG7I+ma4g5V3qpEbyI4f8Cq\nCQ5PI3gxvB+K/BGPSWkkOR775AzinFYYCGZqTw1lmudd38iex8BwvjBB5nNh\nb1Nb02OYdHEM6fTZqu8NYKFYSIJZOYFhIQ1trT8GJ8IyP5TFObxoJqTcNlOw\n7A43icRL6mLhr7pN8Y3Uj78KmvJXqn72ZtRtAT9NXkt+iur6/YpekTh0rcm0\nZO3PQAI/K6mvCulJc5AAKoTKtqkQOqSMvqx/SRvMlpxvclmy0vustG8PE6hU\nR6xnDrmSWezrijdFtALamJbASKmi19wTnsNcuG6gnJhX4PGCIn2EwD6hVGy1\nUslpSlaQHHmjl5bfQ67lKfEPJXhJZr1onDshWC2aeKM3by7RJ92WHxGaCH94\n+lsAc5kl2OtcVGp/93N/redY6Y6IdNicxAOzy4OQyGxqRTc0TW/SkmmjgV/c\n7aW5fnIIoY7hxUWuWmBU/5rMvNxjTquKESYs8M5m74G4Vu02GHiWHyYsWJVx\nKaT4\r\n=dMSb\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDKsJYyoaR4FA/i6WBKo3ZZTfNP/UlQLaWrq1jnqUebvgIgXE8yrWyTqRbx44Fg7M3xDAAu6sIZIh4UcavFkkJOP28="}]},"_npmUser":{"name":"simenb","email":"sbekkhus91@gmail.com"},"directories":{},"maintainers":[{"name":"scotthovestadt","email":"scott.hovestadt@gmail.com"},{"name":"rubennorte","email":"rubennorte@gmail.com"},{"name":"simenb","email":"sbekkhus91@gmail.com"},{"name":"fb","email":"opensource+npm@fb.com"},{"name":"aaronabramov","email":"aaron@abramov.io"},{"name":"davidzilburg","email":"davidzilburg@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pretty-format_27.4.2_1638273218468_0.20123205262825183"},"_hasShrinkwrap":false},"27.4.6":{"name":"pretty-format","version":"27.4.6","repository":{"type":"git","url":"git+https://github.com/facebook/jest.git","directory":"packages/pretty-format"},"license":"MIT","description":"Stringify any JavaScript value.","main":"./build/index.js","types":"./build/index.d.ts","exports":{".":{"types":"./build/index.d.ts","default":"./build/index.js"},"./package.json":"./package.json"},"author":{"name":"James Kyle","email":"me@thejameskyle.com"},"dependencies":{"ansi-regex":"^5.0.1","ansi-styles":"^5.0.0","react-is":"^17.0.1"},"devDependencies":{"@types/react":"*","@types/react-is":"^17.0.0","@types/react-test-renderer":"*","immutable":"^4.0.0","jest-util":"^27.4.2","react":"*","react-dom":"*","react-test-renderer":"*"},"engines":{"node":"^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"},"publishConfig":{"access":"public"},"gitHead":"644d2d3e53536b0d67e395c0f35f8555a67beb1e","bugs":{"url":"https://github.com/facebook/jest/issues"},"homepage":"https://github.com/facebook/jest#readme","_id":"pretty-format@27.4.6","_nodeVersion":"16.13.0","_npmVersion":"lerna/4.0.0/node@v16.13.0+x64 (darwin)","dist":{"integrity":"sha512-NblstegA1y/RJW2VyML+3LlpFjzx62cUrtBIKIWDXEDkjNeleA7Od7nrzcs/VLQvAeV4CgSYhrN39DRN88Qi/g==","shasum":"1b784d2f53c68db31797b2348fa39b49e31846b7","tarball":"http://localhost:4545/npm/registry/pretty-format/pretty-format-27.4.6.tgz","fileCount":27,"unpackedSize":70017,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh1NJDCRA9TVsSAnZWagAADGcP/2ypEgIC8IeRaNividZk\n12BuCGKDSc8+1dOk4ynqUhclZMM+rnWZLWqeGTEWiHyXVpLsWKyOavqA3DqH\n0Y8zcYRvinQFzEJCLalDGTgUJRcKfIYVzeXBPoyV+JcfEzW9IG3csrZSFauT\nuZ/5Q36wi843r/vc13wN+9IN3OnJVflTGA8iG80u/B7q3pzBhbNOJfMVcCpW\nnTIkgLjXzly58lUtryo8EWIIwEWA3VYH/v/A7ClfPuh2Wmp5mqTZSsAArU77\nTyhg8QDJoKm+lq3/sw8b8Z3HYfuArC4QF3oQTvg93a4yD3J2iaboCVKCumqy\n43nnqHaknkRR+YinDHPhon9m6/faxxAWP6T4a1S0QcE1jBKMzUCBTWs7QENB\ncG8KgRR+gepennaK1LNNe7mBxrOE32YXJa++kn6gYv7Nh+jKajXCiAyO3urB\nirzXZvZlEhNxYqBwr8OwYsCy6LXbfZWlblnKTGC6YqrMe12pQFxtm79+sEgs\nPBqKFac+gUroVkUNY8BxRhEGz1XO5dXdL2iOpsFAvor1cxPX1AXNBcFwKks2\n0kgGHCA/ArK/M1ebyEalj7/mobB/7OVR6k5eCuozepF1CfgXP5VrDIAexldV\nZ7Hhz9cVY9l/ii3dJVjFUXwCSVMV6cE0BG9/dcIZ+VrubJx7iIcNSWA360sK\nko8F\r\n=S8XD\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDJJKfmndKFwpQn56oiTWK+M8MRWyaUbJuYzqWjIY8mFAiAbSfjpR48K7dbgAMxToq0ig3sHSaqYPqguAmdqIdlK0Q=="}]},"_npmUser":{"name":"simenb","email":"sbekkhus91@gmail.com"},"directories":{},"maintainers":[{"name":"scotthovestadt","email":"scott.hovestadt@gmail.com"},{"name":"rubennorte","email":"rubennorte@gmail.com"},{"name":"simenb","email":"sbekkhus91@gmail.com"},{"name":"fb","email":"opensource+npm@fb.com"},{"name":"aaronabramov","email":"aaron@abramov.io"},{"name":"davidzilburg","email":"davidzilburg@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pretty-format_27.4.6_1641337411542_0.9835501585120774"},"_hasShrinkwrap":false},"27.5.0":{"name":"pretty-format","version":"27.5.0","repository":{"type":"git","url":"git+https://github.com/facebook/jest.git","directory":"packages/pretty-format"},"license":"MIT","description":"Stringify any JavaScript value.","main":"./build/index.js","types":"./build/index.d.ts","exports":{".":{"types":"./build/index.d.ts","default":"./build/index.js"},"./package.json":"./package.json"},"author":{"name":"James Kyle","email":"me@thejameskyle.com"},"dependencies":{"ansi-regex":"^5.0.1","ansi-styles":"^5.0.0","react-is":"^17.0.1"},"devDependencies":{"@types/react":"*","@types/react-is":"^17.0.0","@types/react-test-renderer":"*","immutable":"^4.0.0","jest-util":"^27.5.0","react":"*","react-dom":"*","react-test-renderer":"*"},"engines":{"node":"^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"},"publishConfig":{"access":"public"},"gitHead":"247cbe6026a590deaf0d23edecc7b2779a4aace9","bugs":{"url":"https://github.com/facebook/jest/issues"},"homepage":"https://github.com/facebook/jest#readme","_id":"pretty-format@27.5.0","_nodeVersion":"16.13.2","_npmVersion":"lerna/4.0.0/node@v16.13.2+x64 (darwin)","dist":{"integrity":"sha512-xEi6BRPZ+J1AIS4BAtFC/+rh5jXlXObGZjx5+OSpM95vR/PGla78bFVHMy5GdZjP9wk3AHAMHROXq/r69zXltw==","shasum":"71e1af7a4b587d259fa4668dcd3e94af077767cb","tarball":"http://localhost:4545/npm/registry/pretty-format/pretty-format-27.5.0.tgz","fileCount":27,"unpackedSize":70017,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh/kp2CRA9TVsSAnZWagAAd4cP/jWsJ2cwFyvZdW52LF6c\nbewMhLdU1SLEc5GRGUWJloZe5rhoqUUizKGFZsn6YKkREvs5CLIdwkY5sOxy\n1AjTfaBJWag0GRRfPh/7GdHdLJTT2h+T5Hdi9WQc/7jInXlzy5x2nIRAngSi\nf1PuhaHQapYB73FI75hzXrBGZaHdZNFbYGJrFwEMqGMNybTrqZ4ke1RDnanP\n8t4ioQeMVIf22/590uhRF19kO8/Y/BR8kddIQnzEj8Re7bkUYfpqagQeKlDi\n8EmwoZe/vpLGwbAOt3aR4XjahoECKwjHmt6/gE6fBTB9cIYGK/03xmG3+Gfz\nemEIsTXqOWO4WevPTg6a1p6XtI7NRmhmU62LCmpsKRk6TxWYmvWULCJ2LOh1\nA2ZdGGVn/efai6hDrMGiCnvKv4wTsC+JCipH5mQMB3iBrCaOsboR7JchabLC\nLnXx86AJcVdkc+QQdT87HSTfTOFy6L8/0Kwk6lB8FqZqKUHKA5r0ccoqSygz\nDrdObaXmgdNmg2BQn5kTOviLjflDt3p9WtD7R1eShgHqo5g58kRagld3NA7S\nAL8DCQmW1q4dWZ1xcFSWuEzJmRHny95TFZmH1Wu9K2gV0Kb/TtrOQ11J5bDq\nN5BN5kJmaEnrJSE2ly/tq6k8tlXQxca0uYmzL1Kmv7J9w9ars783tRgldVnw\n7bP1\r\n=KVkA\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCMSdxGm+UgElWSXOeK4U5TdS/MIV0vIuQheK82DIMFggIhAO4rFjmxHuWMxswvsNb7BzKZgpa3eJfwB9RjaL7iGIcj"}]},"_npmUser":{"name":"simenb","email":"sbekkhus91@gmail.com"},"directories":{},"maintainers":[{"name":"scotthovestadt","email":"scott.hovestadt@gmail.com"},{"name":"rubennorte","email":"rubennorte@gmail.com"},{"name":"simenb","email":"sbekkhus91@gmail.com"},{"name":"fb","email":"opensource+npm@fb.com"},{"name":"aaronabramov","email":"aaron@abramov.io"},{"name":"davidzilburg","email":"davidzilburg@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pretty-format_27.5.0_1644055157991_0.7455466791377452"},"_hasShrinkwrap":false},"27.5.1":{"name":"pretty-format","version":"27.5.1","repository":{"type":"git","url":"git+https://github.com/facebook/jest.git","directory":"packages/pretty-format"},"license":"MIT","description":"Stringify any JavaScript value.","main":"./build/index.js","types":"./build/index.d.ts","exports":{".":{"types":"./build/index.d.ts","default":"./build/index.js"},"./package.json":"./package.json","./ConvertAnsi":"./build/plugins/ConvertAnsi.js"},"author":{"name":"James Kyle","email":"me@thejameskyle.com"},"dependencies":{"ansi-regex":"^5.0.1","ansi-styles":"^5.0.0","react-is":"^17.0.1"},"devDependencies":{"@types/react":"*","@types/react-is":"^17.0.0","@types/react-test-renderer":"*","immutable":"^4.0.0","jest-util":"^27.5.1","react":"*","react-dom":"*","react-test-renderer":"*"},"engines":{"node":"^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"},"publishConfig":{"access":"public"},"gitHead":"67c1aa20c5fec31366d733e901fee2b981cb1850","bugs":{"url":"https://github.com/facebook/jest/issues"},"homepage":"https://github.com/facebook/jest#readme","_id":"pretty-format@27.5.1","_nodeVersion":"16.13.2","_npmVersion":"lerna/4.0.0/node@v16.13.2+x64 (darwin)","dist":{"integrity":"sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==","shasum":"2181879fdea51a7a5851fb39d920faa63f01d88e","tarball":"http://localhost:4545/npm/registry/pretty-format/pretty-format-27.5.1.tgz","fileCount":27,"unpackedSize":70072,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJiAktcCRA9TVsSAnZWagAA7RYP/0AOmeyoyb/fpbukfIpf\ntzXQsN/kvoSAVFWAafCUhpK3hMGuTvbsBmFbv0ySo+R8m7JGkWityuIr/yMd\npP9sjWSV5nafwG1alXbakh8hUtfwrF4s3qIGxv41rQAvVmxVSHEiZn6r63mD\nx3Mng88odNgW+x6lbwY4LJD1ORkJWoc1RtOKRLD0cgRKVfxkKc17AvZ/5mBS\nRMnfyIglisxCevPTTBZSkqXE4+fsNl0VzwE/53+BtxusFjbuWVeViNxevX56\nzdiNEGmD2SBsfIV/Q7Ekhq4+UCp8Hcjgl9aXIv+n0oWsy1cYvXqL+n3yDpMr\n9IaKHejooZ79ZMQQmpY3c9oEYcgoV63oVejGQMUUTSnojoz/J/aSIpywfrAx\nTx8LtAlInHx5hnUUO5qCpqrCLMz4PV01fSVh8Mh4sP5IVIWLkGXU6WUHVzZM\nxu+iHCJICD4sxBXQHK54GAGsdP2DwT4MQVX5kYJo2T6uh48bauUR42G4SqXE\nSHIV/Q5QmsvoOjwdn14/eZZAUIDfXYDyvEbOD2w8o2nt+594Yu0d+9jsvLTQ\nPZdzGQfuPWvOur+J0G6PE4HjOopx0xa6Wk84uIIu8iPKKLVaFv/TgxhBb7d6\neoFa3n71ltM3YR6xkQlq400KuOCSos0P6mcRE6ziYxCdsUKm0KSUUWAKA1rV\nBkJ7\r\n=m2Lf\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDABsJI95/ss8TN2+V+nzRCIrCoZoILBOhhDWy7n2bOLwIhAJoNnu/EXsUGjOx22Uyh6Sb+ueWblI8hdBNK5aqFsWyK"}]},"_npmUser":{"name":"simenb","email":"sbekkhus91@gmail.com"},"directories":{},"maintainers":[{"name":"scotthovestadt","email":"scott.hovestadt@gmail.com"},{"name":"rubennorte","email":"rubennorte@gmail.com"},{"name":"simenb","email":"sbekkhus91@gmail.com"},{"name":"fb","email":"opensource+npm@fb.com"},{"name":"aaronabramov","email":"aaron@abramov.io"},{"name":"davidzilburg","email":"davidzilburg@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pretty-format_27.5.1_1644317532029_0.3595634915881212"},"_hasShrinkwrap":false},"28.0.0-alpha.0":{"name":"pretty-format","version":"28.0.0-alpha.0","repository":{"type":"git","url":"git+https://github.com/facebook/jest.git","directory":"packages/pretty-format"},"license":"MIT","description":"Stringify any JavaScript value.","main":"./build/index.js","types":"./build/index.d.ts","exports":{".":{"types":"./build/index.d.ts","default":"./build/index.js"},"./package.json":"./package.json","./ConvertAnsi":"./build/plugins/ConvertAnsi.js"},"author":{"name":"James Kyle","email":"me@thejameskyle.com"},"dependencies":{"ansi-regex":"^5.0.1","ansi-styles":"^5.0.0","react-is":"^17.0.1"},"devDependencies":{"@types/react":"*","@types/react-is":"^17.0.0","@types/react-test-renderer":"*","immutable":"^4.0.0","jest-util":"^28.0.0-alpha.0","react":"*","react-dom":"*","react-test-renderer":"*"},"engines":{"node":"^12.13.0 || ^14.15.0 || ^16.13.0 || >=17.0.0"},"publishConfig":{"access":"public"},"gitHead":"89275b08977065d98e42ad71fcf223f4ad169f09","readme":"# pretty-format\n\nStringify any JavaScript value.\n\n- Serialize built-in JavaScript types.\n- Serialize application-specific data types with built-in or user-defined plugins.\n\n## Installation\n\n```sh\n$ yarn add pretty-format\n```\n\n## Usage\n\n```js\nconst {format: prettyFormat} = require('pretty-format'); // CommonJS\n```\n\n```js\nimport {format as prettyFormat} from 'pretty-format'; // ES2015 modules\n```\n\n```js\nconst val = {object: {}};\nval.circularReference = val;\nval[Symbol('foo')] = 'foo';\nval.map = new Map([['prop', 'value']]);\nval.array = [-0, Infinity, NaN];\n\nconsole.log(prettyFormat(val));\n/*\nObject {\n \"array\": Array [\n -0,\n Infinity,\n NaN,\n ],\n \"circularReference\": [Circular],\n \"map\": Map {\n \"prop\" => \"value\",\n },\n \"object\": Object {},\n Symbol(foo): \"foo\",\n}\n*/\n```\n\n## Usage with options\n\n```js\nfunction onClick() {}\n\nconsole.log(prettyFormat(onClick));\n/*\n[Function onClick]\n*/\n\nconst options = {\n printFunctionName: false,\n};\nconsole.log(prettyFormat(onClick, options));\n/*\n[Function]\n*/\n```\n\n\n| key | type | default | description |\n| :-------------------- | :-------- | :--------- | :------------------------------------------------------ |\n| `callToJSON` | `boolean` | `true` | call `toJSON` method (if it exists) on objects |\n| `compareKeys` | `function`| `undefined`| compare function used when sorting object keys |\n| `escapeRegex` | `boolean` | `false` | escape special characters in regular expressions |\n| `escapeString` | `boolean` | `true` | escape special characters in strings |\n| `highlight` | `boolean` | `false` | highlight syntax with colors in terminal (some plugins) |\n| `indent` | `number` | `2` | spaces in each level of indentation |\n| `maxDepth` | `number` | `Infinity` | levels to print in arrays, objects, elements, and so on |\n| `min` | `boolean` | `false` | minimize added space: no indentation nor line breaks |\n| `plugins` | `array` | `[]` | plugins to serialize application-specific data types |\n| `printBasicPrototype` | `boolean` | `false` | print the prototype for plain objects and arrays |\n| `printFunctionName` | `boolean` | `true` | include or omit the name of a function |\n| `theme` | `object` | | colors to highlight syntax in terminal |\n\nProperty values of `theme` are from [ansi-styles colors](https://github.com/chalk/ansi-styles#colors)\n\n```js\nconst DEFAULT_THEME = {\n comment: 'gray',\n content: 'reset',\n prop: 'yellow',\n tag: 'cyan',\n value: 'green',\n};\n```\n\n## Usage with plugins\n\nThe `pretty-format` package provides some built-in plugins, including:\n\n- `ReactElement` for elements from `react`\n- `ReactTestComponent` for test objects from `react-test-renderer`\n\n```js\n// CommonJS\nconst React = require('react');\nconst renderer = require('react-test-renderer');\nconst {format: prettyFormat, plugins} = require('pretty-format');\n\nconst {ReactElement, ReactTestComponent} = plugins;\n```\n\n```js\n// ES2015 modules and destructuring assignment\nimport React from 'react';\nimport renderer from 'react-test-renderer';\nimport {plugins, format as prettyFormat} from 'pretty-format';\n\nconst {ReactElement, ReactTestComponent} = plugins;\n```\n\n```js\nconst onClick = () => {};\nconst element = React.createElement('button', {onClick}, 'Hello World');\n\nconst formatted1 = prettyFormat(element, {\n plugins: [ReactElement],\n printFunctionName: false,\n});\nconst formatted2 = prettyFormat(renderer.create(element).toJSON(), {\n plugins: [ReactTestComponent],\n printFunctionName: false,\n});\n/*\n\n*/\n```\n\n## Usage in Jest\n\nFor snapshot tests, Jest uses `pretty-format` with options that include some of its built-in plugins. For this purpose, plugins are also known as **snapshot serializers**.\n\nTo serialize application-specific data types, you can add modules to `devDependencies` of a project, and then:\n\nIn an **individual** test file, you can add a module as follows. It precedes any modules from Jest configuration.\n\n```js\nimport serializer from 'my-serializer-module';\nexpect.addSnapshotSerializer(serializer);\n\n// tests which have `expect(value).toMatchSnapshot()` assertions\n```\n\nFor **all** test files, you can specify modules in Jest configuration. They precede built-in plugins for React, HTML, and Immutable.js data types. For example, in a `package.json` file:\n\n```json\n{\n \"jest\": {\n \"snapshotSerializers\": [\"my-serializer-module\"]\n }\n}\n```\n\n## Writing plugins\n\nA plugin is a JavaScript object.\n\nIf `options` has a `plugins` array: for the first plugin whose `test(val)` method returns a truthy value, then `prettyFormat(val, options)` returns the result from either:\n\n- `serialize(val, …)` method of the **improved** interface (available in **version 21** or later)\n- `print(val, …)` method of the **original** interface (if plugin does not have `serialize` method)\n\n### test\n\nWrite `test` so it can receive `val` argument of any type. To serialize **objects** which have certain properties, then a guarded expression like `val != null && …` or more concise `val && …` prevents the following errors:\n\n- `TypeError: Cannot read property 'whatever' of null`\n- `TypeError: Cannot read property 'whatever' of undefined`\n\nFor example, `test` method of built-in `ReactElement` plugin:\n\n```js\nconst elementSymbol = Symbol.for('react.element');\nconst test = val => val && val.$$typeof === elementSymbol;\n```\n\nPay attention to efficiency in `test` because `pretty-format` calls it often.\n\n### serialize\n\nThe **improved** interface is available in **version 21** or later.\n\nWrite `serialize` to return a string, given the arguments:\n\n- `val` which “passed the test”\n- unchanging `config` object: derived from `options`\n- current `indentation` string: concatenate to `indent` from `config`\n- current `depth` number: compare to `maxDepth` from `config`\n- current `refs` array: find circular references in objects\n- `printer` callback function: serialize children\n\n### config\n\n\n| key | type | description |\n| :------------------ | :-------- | :------------------------------------------------------ |\n| `callToJSON` | `boolean` | call `toJSON` method (if it exists) on objects |\n| `compareKeys` | `function`| compare function used when sorting object keys |\n| `colors` | `Object` | escape codes for colors to highlight syntax |\n| `escapeRegex` | `boolean` | escape special characters in regular expressions |\n| `escapeString` | `boolean` | escape special characters in strings |\n| `indent` | `string` | spaces in each level of indentation |\n| `maxDepth` | `number` | levels to print in arrays, objects, elements, and so on |\n| `min` | `boolean` | minimize added space: no indentation nor line breaks |\n| `plugins` | `array` | plugins to serialize application-specific data types |\n| `printFunctionName` | `boolean` | include or omit the name of a function |\n| `spacingInner` | `strong` | spacing to separate items in a list |\n| `spacingOuter` | `strong` | spacing to enclose a list of items |\n\nEach property of `colors` in `config` corresponds to a property of `theme` in `options`:\n\n- the key is the same (for example, `tag`)\n- the value in `colors` is a object with `open` and `close` properties whose values are escape codes from [ansi-styles](https://github.com/chalk/ansi-styles) for the color value in `theme` (for example, `'cyan'`)\n\nSome properties in `config` are derived from `min` in `options`:\n\n- `spacingInner` and `spacingOuter` are **newline** if `min` is `false`\n- `spacingInner` is **space** and `spacingOuter` is **empty string** if `min` is `true`\n\n### Example of serialize and test\n\nThis plugin is a pattern you can apply to serialize composite data types. Side note: `pretty-format` does not need a plugin to serialize arrays.\n\n```js\n// We reused more code when we factored out a function for child items\n// that is independent of depth, name, and enclosing punctuation (see below).\nconst SEPARATOR = ',';\nfunction serializeItems(items, config, indentation, depth, refs, printer) {\n if (items.length === 0) {\n return '';\n }\n const indentationItems = indentation + config.indent;\n return (\n config.spacingOuter +\n items\n .map(\n item =>\n indentationItems +\n printer(item, config, indentationItems, depth, refs), // callback\n )\n .join(SEPARATOR + config.spacingInner) +\n (config.min ? '' : SEPARATOR) + // following the last item\n config.spacingOuter +\n indentation\n );\n}\n\nconst plugin = {\n test(val) {\n return Array.isArray(val);\n },\n serialize(array, config, indentation, depth, refs, printer) {\n const name = array.constructor.name;\n return ++depth > config.maxDepth\n ? '[' + name + ']'\n : (config.min ? '' : name + ' ') +\n '[' +\n serializeItems(array, config, indentation, depth, refs, printer) +\n ']';\n },\n};\n```\n\n```js\nconst val = {\n filter: 'completed',\n items: [\n {\n text: 'Write test',\n completed: true,\n },\n {\n text: 'Write serialize',\n completed: true,\n },\n ],\n};\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n plugins: [plugin],\n }),\n);\n/*\nObject {\n \"filter\": \"completed\",\n \"items\": Array [\n Object {\n \"completed\": true,\n \"text\": \"Write test\",\n },\n Object {\n \"completed\": true,\n \"text\": \"Write serialize\",\n },\n ],\n}\n*/\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n indent: 4,\n plugins: [plugin],\n }),\n);\n/*\nObject {\n \"filter\": \"completed\",\n \"items\": Array [\n Object {\n \"completed\": true,\n \"text\": \"Write test\",\n },\n Object {\n \"completed\": true,\n \"text\": \"Write serialize\",\n },\n ],\n}\n*/\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n maxDepth: 1,\n plugins: [plugin],\n }),\n);\n/*\nObject {\n \"filter\": \"completed\",\n \"items\": [Array],\n}\n*/\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n min: true,\n plugins: [plugin],\n }),\n);\n/*\n{\"filter\": \"completed\", \"items\": [{\"completed\": true, \"text\": \"Write test\"}, {\"completed\": true, \"text\": \"Write serialize\"}]}\n*/\n```\n\n### print\n\nThe **original** interface is adequate for plugins:\n\n- that **do not** depend on options other than `highlight` or `min`\n- that **do not** depend on `depth` or `refs` in recursive traversal, and\n- if values either\n - do **not** require indentation, or\n - do **not** occur as children of JavaScript data structures (for example, array)\n\nWrite `print` to return a string, given the arguments:\n\n- `val` which “passed the test”\n- current `printer(valChild)` callback function: serialize children\n- current `indenter(lines)` callback function: indent lines at the next level\n- unchanging `config` object: derived from `options`\n- unchanging `colors` object: derived from `options`\n\nThe 3 properties of `config` are `min` in `options` and:\n\n- `spacing` and `edgeSpacing` are **newline** if `min` is `false`\n- `spacing` is **space** and `edgeSpacing` is **empty string** if `min` is `true`\n\nEach property of `colors` corresponds to a property of `theme` in `options`:\n\n- the key is the same (for example, `tag`)\n- the value in `colors` is a object with `open` and `close` properties whose values are escape codes from [ansi-styles](https://github.com/chalk/ansi-styles) for the color value in `theme` (for example, `'cyan'`)\n\n### Example of print and test\n\nThis plugin prints functions with the **number of named arguments** excluding rest argument.\n\n```js\nconst plugin = {\n print(val) {\n return `[Function ${val.name || 'anonymous'} ${val.length}]`;\n },\n test(val) {\n return typeof val === 'function';\n },\n};\n```\n\n```js\nconst val = {\n onClick(event) {},\n render() {},\n};\n\nprettyFormat(val, {\n plugins: [plugin],\n});\n/*\nObject {\n \"onClick\": [Function onClick 1],\n \"render\": [Function render 0],\n}\n*/\n\nprettyFormat(val);\n/*\nObject {\n \"onClick\": [Function onClick],\n \"render\": [Function render],\n}\n*/\n```\n\nThis plugin **ignores** the `printFunctionName` option. That limitation of the original `print` interface is a reason to use the improved `serialize` interface, described above.\n\n```js\nprettyFormat(val, {\n plugins: [pluginOld],\n printFunctionName: false,\n});\n/*\nObject {\n \"onClick\": [Function onClick 1],\n \"render\": [Function render 0],\n}\n*/\n\nprettyFormat(val, {\n printFunctionName: false,\n});\n/*\nObject {\n \"onClick\": [Function],\n \"render\": [Function],\n}\n*/\n```\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/facebook/jest/issues"},"homepage":"https://github.com/facebook/jest#readme","_id":"pretty-format@28.0.0-alpha.0","_nodeVersion":"16.14.0","_npmVersion":"lerna/4.0.0/node@v16.14.0+x64 (darwin)","dist":{"integrity":"sha512-/rjXgM4uOoEGOFIXb9LqDasX6SgxDatU93OFwd8/u/+Ypxe5V8jKvTlEwvDiQ4b7qZr97MolX7wVHKax6pUQoQ==","shasum":"1436aa165d4ce8bf90abb42f8d3f77b498a16d58","tarball":"http://localhost:4545/npm/registry/pretty-format/pretty-format-28.0.0-alpha.0.tgz","fileCount":16,"unpackedSize":63659,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJiBVa3CRA9TVsSAnZWagAAoBAP/Aum21RlriwLtgiUwH8e\nA0qdl5XKvqwG0SrJ3Ry7OyofQCQvO6xWGOTK4hTlVBZ5Ryz045+ltWvFw8uf\nhtw4Sg/5542+9OMogQwuM9S1aBZEmRf6kFnK8pLLHPHsW5jc9xy70Ua1mlkM\nQgjmH8O2XGQWfXNRJyOeCvKXCW4kQmRTq/5WRcZHUbKvci3pUvkwXUiQ28zx\n+34oc5YCG7EdoJkrs2PKifgrF/8tS+tWBbdPUaFNbJRKia9mIiXq1sgP7/ou\nYiZ4DSW48dlC7cRQzjF33/5rzOYuyP02DV25ODtnrApD1yqxkLIrBU4NLiaE\n7lcjp90CpPkGiSYxTuZX5CpNHca83kCRsdlgNs1BULf6l0B9/1eUqLReX1fr\np6f2l5xYgjlZ+pAQj1elKKmGjQ8rvY738bM8LtJMETCB46F+1BH1tDVjI5Iy\neTevKtxLTEEE/VqKCb9Sac85WqD2BoubX4XAW+CX3RqxZOHIEOYyEQywdvP3\nkpMuGNeo5ofNimsK2vO8YltdcVpCvtVKsf258HRhW5uX8SIPmjc455UcKoAA\neSXqojnjjzkxURJlqsbRMyXfOtjLVYha1oxxXEFHre45lFZiSQoaxqDHsBVa\nRseb8lOomeFrpPqct/T5mEMv4QevtRzGCFuazwzBf9GGsvjdx3Jy9Nz+Qcy2\nnjXr\r\n=j8SS\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC2rjAMWcQD3UPYzGqrp+uaqbr2NMCPslZIZZ2TE26dOgIgP9hamkN/4mQMoeeIvEKTFUCzxueIxVrUNXnTQcGHd3o="}]},"_npmUser":{"name":"simenb","email":"sbekkhus91@gmail.com"},"directories":{},"maintainers":[{"name":"scotthovestadt","email":"scott.hovestadt@gmail.com"},{"name":"rubennorte","email":"rubennorte@gmail.com"},{"name":"simenb","email":"sbekkhus91@gmail.com"},{"name":"fb","email":"opensource+npm@fb.com"},{"name":"aaronabramov","email":"aaron@abramov.io"},{"name":"davidzilburg","email":"davidzilburg@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pretty-format_28.0.0-alpha.0_1644517047209_0.9110405280838838"},"_hasShrinkwrap":false},"28.0.0-alpha.1":{"name":"pretty-format","version":"28.0.0-alpha.1","repository":{"type":"git","url":"git+https://github.com/facebook/jest.git","directory":"packages/pretty-format"},"license":"MIT","description":"Stringify any JavaScript value.","main":"./build/index.js","types":"./build/index.d.ts","exports":{".":{"types":"./build/index.d.ts","default":"./build/index.js"},"./package.json":"./package.json","./ConvertAnsi":"./build/plugins/ConvertAnsi.js"},"author":{"name":"James Kyle","email":"me@thejameskyle.com"},"dependencies":{"@jest/schemas":"^28.0.0-alpha.1","ansi-regex":"^5.0.1","ansi-styles":"^5.0.0","react-is":"^17.0.1"},"devDependencies":{"@types/react":"*","@types/react-is":"^17.0.0","@types/react-test-renderer":"*","immutable":"^4.0.0","jest-util":"^28.0.0-alpha.1","react":"*","react-dom":"*","react-test-renderer":"*"},"engines":{"node":"^12.13.0 || ^14.15.0 || ^16.13.0 || >=17.0.0"},"publishConfig":{"access":"public"},"gitHead":"d30164dde1847166fa0faec98d20abffd85e6ffd","readme":"# pretty-format\n\nStringify any JavaScript value.\n\n- Serialize built-in JavaScript types.\n- Serialize application-specific data types with built-in or user-defined plugins.\n\n## Installation\n\n```sh\n$ yarn add pretty-format\n```\n\n## Usage\n\n```js\nconst {format: prettyFormat} = require('pretty-format'); // CommonJS\n```\n\n```js\nimport {format as prettyFormat} from 'pretty-format'; // ES2015 modules\n```\n\n```js\nconst val = {object: {}};\nval.circularReference = val;\nval[Symbol('foo')] = 'foo';\nval.map = new Map([['prop', 'value']]);\nval.array = [-0, Infinity, NaN];\n\nconsole.log(prettyFormat(val));\n/*\nObject {\n \"array\": Array [\n -0,\n Infinity,\n NaN,\n ],\n \"circularReference\": [Circular],\n \"map\": Map {\n \"prop\" => \"value\",\n },\n \"object\": Object {},\n Symbol(foo): \"foo\",\n}\n*/\n```\n\n## Usage with options\n\n```js\nfunction onClick() {}\n\nconsole.log(prettyFormat(onClick));\n/*\n[Function onClick]\n*/\n\nconst options = {\n printFunctionName: false,\n};\nconsole.log(prettyFormat(onClick, options));\n/*\n[Function]\n*/\n```\n\n\n| key | type | default | description |\n| :-------------------- | :-------- | :--------- | :------------------------------------------------------ |\n| `callToJSON` | `boolean` | `true` | call `toJSON` method (if it exists) on objects |\n| `compareKeys` | `function`| `undefined`| compare function used when sorting object keys |\n| `escapeRegex` | `boolean` | `false` | escape special characters in regular expressions |\n| `escapeString` | `boolean` | `true` | escape special characters in strings |\n| `highlight` | `boolean` | `false` | highlight syntax with colors in terminal (some plugins) |\n| `indent` | `number` | `2` | spaces in each level of indentation |\n| `maxDepth` | `number` | `Infinity` | levels to print in arrays, objects, elements, and so on |\n| `min` | `boolean` | `false` | minimize added space: no indentation nor line breaks |\n| `plugins` | `array` | `[]` | plugins to serialize application-specific data types |\n| `printBasicPrototype` | `boolean` | `false` | print the prototype for plain objects and arrays |\n| `printFunctionName` | `boolean` | `true` | include or omit the name of a function |\n| `theme` | `object` | | colors to highlight syntax in terminal |\n\nProperty values of `theme` are from [ansi-styles colors](https://github.com/chalk/ansi-styles#colors)\n\n```js\nconst DEFAULT_THEME = {\n comment: 'gray',\n content: 'reset',\n prop: 'yellow',\n tag: 'cyan',\n value: 'green',\n};\n```\n\n## Usage with plugins\n\nThe `pretty-format` package provides some built-in plugins, including:\n\n- `ReactElement` for elements from `react`\n- `ReactTestComponent` for test objects from `react-test-renderer`\n\n```js\n// CommonJS\nconst React = require('react');\nconst renderer = require('react-test-renderer');\nconst {format: prettyFormat, plugins} = require('pretty-format');\n\nconst {ReactElement, ReactTestComponent} = plugins;\n```\n\n```js\n// ES2015 modules and destructuring assignment\nimport React from 'react';\nimport renderer from 'react-test-renderer';\nimport {plugins, format as prettyFormat} from 'pretty-format';\n\nconst {ReactElement, ReactTestComponent} = plugins;\n```\n\n```js\nconst onClick = () => {};\nconst element = React.createElement('button', {onClick}, 'Hello World');\n\nconst formatted1 = prettyFormat(element, {\n plugins: [ReactElement],\n printFunctionName: false,\n});\nconst formatted2 = prettyFormat(renderer.create(element).toJSON(), {\n plugins: [ReactTestComponent],\n printFunctionName: false,\n});\n/*\n\n*/\n```\n\n## Usage in Jest\n\nFor snapshot tests, Jest uses `pretty-format` with options that include some of its built-in plugins. For this purpose, plugins are also known as **snapshot serializers**.\n\nTo serialize application-specific data types, you can add modules to `devDependencies` of a project, and then:\n\nIn an **individual** test file, you can add a module as follows. It precedes any modules from Jest configuration.\n\n```js\nimport serializer from 'my-serializer-module';\nexpect.addSnapshotSerializer(serializer);\n\n// tests which have `expect(value).toMatchSnapshot()` assertions\n```\n\nFor **all** test files, you can specify modules in Jest configuration. They precede built-in plugins for React, HTML, and Immutable.js data types. For example, in a `package.json` file:\n\n```json\n{\n \"jest\": {\n \"snapshotSerializers\": [\"my-serializer-module\"]\n }\n}\n```\n\n## Writing plugins\n\nA plugin is a JavaScript object.\n\nIf `options` has a `plugins` array: for the first plugin whose `test(val)` method returns a truthy value, then `prettyFormat(val, options)` returns the result from either:\n\n- `serialize(val, …)` method of the **improved** interface (available in **version 21** or later)\n- `print(val, …)` method of the **original** interface (if plugin does not have `serialize` method)\n\n### test\n\nWrite `test` so it can receive `val` argument of any type. To serialize **objects** which have certain properties, then a guarded expression like `val != null && …` or more concise `val && …` prevents the following errors:\n\n- `TypeError: Cannot read property 'whatever' of null`\n- `TypeError: Cannot read property 'whatever' of undefined`\n\nFor example, `test` method of built-in `ReactElement` plugin:\n\n```js\nconst elementSymbol = Symbol.for('react.element');\nconst test = val => val && val.$$typeof === elementSymbol;\n```\n\nPay attention to efficiency in `test` because `pretty-format` calls it often.\n\n### serialize\n\nThe **improved** interface is available in **version 21** or later.\n\nWrite `serialize` to return a string, given the arguments:\n\n- `val` which “passed the test”\n- unchanging `config` object: derived from `options`\n- current `indentation` string: concatenate to `indent` from `config`\n- current `depth` number: compare to `maxDepth` from `config`\n- current `refs` array: find circular references in objects\n- `printer` callback function: serialize children\n\n### config\n\n\n| key | type | description |\n| :------------------ | :-------- | :------------------------------------------------------ |\n| `callToJSON` | `boolean` | call `toJSON` method (if it exists) on objects |\n| `compareKeys` | `function`| compare function used when sorting object keys |\n| `colors` | `Object` | escape codes for colors to highlight syntax |\n| `escapeRegex` | `boolean` | escape special characters in regular expressions |\n| `escapeString` | `boolean` | escape special characters in strings |\n| `indent` | `string` | spaces in each level of indentation |\n| `maxDepth` | `number` | levels to print in arrays, objects, elements, and so on |\n| `min` | `boolean` | minimize added space: no indentation nor line breaks |\n| `plugins` | `array` | plugins to serialize application-specific data types |\n| `printFunctionName` | `boolean` | include or omit the name of a function |\n| `spacingInner` | `strong` | spacing to separate items in a list |\n| `spacingOuter` | `strong` | spacing to enclose a list of items |\n\nEach property of `colors` in `config` corresponds to a property of `theme` in `options`:\n\n- the key is the same (for example, `tag`)\n- the value in `colors` is a object with `open` and `close` properties whose values are escape codes from [ansi-styles](https://github.com/chalk/ansi-styles) for the color value in `theme` (for example, `'cyan'`)\n\nSome properties in `config` are derived from `min` in `options`:\n\n- `spacingInner` and `spacingOuter` are **newline** if `min` is `false`\n- `spacingInner` is **space** and `spacingOuter` is **empty string** if `min` is `true`\n\n### Example of serialize and test\n\nThis plugin is a pattern you can apply to serialize composite data types. Side note: `pretty-format` does not need a plugin to serialize arrays.\n\n```js\n// We reused more code when we factored out a function for child items\n// that is independent of depth, name, and enclosing punctuation (see below).\nconst SEPARATOR = ',';\nfunction serializeItems(items, config, indentation, depth, refs, printer) {\n if (items.length === 0) {\n return '';\n }\n const indentationItems = indentation + config.indent;\n return (\n config.spacingOuter +\n items\n .map(\n item =>\n indentationItems +\n printer(item, config, indentationItems, depth, refs), // callback\n )\n .join(SEPARATOR + config.spacingInner) +\n (config.min ? '' : SEPARATOR) + // following the last item\n config.spacingOuter +\n indentation\n );\n}\n\nconst plugin = {\n test(val) {\n return Array.isArray(val);\n },\n serialize(array, config, indentation, depth, refs, printer) {\n const name = array.constructor.name;\n return ++depth > config.maxDepth\n ? '[' + name + ']'\n : (config.min ? '' : name + ' ') +\n '[' +\n serializeItems(array, config, indentation, depth, refs, printer) +\n ']';\n },\n};\n```\n\n```js\nconst val = {\n filter: 'completed',\n items: [\n {\n text: 'Write test',\n completed: true,\n },\n {\n text: 'Write serialize',\n completed: true,\n },\n ],\n};\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n plugins: [plugin],\n }),\n);\n/*\nObject {\n \"filter\": \"completed\",\n \"items\": Array [\n Object {\n \"completed\": true,\n \"text\": \"Write test\",\n },\n Object {\n \"completed\": true,\n \"text\": \"Write serialize\",\n },\n ],\n}\n*/\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n indent: 4,\n plugins: [plugin],\n }),\n);\n/*\nObject {\n \"filter\": \"completed\",\n \"items\": Array [\n Object {\n \"completed\": true,\n \"text\": \"Write test\",\n },\n Object {\n \"completed\": true,\n \"text\": \"Write serialize\",\n },\n ],\n}\n*/\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n maxDepth: 1,\n plugins: [plugin],\n }),\n);\n/*\nObject {\n \"filter\": \"completed\",\n \"items\": [Array],\n}\n*/\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n min: true,\n plugins: [plugin],\n }),\n);\n/*\n{\"filter\": \"completed\", \"items\": [{\"completed\": true, \"text\": \"Write test\"}, {\"completed\": true, \"text\": \"Write serialize\"}]}\n*/\n```\n\n### print\n\nThe **original** interface is adequate for plugins:\n\n- that **do not** depend on options other than `highlight` or `min`\n- that **do not** depend on `depth` or `refs` in recursive traversal, and\n- if values either\n - do **not** require indentation, or\n - do **not** occur as children of JavaScript data structures (for example, array)\n\nWrite `print` to return a string, given the arguments:\n\n- `val` which “passed the test”\n- current `printer(valChild)` callback function: serialize children\n- current `indenter(lines)` callback function: indent lines at the next level\n- unchanging `config` object: derived from `options`\n- unchanging `colors` object: derived from `options`\n\nThe 3 properties of `config` are `min` in `options` and:\n\n- `spacing` and `edgeSpacing` are **newline** if `min` is `false`\n- `spacing` is **space** and `edgeSpacing` is **empty string** if `min` is `true`\n\nEach property of `colors` corresponds to a property of `theme` in `options`:\n\n- the key is the same (for example, `tag`)\n- the value in `colors` is a object with `open` and `close` properties whose values are escape codes from [ansi-styles](https://github.com/chalk/ansi-styles) for the color value in `theme` (for example, `'cyan'`)\n\n### Example of print and test\n\nThis plugin prints functions with the **number of named arguments** excluding rest argument.\n\n```js\nconst plugin = {\n print(val) {\n return `[Function ${val.name || 'anonymous'} ${val.length}]`;\n },\n test(val) {\n return typeof val === 'function';\n },\n};\n```\n\n```js\nconst val = {\n onClick(event) {},\n render() {},\n};\n\nprettyFormat(val, {\n plugins: [plugin],\n});\n/*\nObject {\n \"onClick\": [Function onClick 1],\n \"render\": [Function render 0],\n}\n*/\n\nprettyFormat(val);\n/*\nObject {\n \"onClick\": [Function onClick],\n \"render\": [Function render],\n}\n*/\n```\n\nThis plugin **ignores** the `printFunctionName` option. That limitation of the original `print` interface is a reason to use the improved `serialize` interface, described above.\n\n```js\nprettyFormat(val, {\n plugins: [pluginOld],\n printFunctionName: false,\n});\n/*\nObject {\n \"onClick\": [Function onClick 1],\n \"render\": [Function render 0],\n}\n*/\n\nprettyFormat(val, {\n printFunctionName: false,\n});\n/*\nObject {\n \"onClick\": [Function],\n \"render\": [Function],\n}\n*/\n```\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/facebook/jest/issues"},"homepage":"https://github.com/facebook/jest#readme","_id":"pretty-format@28.0.0-alpha.1","_nodeVersion":"16.14.0","_npmVersion":"lerna/4.0.0/node@v16.14.0+x64 (darwin)","dist":{"integrity":"sha512-QhGbrWAhSSEBHqdUj2pAy9MuR4QLBhLfCUENh+bhOWO0tcbqgNSvnbfLUkMroAcFUZIEzBwiOxxngKS2rHvWgA==","shasum":"3a87ad1585b52dd3c314b35badf99e1bdf823bb9","tarball":"http://localhost:4545/npm/registry/pretty-format/pretty-format-28.0.0-alpha.1.tgz","fileCount":16,"unpackedSize":63251,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJiDBqeCRA9TVsSAnZWagAACpAP/3L3LmqL8D3Hn8XUX9B0\nXxjNipMn4fjUbM5YjkzGqG32v93vqKnz3rpT0nDObi02l5K4dCwlFi4E0+QP\nnCngt/sLBFeMqLFCt37dv8LcqVgZQGny81JERvjMYWmaBHAwYPpFciQJsm6Y\np9wY/aN0Auu/eJEjepOmnwKjL/Rm00YQOaij2vyMD7UweOgxof+RpBWSqLlM\nBhRVA3ccB8+684JxZEXtTzruXc0qveopxJ4xjNjQGERrxP2/JZsGf/hppb9g\nks+to5J0zRXh9a8rdy7ODHOPbjOqzOLcgW/29+c5wNODmfFw+Z0XPo6VoEcF\nORT1AaWOu9jFi+S3Vq5QJxCNunB2hmDM5ybw7VT3JrLLDY8Y7G4skhrckThQ\nsX6TNh8I5wxR8Atw+CT298FCFspqVzv1yn2KQFNS3f0Ak7dpMIFrJCHP7wFz\nnCRCcHxmWSEXjREN6JyjSRYHTH5x/K2KYAtjjKQGYz9+kvypSTIJwpSX3YL0\nSiQgqJ48cItUlozttm3FnEVeUQpEzlZOPdGFSJsdzF8fJrVQGPP+izi8Tajq\nTKZqedc8IuoZzhyRrUcPe3WKipWAsESytwvXahrbVAL9I/VAGKOARz2H3kj0\nw7gn+ki9eX8hO7J9rzsMXhjY/odcmmLpeuQs4LgYi2qVzLplzZj2yxSvc3P3\nl8Ec\r\n=o9Xz\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBC8p1pxhPymqyFymaYozjt8sYFeIewGFM9RkRS1481/AiEAt6Drsn5L14VDmY1ojktjbAs0suGG25xdzBDZmp90lS0="}]},"_npmUser":{"name":"simenb","email":"sbekkhus91@gmail.com"},"directories":{},"maintainers":[{"name":"scotthovestadt","email":"scott.hovestadt@gmail.com"},{"name":"rubennorte","email":"rubennorte@gmail.com"},{"name":"simenb","email":"sbekkhus91@gmail.com"},{"name":"fb","email":"opensource+npm@fb.com"},{"name":"aaronabramov","email":"aaron@abramov.io"},{"name":"davidzilburg","email":"davidzilburg@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pretty-format_28.0.0-alpha.1_1644960414110_0.8406425425879609"},"_hasShrinkwrap":false},"28.0.0-alpha.2":{"name":"pretty-format","version":"28.0.0-alpha.2","repository":{"type":"git","url":"git+https://github.com/facebook/jest.git","directory":"packages/pretty-format"},"license":"MIT","description":"Stringify any JavaScript value.","main":"./build/index.js","types":"./build/index.d.ts","exports":{".":{"types":"./build/index.d.ts","default":"./build/index.js"},"./package.json":"./package.json","./ConvertAnsi":"./build/plugins/ConvertAnsi.js"},"author":{"name":"James Kyle","email":"me@thejameskyle.com"},"dependencies":{"@jest/schemas":"^28.0.0-alpha.2","ansi-regex":"^5.0.1","ansi-styles":"^5.0.0","react-is":"^17.0.1"},"devDependencies":{"@types/react":"*","@types/react-is":"^17.0.0","@types/react-test-renderer":"*","immutable":"^4.0.0","jest-util":"^28.0.0-alpha.2","react":"*","react-dom":"*","react-test-renderer":"*"},"engines":{"node":"^12.13.0 || ^14.15.0 || ^16.13.0 || >=17.0.0"},"publishConfig":{"access":"public"},"gitHead":"694d6bfea56f9cb49d0c7309cdbfff032da198c2","readme":"# pretty-format\n\nStringify any JavaScript value.\n\n- Serialize built-in JavaScript types.\n- Serialize application-specific data types with built-in or user-defined plugins.\n\n## Installation\n\n```sh\n$ yarn add pretty-format\n```\n\n## Usage\n\n```js\nconst {format: prettyFormat} = require('pretty-format'); // CommonJS\n```\n\n```js\nimport {format as prettyFormat} from 'pretty-format'; // ES2015 modules\n```\n\n```js\nconst val = {object: {}};\nval.circularReference = val;\nval[Symbol('foo')] = 'foo';\nval.map = new Map([['prop', 'value']]);\nval.array = [-0, Infinity, NaN];\n\nconsole.log(prettyFormat(val));\n/*\nObject {\n \"array\": Array [\n -0,\n Infinity,\n NaN,\n ],\n \"circularReference\": [Circular],\n \"map\": Map {\n \"prop\" => \"value\",\n },\n \"object\": Object {},\n Symbol(foo): \"foo\",\n}\n*/\n```\n\n## Usage with options\n\n```js\nfunction onClick() {}\n\nconsole.log(prettyFormat(onClick));\n/*\n[Function onClick]\n*/\n\nconst options = {\n printFunctionName: false,\n};\nconsole.log(prettyFormat(onClick, options));\n/*\n[Function]\n*/\n```\n\n\n| key | type | default | description |\n| :-------------------- | :-------- | :--------- | :------------------------------------------------------ |\n| `callToJSON` | `boolean` | `true` | call `toJSON` method (if it exists) on objects |\n| `compareKeys` | `function`| `undefined`| compare function used when sorting object keys |\n| `escapeRegex` | `boolean` | `false` | escape special characters in regular expressions |\n| `escapeString` | `boolean` | `true` | escape special characters in strings |\n| `highlight` | `boolean` | `false` | highlight syntax with colors in terminal (some plugins) |\n| `indent` | `number` | `2` | spaces in each level of indentation |\n| `maxDepth` | `number` | `Infinity` | levels to print in arrays, objects, elements, and so on |\n| `maxWidth` | `number` | `Infinity` | number of elements to print in arrays, sets, and so on |\n| `min` | `boolean` | `false` | minimize added space: no indentation nor line breaks |\n| `plugins` | `array` | `[]` | plugins to serialize application-specific data types |\n| `printBasicPrototype` | `boolean` | `false` | print the prototype for plain objects and arrays |\n| `printFunctionName` | `boolean` | `true` | include or omit the name of a function |\n| `theme` | `object` | | colors to highlight syntax in terminal |\n\nProperty values of `theme` are from [ansi-styles colors](https://github.com/chalk/ansi-styles#colors)\n\n```js\nconst DEFAULT_THEME = {\n comment: 'gray',\n content: 'reset',\n prop: 'yellow',\n tag: 'cyan',\n value: 'green',\n};\n```\n\n## Usage with plugins\n\nThe `pretty-format` package provides some built-in plugins, including:\n\n- `ReactElement` for elements from `react`\n- `ReactTestComponent` for test objects from `react-test-renderer`\n\n```js\n// CommonJS\nconst React = require('react');\nconst renderer = require('react-test-renderer');\nconst {format: prettyFormat, plugins} = require('pretty-format');\n\nconst {ReactElement, ReactTestComponent} = plugins;\n```\n\n```js\n// ES2015 modules and destructuring assignment\nimport React from 'react';\nimport renderer from 'react-test-renderer';\nimport {plugins, format as prettyFormat} from 'pretty-format';\n\nconst {ReactElement, ReactTestComponent} = plugins;\n```\n\n```js\nconst onClick = () => {};\nconst element = React.createElement('button', {onClick}, 'Hello World');\n\nconst formatted1 = prettyFormat(element, {\n plugins: [ReactElement],\n printFunctionName: false,\n});\nconst formatted2 = prettyFormat(renderer.create(element).toJSON(), {\n plugins: [ReactTestComponent],\n printFunctionName: false,\n});\n/*\n\n*/\n```\n\n## Usage in Jest\n\nFor snapshot tests, Jest uses `pretty-format` with options that include some of its built-in plugins. For this purpose, plugins are also known as **snapshot serializers**.\n\nTo serialize application-specific data types, you can add modules to `devDependencies` of a project, and then:\n\nIn an **individual** test file, you can add a module as follows. It precedes any modules from Jest configuration.\n\n```js\nimport serializer from 'my-serializer-module';\nexpect.addSnapshotSerializer(serializer);\n\n// tests which have `expect(value).toMatchSnapshot()` assertions\n```\n\nFor **all** test files, you can specify modules in Jest configuration. They precede built-in plugins for React, HTML, and Immutable.js data types. For example, in a `package.json` file:\n\n```json\n{\n \"jest\": {\n \"snapshotSerializers\": [\"my-serializer-module\"]\n }\n}\n```\n\n## Writing plugins\n\nA plugin is a JavaScript object.\n\nIf `options` has a `plugins` array: for the first plugin whose `test(val)` method returns a truthy value, then `prettyFormat(val, options)` returns the result from either:\n\n- `serialize(val, …)` method of the **improved** interface (available in **version 21** or later)\n- `print(val, …)` method of the **original** interface (if plugin does not have `serialize` method)\n\n### test\n\nWrite `test` so it can receive `val` argument of any type. To serialize **objects** which have certain properties, then a guarded expression like `val != null && …` or more concise `val && …` prevents the following errors:\n\n- `TypeError: Cannot read property 'whatever' of null`\n- `TypeError: Cannot read property 'whatever' of undefined`\n\nFor example, `test` method of built-in `ReactElement` plugin:\n\n```js\nconst elementSymbol = Symbol.for('react.element');\nconst test = val => val && val.$$typeof === elementSymbol;\n```\n\nPay attention to efficiency in `test` because `pretty-format` calls it often.\n\n### serialize\n\nThe **improved** interface is available in **version 21** or later.\n\nWrite `serialize` to return a string, given the arguments:\n\n- `val` which “passed the test”\n- unchanging `config` object: derived from `options`\n- current `indentation` string: concatenate to `indent` from `config`\n- current `depth` number: compare to `maxDepth` from `config`\n- current `refs` array: find circular references in objects\n- `printer` callback function: serialize children\n\n### config\n\n\n| key | type | description |\n| :------------------ | :-------- | :------------------------------------------------------ |\n| `callToJSON` | `boolean` | call `toJSON` method (if it exists) on objects |\n| `compareKeys` | `function`| compare function used when sorting object keys |\n| `colors` | `Object` | escape codes for colors to highlight syntax |\n| `escapeRegex` | `boolean` | escape special characters in regular expressions |\n| `escapeString` | `boolean` | escape special characters in strings |\n| `indent` | `string` | spaces in each level of indentation |\n| `maxDepth` | `number` | levels to print in arrays, objects, elements, and so on |\n| `min` | `boolean` | minimize added space: no indentation nor line breaks |\n| `plugins` | `array` | plugins to serialize application-specific data types |\n| `printFunctionName` | `boolean` | include or omit the name of a function |\n| `spacingInner` | `strong` | spacing to separate items in a list |\n| `spacingOuter` | `strong` | spacing to enclose a list of items |\n\nEach property of `colors` in `config` corresponds to a property of `theme` in `options`:\n\n- the key is the same (for example, `tag`)\n- the value in `colors` is a object with `open` and `close` properties whose values are escape codes from [ansi-styles](https://github.com/chalk/ansi-styles) for the color value in `theme` (for example, `'cyan'`)\n\nSome properties in `config` are derived from `min` in `options`:\n\n- `spacingInner` and `spacingOuter` are **newline** if `min` is `false`\n- `spacingInner` is **space** and `spacingOuter` is **empty string** if `min` is `true`\n\n### Example of serialize and test\n\nThis plugin is a pattern you can apply to serialize composite data types. Side note: `pretty-format` does not need a plugin to serialize arrays.\n\n```js\n// We reused more code when we factored out a function for child items\n// that is independent of depth, name, and enclosing punctuation (see below).\nconst SEPARATOR = ',';\nfunction serializeItems(items, config, indentation, depth, refs, printer) {\n if (items.length === 0) {\n return '';\n }\n const indentationItems = indentation + config.indent;\n return (\n config.spacingOuter +\n items\n .map(\n item =>\n indentationItems +\n printer(item, config, indentationItems, depth, refs), // callback\n )\n .join(SEPARATOR + config.spacingInner) +\n (config.min ? '' : SEPARATOR) + // following the last item\n config.spacingOuter +\n indentation\n );\n}\n\nconst plugin = {\n test(val) {\n return Array.isArray(val);\n },\n serialize(array, config, indentation, depth, refs, printer) {\n const name = array.constructor.name;\n return ++depth > config.maxDepth\n ? '[' + name + ']'\n : (config.min ? '' : name + ' ') +\n '[' +\n serializeItems(array, config, indentation, depth, refs, printer) +\n ']';\n },\n};\n```\n\n```js\nconst val = {\n filter: 'completed',\n items: [\n {\n text: 'Write test',\n completed: true,\n },\n {\n text: 'Write serialize',\n completed: true,\n },\n ],\n};\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n plugins: [plugin],\n }),\n);\n/*\nObject {\n \"filter\": \"completed\",\n \"items\": Array [\n Object {\n \"completed\": true,\n \"text\": \"Write test\",\n },\n Object {\n \"completed\": true,\n \"text\": \"Write serialize\",\n },\n ],\n}\n*/\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n indent: 4,\n plugins: [plugin],\n }),\n);\n/*\nObject {\n \"filter\": \"completed\",\n \"items\": Array [\n Object {\n \"completed\": true,\n \"text\": \"Write test\",\n },\n Object {\n \"completed\": true,\n \"text\": \"Write serialize\",\n },\n ],\n}\n*/\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n maxDepth: 1,\n plugins: [plugin],\n }),\n);\n/*\nObject {\n \"filter\": \"completed\",\n \"items\": [Array],\n}\n*/\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n min: true,\n plugins: [plugin],\n }),\n);\n/*\n{\"filter\": \"completed\", \"items\": [{\"completed\": true, \"text\": \"Write test\"}, {\"completed\": true, \"text\": \"Write serialize\"}]}\n*/\n```\n\n### print\n\nThe **original** interface is adequate for plugins:\n\n- that **do not** depend on options other than `highlight` or `min`\n- that **do not** depend on `depth` or `refs` in recursive traversal, and\n- if values either\n - do **not** require indentation, or\n - do **not** occur as children of JavaScript data structures (for example, array)\n\nWrite `print` to return a string, given the arguments:\n\n- `val` which “passed the test”\n- current `printer(valChild)` callback function: serialize children\n- current `indenter(lines)` callback function: indent lines at the next level\n- unchanging `config` object: derived from `options`\n- unchanging `colors` object: derived from `options`\n\nThe 3 properties of `config` are `min` in `options` and:\n\n- `spacing` and `edgeSpacing` are **newline** if `min` is `false`\n- `spacing` is **space** and `edgeSpacing` is **empty string** if `min` is `true`\n\nEach property of `colors` corresponds to a property of `theme` in `options`:\n\n- the key is the same (for example, `tag`)\n- the value in `colors` is a object with `open` and `close` properties whose values are escape codes from [ansi-styles](https://github.com/chalk/ansi-styles) for the color value in `theme` (for example, `'cyan'`)\n\n### Example of print and test\n\nThis plugin prints functions with the **number of named arguments** excluding rest argument.\n\n```js\nconst plugin = {\n print(val) {\n return `[Function ${val.name || 'anonymous'} ${val.length}]`;\n },\n test(val) {\n return typeof val === 'function';\n },\n};\n```\n\n```js\nconst val = {\n onClick(event) {},\n render() {},\n};\n\nprettyFormat(val, {\n plugins: [plugin],\n});\n/*\nObject {\n \"onClick\": [Function onClick 1],\n \"render\": [Function render 0],\n}\n*/\n\nprettyFormat(val);\n/*\nObject {\n \"onClick\": [Function onClick],\n \"render\": [Function render],\n}\n*/\n```\n\nThis plugin **ignores** the `printFunctionName` option. That limitation of the original `print` interface is a reason to use the improved `serialize` interface, described above.\n\n```js\nprettyFormat(val, {\n plugins: [pluginOld],\n printFunctionName: false,\n});\n/*\nObject {\n \"onClick\": [Function onClick 1],\n \"render\": [Function render 0],\n}\n*/\n\nprettyFormat(val, {\n printFunctionName: false,\n});\n/*\nObject {\n \"onClick\": [Function],\n \"render\": [Function],\n}\n*/\n```\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/facebook/jest/issues"},"homepage":"https://github.com/facebook/jest#readme","_id":"pretty-format@28.0.0-alpha.2","_nodeVersion":"16.14.0","_npmVersion":"lerna/4.0.0/node@v16.14.0+x64 (darwin)","dist":{"integrity":"sha512-X7v9c9KuJJhH7Ue7a/grXlLzrpUzjdHCgf8lbbg/r+sX6syzUPLTKdiyxQGFhAYttZPRwmzRC/kVY50f97aDmg==","shasum":"e89a8b3d77b6e5bc1cb9a57fcb68089fbc96cee7","tarball":"http://localhost:4545/npm/registry/pretty-format/pretty-format-28.0.0-alpha.2.tgz","fileCount":16,"unpackedSize":65283,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJiDT5wCRA9TVsSAnZWagAArgEP/2MaKhkTx6zcbvcevbWB\nEmK9UF1VnH2PYbWl2+903dvw7TaOGCkrY+PV0I1JPTnoDKkfxZJkJphv5i7h\npEK0edGcoDjbJRd86aW4BixkeaMLiESdDMTB2Bw95SR0JZtE4E2cbbVjtQAY\ny56O1x/8Ha4s/GrMtThYi45Pj6DaamQRTgfeEg8Bm8kcwM2zniWvewku2n+O\neIKRz7Mp5z67prlAyeRQkTB5h4o7s/1OIYjV6AGXt8ODCgeF+7zJeBuuUW8N\nE6hdzy563DMcpcZ8Y5D+7T11qwYq30QVc3fKckkVE1ZY/H6ER8v3F8qyeFc5\n6yy6nU1wZKwks3ACmd/chnS/rT3s6y6RIuOjEamsy09wtgsCEigTO6cjElt1\nss8yUoL7UOpud5S6lND7ExxIYrFIbvN8B6M722wOu8YA+tSzOMHHaHhCQiHw\nMeseWpPvMO6Mv1OgL2VNlRBMnlHZ1uETjgg0V/kDlah5J79hu+T7q9Fd6sCY\nl5nyCzJBUZSHDbAdsYvkkIqdjrzElsS2WbTsE9XwJP1ihqMt/h7QFI8OjND+\nC4dLGyBD1g+81t/PDwFBV/bCcAjOhd/4uSwXUz1ddFM5GLJ64rQm4qyCkjZp\nLNa3uVrURJ8fD1BkNlfGu58tfWcSlC9pEZvRV27b1XByEhOn853U7DWt0lHM\nNarA\r\n=6NeP\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICwqTj1ggB0djmgR8aY32yZn8Gnf+4xmvUiAe9Og2+TrAiA1bGo2PV55lJ52miG3BaTLJDwbe2R6fBNdhjbK4/Pq2Q=="}]},"_npmUser":{"name":"simenb","email":"sbekkhus91@gmail.com"},"directories":{},"maintainers":[{"name":"scotthovestadt","email":"scott.hovestadt@gmail.com"},{"name":"rubennorte","email":"rubennorte@gmail.com"},{"name":"simenb","email":"sbekkhus91@gmail.com"},{"name":"fb","email":"opensource+npm@fb.com"},{"name":"aaronabramov","email":"aaron@abramov.io"},{"name":"davidzilburg","email":"davidzilburg@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pretty-format_28.0.0-alpha.2_1645035120150_0.4279390848744169"},"_hasShrinkwrap":false},"28.0.0-alpha.3":{"name":"pretty-format","version":"28.0.0-alpha.3","repository":{"type":"git","url":"git+https://github.com/facebook/jest.git","directory":"packages/pretty-format"},"license":"MIT","description":"Stringify any JavaScript value.","main":"./build/index.js","types":"./build/index.d.ts","exports":{".":{"types":"./build/index.d.ts","default":"./build/index.js"},"./package.json":"./package.json","./ConvertAnsi":"./build/plugins/ConvertAnsi.js"},"author":{"name":"James Kyle","email":"me@thejameskyle.com"},"dependencies":{"@jest/schemas":"^28.0.0-alpha.3","ansi-regex":"^5.0.1","ansi-styles":"^5.0.0","react-is":"^17.0.1"},"devDependencies":{"@types/react":"*","@types/react-is":"^17.0.0","@types/react-test-renderer":"*","immutable":"^4.0.0","jest-util":"^28.0.0-alpha.3","react":"*","react-dom":"*","react-test-renderer":"*"},"engines":{"node":"^12.13.0 || ^14.15.0 || ^16.13.0 || >=17.0.0"},"publishConfig":{"access":"public"},"gitHead":"fc30b27bd94bb7ebeaadc72626ebbdba535150d2","readme":"# pretty-format\n\nStringify any JavaScript value.\n\n- Serialize built-in JavaScript types.\n- Serialize application-specific data types with built-in or user-defined plugins.\n\n## Installation\n\n```sh\n$ yarn add pretty-format\n```\n\n## Usage\n\n```js\nconst {format: prettyFormat} = require('pretty-format'); // CommonJS\n```\n\n```js\nimport {format as prettyFormat} from 'pretty-format'; // ES2015 modules\n```\n\n```js\nconst val = {object: {}};\nval.circularReference = val;\nval[Symbol('foo')] = 'foo';\nval.map = new Map([['prop', 'value']]);\nval.array = [-0, Infinity, NaN];\n\nconsole.log(prettyFormat(val));\n/*\nObject {\n \"array\": Array [\n -0,\n Infinity,\n NaN,\n ],\n \"circularReference\": [Circular],\n \"map\": Map {\n \"prop\" => \"value\",\n },\n \"object\": Object {},\n Symbol(foo): \"foo\",\n}\n*/\n```\n\n## Usage with options\n\n```js\nfunction onClick() {}\n\nconsole.log(prettyFormat(onClick));\n/*\n[Function onClick]\n*/\n\nconst options = {\n printFunctionName: false,\n};\nconsole.log(prettyFormat(onClick, options));\n/*\n[Function]\n*/\n```\n\n\n| key | type | default | description |\n| :-------------------- | :-------- | :--------- | :------------------------------------------------------ |\n| `callToJSON` | `boolean` | `true` | call `toJSON` method (if it exists) on objects |\n| `compareKeys` | `function`| `undefined`| compare function used when sorting object keys |\n| `escapeRegex` | `boolean` | `false` | escape special characters in regular expressions |\n| `escapeString` | `boolean` | `true` | escape special characters in strings |\n| `highlight` | `boolean` | `false` | highlight syntax with colors in terminal (some plugins) |\n| `indent` | `number` | `2` | spaces in each level of indentation |\n| `maxDepth` | `number` | `Infinity` | levels to print in arrays, objects, elements, and so on |\n| `maxWidth` | `number` | `Infinity` | number of elements to print in arrays, sets, and so on |\n| `min` | `boolean` | `false` | minimize added space: no indentation nor line breaks |\n| `plugins` | `array` | `[]` | plugins to serialize application-specific data types |\n| `printBasicPrototype` | `boolean` | `false` | print the prototype for plain objects and arrays |\n| `printFunctionName` | `boolean` | `true` | include or omit the name of a function |\n| `theme` | `object` | | colors to highlight syntax in terminal |\n\nProperty values of `theme` are from [ansi-styles colors](https://github.com/chalk/ansi-styles#colors)\n\n```js\nconst DEFAULT_THEME = {\n comment: 'gray',\n content: 'reset',\n prop: 'yellow',\n tag: 'cyan',\n value: 'green',\n};\n```\n\n## Usage with plugins\n\nThe `pretty-format` package provides some built-in plugins, including:\n\n- `ReactElement` for elements from `react`\n- `ReactTestComponent` for test objects from `react-test-renderer`\n\n```js\n// CommonJS\nconst React = require('react');\nconst renderer = require('react-test-renderer');\nconst {format: prettyFormat, plugins} = require('pretty-format');\n\nconst {ReactElement, ReactTestComponent} = plugins;\n```\n\n```js\n// ES2015 modules and destructuring assignment\nimport React from 'react';\nimport renderer from 'react-test-renderer';\nimport {plugins, format as prettyFormat} from 'pretty-format';\n\nconst {ReactElement, ReactTestComponent} = plugins;\n```\n\n```js\nconst onClick = () => {};\nconst element = React.createElement('button', {onClick}, 'Hello World');\n\nconst formatted1 = prettyFormat(element, {\n plugins: [ReactElement],\n printFunctionName: false,\n});\nconst formatted2 = prettyFormat(renderer.create(element).toJSON(), {\n plugins: [ReactTestComponent],\n printFunctionName: false,\n});\n/*\n\n*/\n```\n\n## Usage in Jest\n\nFor snapshot tests, Jest uses `pretty-format` with options that include some of its built-in plugins. For this purpose, plugins are also known as **snapshot serializers**.\n\nTo serialize application-specific data types, you can add modules to `devDependencies` of a project, and then:\n\nIn an **individual** test file, you can add a module as follows. It precedes any modules from Jest configuration.\n\n```js\nimport serializer from 'my-serializer-module';\nexpect.addSnapshotSerializer(serializer);\n\n// tests which have `expect(value).toMatchSnapshot()` assertions\n```\n\nFor **all** test files, you can specify modules in Jest configuration. They precede built-in plugins for React, HTML, and Immutable.js data types. For example, in a `package.json` file:\n\n```json\n{\n \"jest\": {\n \"snapshotSerializers\": [\"my-serializer-module\"]\n }\n}\n```\n\n## Writing plugins\n\nA plugin is a JavaScript object.\n\nIf `options` has a `plugins` array: for the first plugin whose `test(val)` method returns a truthy value, then `prettyFormat(val, options)` returns the result from either:\n\n- `serialize(val, …)` method of the **improved** interface (available in **version 21** or later)\n- `print(val, …)` method of the **original** interface (if plugin does not have `serialize` method)\n\n### test\n\nWrite `test` so it can receive `val` argument of any type. To serialize **objects** which have certain properties, then a guarded expression like `val != null && …` or more concise `val && …` prevents the following errors:\n\n- `TypeError: Cannot read property 'whatever' of null`\n- `TypeError: Cannot read property 'whatever' of undefined`\n\nFor example, `test` method of built-in `ReactElement` plugin:\n\n```js\nconst elementSymbol = Symbol.for('react.element');\nconst test = val => val && val.$$typeof === elementSymbol;\n```\n\nPay attention to efficiency in `test` because `pretty-format` calls it often.\n\n### serialize\n\nThe **improved** interface is available in **version 21** or later.\n\nWrite `serialize` to return a string, given the arguments:\n\n- `val` which “passed the test”\n- unchanging `config` object: derived from `options`\n- current `indentation` string: concatenate to `indent` from `config`\n- current `depth` number: compare to `maxDepth` from `config`\n- current `refs` array: find circular references in objects\n- `printer` callback function: serialize children\n\n### config\n\n\n| key | type | description |\n| :------------------ | :-------- | :------------------------------------------------------ |\n| `callToJSON` | `boolean` | call `toJSON` method (if it exists) on objects |\n| `compareKeys` | `function`| compare function used when sorting object keys |\n| `colors` | `Object` | escape codes for colors to highlight syntax |\n| `escapeRegex` | `boolean` | escape special characters in regular expressions |\n| `escapeString` | `boolean` | escape special characters in strings |\n| `indent` | `string` | spaces in each level of indentation |\n| `maxDepth` | `number` | levels to print in arrays, objects, elements, and so on |\n| `min` | `boolean` | minimize added space: no indentation nor line breaks |\n| `plugins` | `array` | plugins to serialize application-specific data types |\n| `printFunctionName` | `boolean` | include or omit the name of a function |\n| `spacingInner` | `strong` | spacing to separate items in a list |\n| `spacingOuter` | `strong` | spacing to enclose a list of items |\n\nEach property of `colors` in `config` corresponds to a property of `theme` in `options`:\n\n- the key is the same (for example, `tag`)\n- the value in `colors` is a object with `open` and `close` properties whose values are escape codes from [ansi-styles](https://github.com/chalk/ansi-styles) for the color value in `theme` (for example, `'cyan'`)\n\nSome properties in `config` are derived from `min` in `options`:\n\n- `spacingInner` and `spacingOuter` are **newline** if `min` is `false`\n- `spacingInner` is **space** and `spacingOuter` is **empty string** if `min` is `true`\n\n### Example of serialize and test\n\nThis plugin is a pattern you can apply to serialize composite data types. Side note: `pretty-format` does not need a plugin to serialize arrays.\n\n```js\n// We reused more code when we factored out a function for child items\n// that is independent of depth, name, and enclosing punctuation (see below).\nconst SEPARATOR = ',';\nfunction serializeItems(items, config, indentation, depth, refs, printer) {\n if (items.length === 0) {\n return '';\n }\n const indentationItems = indentation + config.indent;\n return (\n config.spacingOuter +\n items\n .map(\n item =>\n indentationItems +\n printer(item, config, indentationItems, depth, refs), // callback\n )\n .join(SEPARATOR + config.spacingInner) +\n (config.min ? '' : SEPARATOR) + // following the last item\n config.spacingOuter +\n indentation\n );\n}\n\nconst plugin = {\n test(val) {\n return Array.isArray(val);\n },\n serialize(array, config, indentation, depth, refs, printer) {\n const name = array.constructor.name;\n return ++depth > config.maxDepth\n ? '[' + name + ']'\n : (config.min ? '' : name + ' ') +\n '[' +\n serializeItems(array, config, indentation, depth, refs, printer) +\n ']';\n },\n};\n```\n\n```js\nconst val = {\n filter: 'completed',\n items: [\n {\n text: 'Write test',\n completed: true,\n },\n {\n text: 'Write serialize',\n completed: true,\n },\n ],\n};\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n plugins: [plugin],\n }),\n);\n/*\nObject {\n \"filter\": \"completed\",\n \"items\": Array [\n Object {\n \"completed\": true,\n \"text\": \"Write test\",\n },\n Object {\n \"completed\": true,\n \"text\": \"Write serialize\",\n },\n ],\n}\n*/\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n indent: 4,\n plugins: [plugin],\n }),\n);\n/*\nObject {\n \"filter\": \"completed\",\n \"items\": Array [\n Object {\n \"completed\": true,\n \"text\": \"Write test\",\n },\n Object {\n \"completed\": true,\n \"text\": \"Write serialize\",\n },\n ],\n}\n*/\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n maxDepth: 1,\n plugins: [plugin],\n }),\n);\n/*\nObject {\n \"filter\": \"completed\",\n \"items\": [Array],\n}\n*/\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n min: true,\n plugins: [plugin],\n }),\n);\n/*\n{\"filter\": \"completed\", \"items\": [{\"completed\": true, \"text\": \"Write test\"}, {\"completed\": true, \"text\": \"Write serialize\"}]}\n*/\n```\n\n### print\n\nThe **original** interface is adequate for plugins:\n\n- that **do not** depend on options other than `highlight` or `min`\n- that **do not** depend on `depth` or `refs` in recursive traversal, and\n- if values either\n - do **not** require indentation, or\n - do **not** occur as children of JavaScript data structures (for example, array)\n\nWrite `print` to return a string, given the arguments:\n\n- `val` which “passed the test”\n- current `printer(valChild)` callback function: serialize children\n- current `indenter(lines)` callback function: indent lines at the next level\n- unchanging `config` object: derived from `options`\n- unchanging `colors` object: derived from `options`\n\nThe 3 properties of `config` are `min` in `options` and:\n\n- `spacing` and `edgeSpacing` are **newline** if `min` is `false`\n- `spacing` is **space** and `edgeSpacing` is **empty string** if `min` is `true`\n\nEach property of `colors` corresponds to a property of `theme` in `options`:\n\n- the key is the same (for example, `tag`)\n- the value in `colors` is a object with `open` and `close` properties whose values are escape codes from [ansi-styles](https://github.com/chalk/ansi-styles) for the color value in `theme` (for example, `'cyan'`)\n\n### Example of print and test\n\nThis plugin prints functions with the **number of named arguments** excluding rest argument.\n\n```js\nconst plugin = {\n print(val) {\n return `[Function ${val.name || 'anonymous'} ${val.length}]`;\n },\n test(val) {\n return typeof val === 'function';\n },\n};\n```\n\n```js\nconst val = {\n onClick(event) {},\n render() {},\n};\n\nprettyFormat(val, {\n plugins: [plugin],\n});\n/*\nObject {\n \"onClick\": [Function onClick 1],\n \"render\": [Function render 0],\n}\n*/\n\nprettyFormat(val);\n/*\nObject {\n \"onClick\": [Function onClick],\n \"render\": [Function render],\n}\n*/\n```\n\nThis plugin **ignores** the `printFunctionName` option. That limitation of the original `print` interface is a reason to use the improved `serialize` interface, described above.\n\n```js\nprettyFormat(val, {\n plugins: [pluginOld],\n printFunctionName: false,\n});\n/*\nObject {\n \"onClick\": [Function onClick 1],\n \"render\": [Function render 0],\n}\n*/\n\nprettyFormat(val, {\n printFunctionName: false,\n});\n/*\nObject {\n \"onClick\": [Function],\n \"render\": [Function],\n}\n*/\n```\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/facebook/jest/issues"},"homepage":"https://github.com/facebook/jest#readme","_id":"pretty-format@28.0.0-alpha.3","_nodeVersion":"16.14.0","_npmVersion":"lerna/4.0.0/node@v16.14.0+x64 (darwin)","dist":{"integrity":"sha512-NEv1CczT6FETvnXhKZhSmBhqNTFSqzR0wThFQYrsPCo5Nh23MAV6tJcg8e4v3EufEYdNmg054tDrqjBSPtrb5A==","shasum":"3640879f93293f2c36f804ed9a0cf4558b9de72a","tarball":"http://localhost:4545/npm/registry/pretty-format/pretty-format-28.0.0-alpha.3.tgz","fileCount":16,"unpackedSize":65283,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiDmzdACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmpTmA//R7QZ28/lqJL25V2VlqSOz2uo3Gj0xJrmSe2Q1nLA1pKH6iZN\r\neUjkr3/hMK2j7K8zi99tm1XIrBs+CHIjYnXBncMyFgxB0K6CC9rmZFS4uJSF\r\nkACvqcXOrb7njSS+hOS6NL56S7vZ50OnNZOzyC+lhVqEWPwO/m7cxu/L/v43\r\nXajiRyDWICiAMub6QbdK/EMEnWoZsx2E+1ejL6fjLZs6qFCSghcignZmIm6U\r\ngRI7SPmgyqwA7YRgUjMsXiY5mEITHCVkLn+rNpuX5XTVlDVA962Jm8WN4MtS\r\nElLRno4o2pf1an5FtQSMt4AmpDsDG8ZDC+6z/+s9LcFrYutjqIF9C8+TCTCb\r\nWB9s1D1lLdYxxFH8R9F6EEOoAsryn5fvvT6Mwth4NjhTq9Ox/qRQRBhcToD7\r\nD8goDFLc2o4qwj6/93Zw+CVZNZNipMDxI8wKu8RcF56EopiexKat+9CnPJ8w\r\nT771gK4vYWhLEFHxsWBO6ALDYURfV17YU/Xrwlj16nhaxKtTMKL+ZaWL/QCj\r\nhjgcb2LzE0epl2kU0mc17yErBkK0Pc/8vRHzGYK6JmH33TPoRCkXmrbBRWcY\r\nv6pa00FuOp33YpKT1N/t8IzeS/yVnHqG1VQatkjSausefPfHEXRMQCNeQzOb\r\n8uS9/DUaE+33WbOlWx8/rSVsI60R0c5qJfE=\r\n=zA88\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDdeLv9CpBOJb4wiU9J+3X/ShP+nhhprdxvgyigHcoaUQIgOOxMXLUZnl2+2HbHTDu9/U5Ibji0wSEYtIhVL5/m+hk="}]},"_npmUser":{"name":"simenb","email":"sbekkhus91@gmail.com"},"directories":{},"maintainers":[{"name":"scotthovestadt","email":"scott.hovestadt@gmail.com"},{"name":"rubennorte","email":"rubennorte@gmail.com"},{"name":"simenb","email":"sbekkhus91@gmail.com"},{"name":"fb","email":"opensource+npm@fb.com"},{"name":"aaronabramov","email":"aaron@abramov.io"},{"name":"davidzilburg","email":"davidzilburg@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pretty-format_28.0.0-alpha.3_1645112541087_0.8638536537967649"},"_hasShrinkwrap":false},"28.0.0-alpha.4":{"name":"pretty-format","version":"28.0.0-alpha.4","repository":{"type":"git","url":"git+https://github.com/facebook/jest.git","directory":"packages/pretty-format"},"license":"MIT","description":"Stringify any JavaScript value.","main":"./build/index.js","types":"./build/index.d.ts","exports":{".":{"types":"./build/index.d.ts","default":"./build/index.js"},"./package.json":"./package.json","./ConvertAnsi":"./build/plugins/ConvertAnsi.js"},"author":{"name":"James Kyle","email":"me@thejameskyle.com"},"dependencies":{"@jest/schemas":"^28.0.0-alpha.3","ansi-regex":"^5.0.1","ansi-styles":"^5.0.0","react-is":"^17.0.1"},"devDependencies":{"@types/react":"*","@types/react-is":"^17.0.0","@types/react-test-renderer":"*","immutable":"^4.0.0","jest-util":"^28.0.0-alpha.4","react":"*","react-dom":"*","react-test-renderer":"*"},"engines":{"node":"^12.13.0 || ^14.15.0 || ^16.13.0 || >=17.0.0"},"publishConfig":{"access":"public"},"gitHead":"c13dab19491ba6b57c2d703e7d7c4b20189e1e17","readme":"# pretty-format\n\nStringify any JavaScript value.\n\n- Serialize built-in JavaScript types.\n- Serialize application-specific data types with built-in or user-defined plugins.\n\n## Installation\n\n```sh\n$ yarn add pretty-format\n```\n\n## Usage\n\n```js\nconst {format: prettyFormat} = require('pretty-format'); // CommonJS\n```\n\n```js\nimport {format as prettyFormat} from 'pretty-format'; // ES2015 modules\n```\n\n```js\nconst val = {object: {}};\nval.circularReference = val;\nval[Symbol('foo')] = 'foo';\nval.map = new Map([['prop', 'value']]);\nval.array = [-0, Infinity, NaN];\n\nconsole.log(prettyFormat(val));\n/*\nObject {\n \"array\": Array [\n -0,\n Infinity,\n NaN,\n ],\n \"circularReference\": [Circular],\n \"map\": Map {\n \"prop\" => \"value\",\n },\n \"object\": Object {},\n Symbol(foo): \"foo\",\n}\n*/\n```\n\n## Usage with options\n\n```js\nfunction onClick() {}\n\nconsole.log(prettyFormat(onClick));\n/*\n[Function onClick]\n*/\n\nconst options = {\n printFunctionName: false,\n};\nconsole.log(prettyFormat(onClick, options));\n/*\n[Function]\n*/\n```\n\n\n| key | type | default | description |\n| :-------------------- | :-------- | :--------- | :------------------------------------------------------ |\n| `callToJSON` | `boolean` | `true` | call `toJSON` method (if it exists) on objects |\n| `compareKeys` | `function`| `undefined`| compare function used when sorting object keys |\n| `escapeRegex` | `boolean` | `false` | escape special characters in regular expressions |\n| `escapeString` | `boolean` | `true` | escape special characters in strings |\n| `highlight` | `boolean` | `false` | highlight syntax with colors in terminal (some plugins) |\n| `indent` | `number` | `2` | spaces in each level of indentation |\n| `maxDepth` | `number` | `Infinity` | levels to print in arrays, objects, elements, and so on |\n| `maxWidth` | `number` | `Infinity` | number of elements to print in arrays, sets, and so on |\n| `min` | `boolean` | `false` | minimize added space: no indentation nor line breaks |\n| `plugins` | `array` | `[]` | plugins to serialize application-specific data types |\n| `printBasicPrototype` | `boolean` | `false` | print the prototype for plain objects and arrays |\n| `printFunctionName` | `boolean` | `true` | include or omit the name of a function |\n| `theme` | `object` | | colors to highlight syntax in terminal |\n\nProperty values of `theme` are from [ansi-styles colors](https://github.com/chalk/ansi-styles#colors)\n\n```js\nconst DEFAULT_THEME = {\n comment: 'gray',\n content: 'reset',\n prop: 'yellow',\n tag: 'cyan',\n value: 'green',\n};\n```\n\n## Usage with plugins\n\nThe `pretty-format` package provides some built-in plugins, including:\n\n- `ReactElement` for elements from `react`\n- `ReactTestComponent` for test objects from `react-test-renderer`\n\n```js\n// CommonJS\nconst React = require('react');\nconst renderer = require('react-test-renderer');\nconst {format: prettyFormat, plugins} = require('pretty-format');\n\nconst {ReactElement, ReactTestComponent} = plugins;\n```\n\n```js\n// ES2015 modules and destructuring assignment\nimport React from 'react';\nimport renderer from 'react-test-renderer';\nimport {plugins, format as prettyFormat} from 'pretty-format';\n\nconst {ReactElement, ReactTestComponent} = plugins;\n```\n\n```js\nconst onClick = () => {};\nconst element = React.createElement('button', {onClick}, 'Hello World');\n\nconst formatted1 = prettyFormat(element, {\n plugins: [ReactElement],\n printFunctionName: false,\n});\nconst formatted2 = prettyFormat(renderer.create(element).toJSON(), {\n plugins: [ReactTestComponent],\n printFunctionName: false,\n});\n/*\n\n*/\n```\n\n## Usage in Jest\n\nFor snapshot tests, Jest uses `pretty-format` with options that include some of its built-in plugins. For this purpose, plugins are also known as **snapshot serializers**.\n\nTo serialize application-specific data types, you can add modules to `devDependencies` of a project, and then:\n\nIn an **individual** test file, you can add a module as follows. It precedes any modules from Jest configuration.\n\n```js\nimport serializer from 'my-serializer-module';\nexpect.addSnapshotSerializer(serializer);\n\n// tests which have `expect(value).toMatchSnapshot()` assertions\n```\n\nFor **all** test files, you can specify modules in Jest configuration. They precede built-in plugins for React, HTML, and Immutable.js data types. For example, in a `package.json` file:\n\n```json\n{\n \"jest\": {\n \"snapshotSerializers\": [\"my-serializer-module\"]\n }\n}\n```\n\n## Writing plugins\n\nA plugin is a JavaScript object.\n\nIf `options` has a `plugins` array: for the first plugin whose `test(val)` method returns a truthy value, then `prettyFormat(val, options)` returns the result from either:\n\n- `serialize(val, …)` method of the **improved** interface (available in **version 21** or later)\n- `print(val, …)` method of the **original** interface (if plugin does not have `serialize` method)\n\n### test\n\nWrite `test` so it can receive `val` argument of any type. To serialize **objects** which have certain properties, then a guarded expression like `val != null && …` or more concise `val && …` prevents the following errors:\n\n- `TypeError: Cannot read property 'whatever' of null`\n- `TypeError: Cannot read property 'whatever' of undefined`\n\nFor example, `test` method of built-in `ReactElement` plugin:\n\n```js\nconst elementSymbol = Symbol.for('react.element');\nconst test = val => val && val.$$typeof === elementSymbol;\n```\n\nPay attention to efficiency in `test` because `pretty-format` calls it often.\n\n### serialize\n\nThe **improved** interface is available in **version 21** or later.\n\nWrite `serialize` to return a string, given the arguments:\n\n- `val` which “passed the test”\n- unchanging `config` object: derived from `options`\n- current `indentation` string: concatenate to `indent` from `config`\n- current `depth` number: compare to `maxDepth` from `config`\n- current `refs` array: find circular references in objects\n- `printer` callback function: serialize children\n\n### config\n\n\n| key | type | description |\n| :------------------ | :-------- | :------------------------------------------------------ |\n| `callToJSON` | `boolean` | call `toJSON` method (if it exists) on objects |\n| `compareKeys` | `function`| compare function used when sorting object keys |\n| `colors` | `Object` | escape codes for colors to highlight syntax |\n| `escapeRegex` | `boolean` | escape special characters in regular expressions |\n| `escapeString` | `boolean` | escape special characters in strings |\n| `indent` | `string` | spaces in each level of indentation |\n| `maxDepth` | `number` | levels to print in arrays, objects, elements, and so on |\n| `min` | `boolean` | minimize added space: no indentation nor line breaks |\n| `plugins` | `array` | plugins to serialize application-specific data types |\n| `printFunctionName` | `boolean` | include or omit the name of a function |\n| `spacingInner` | `string` | spacing to separate items in a list |\n| `spacingOuter` | `string` | spacing to enclose a list of items |\n\nEach property of `colors` in `config` corresponds to a property of `theme` in `options`:\n\n- the key is the same (for example, `tag`)\n- the value in `colors` is a object with `open` and `close` properties whose values are escape codes from [ansi-styles](https://github.com/chalk/ansi-styles) for the color value in `theme` (for example, `'cyan'`)\n\nSome properties in `config` are derived from `min` in `options`:\n\n- `spacingInner` and `spacingOuter` are **newline** if `min` is `false`\n- `spacingInner` is **space** and `spacingOuter` is **empty string** if `min` is `true`\n\n### Example of serialize and test\n\nThis plugin is a pattern you can apply to serialize composite data types. Side note: `pretty-format` does not need a plugin to serialize arrays.\n\n```js\n// We reused more code when we factored out a function for child items\n// that is independent of depth, name, and enclosing punctuation (see below).\nconst SEPARATOR = ',';\nfunction serializeItems(items, config, indentation, depth, refs, printer) {\n if (items.length === 0) {\n return '';\n }\n const indentationItems = indentation + config.indent;\n return (\n config.spacingOuter +\n items\n .map(\n item =>\n indentationItems +\n printer(item, config, indentationItems, depth, refs), // callback\n )\n .join(SEPARATOR + config.spacingInner) +\n (config.min ? '' : SEPARATOR) + // following the last item\n config.spacingOuter +\n indentation\n );\n}\n\nconst plugin = {\n test(val) {\n return Array.isArray(val);\n },\n serialize(array, config, indentation, depth, refs, printer) {\n const name = array.constructor.name;\n return ++depth > config.maxDepth\n ? '[' + name + ']'\n : (config.min ? '' : name + ' ') +\n '[' +\n serializeItems(array, config, indentation, depth, refs, printer) +\n ']';\n },\n};\n```\n\n```js\nconst val = {\n filter: 'completed',\n items: [\n {\n text: 'Write test',\n completed: true,\n },\n {\n text: 'Write serialize',\n completed: true,\n },\n ],\n};\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n plugins: [plugin],\n }),\n);\n/*\nObject {\n \"filter\": \"completed\",\n \"items\": Array [\n Object {\n \"completed\": true,\n \"text\": \"Write test\",\n },\n Object {\n \"completed\": true,\n \"text\": \"Write serialize\",\n },\n ],\n}\n*/\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n indent: 4,\n plugins: [plugin],\n }),\n);\n/*\nObject {\n \"filter\": \"completed\",\n \"items\": Array [\n Object {\n \"completed\": true,\n \"text\": \"Write test\",\n },\n Object {\n \"completed\": true,\n \"text\": \"Write serialize\",\n },\n ],\n}\n*/\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n maxDepth: 1,\n plugins: [plugin],\n }),\n);\n/*\nObject {\n \"filter\": \"completed\",\n \"items\": [Array],\n}\n*/\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n min: true,\n plugins: [plugin],\n }),\n);\n/*\n{\"filter\": \"completed\", \"items\": [{\"completed\": true, \"text\": \"Write test\"}, {\"completed\": true, \"text\": \"Write serialize\"}]}\n*/\n```\n\n### print\n\nThe **original** interface is adequate for plugins:\n\n- that **do not** depend on options other than `highlight` or `min`\n- that **do not** depend on `depth` or `refs` in recursive traversal, and\n- if values either\n - do **not** require indentation, or\n - do **not** occur as children of JavaScript data structures (for example, array)\n\nWrite `print` to return a string, given the arguments:\n\n- `val` which “passed the test”\n- current `printer(valChild)` callback function: serialize children\n- current `indenter(lines)` callback function: indent lines at the next level\n- unchanging `config` object: derived from `options`\n- unchanging `colors` object: derived from `options`\n\nThe 3 properties of `config` are `min` in `options` and:\n\n- `spacing` and `edgeSpacing` are **newline** if `min` is `false`\n- `spacing` is **space** and `edgeSpacing` is **empty string** if `min` is `true`\n\nEach property of `colors` corresponds to a property of `theme` in `options`:\n\n- the key is the same (for example, `tag`)\n- the value in `colors` is a object with `open` and `close` properties whose values are escape codes from [ansi-styles](https://github.com/chalk/ansi-styles) for the color value in `theme` (for example, `'cyan'`)\n\n### Example of print and test\n\nThis plugin prints functions with the **number of named arguments** excluding rest argument.\n\n```js\nconst plugin = {\n print(val) {\n return `[Function ${val.name || 'anonymous'} ${val.length}]`;\n },\n test(val) {\n return typeof val === 'function';\n },\n};\n```\n\n```js\nconst val = {\n onClick(event) {},\n render() {},\n};\n\nprettyFormat(val, {\n plugins: [plugin],\n});\n/*\nObject {\n \"onClick\": [Function onClick 1],\n \"render\": [Function render 0],\n}\n*/\n\nprettyFormat(val);\n/*\nObject {\n \"onClick\": [Function onClick],\n \"render\": [Function render],\n}\n*/\n```\n\nThis plugin **ignores** the `printFunctionName` option. That limitation of the original `print` interface is a reason to use the improved `serialize` interface, described above.\n\n```js\nprettyFormat(val, {\n plugins: [pluginOld],\n printFunctionName: false,\n});\n/*\nObject {\n \"onClick\": [Function onClick 1],\n \"render\": [Function render 0],\n}\n*/\n\nprettyFormat(val, {\n printFunctionName: false,\n});\n/*\nObject {\n \"onClick\": [Function],\n \"render\": [Function],\n}\n*/\n```\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/facebook/jest/issues"},"homepage":"https://github.com/facebook/jest#readme","_id":"pretty-format@28.0.0-alpha.4","_nodeVersion":"16.14.0","_npmVersion":"lerna/4.0.0/node@v16.14.0+x64 (darwin)","dist":{"integrity":"sha512-Fef3SvIqeOUBDiZST9Krl8phvyjD4OJsKafX8P7f+KoC8ofwTX5fIx/1dArAaSwR2b/P3tVBzmNowtS7vqdhXg==","shasum":"18037743f425769734e6d6cb81742d1be50cf8cb","tarball":"http://localhost:4545/npm/registry/pretty-format/pretty-format-28.0.0-alpha.4.tgz","fileCount":26,"unpackedSize":70679,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiFNOCACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmq0ZA//bA7lCgBHecY/bBsnBppVy7i72+DyaW/xHqvcYNZeEfoxH2iG\r\nV/RxoUCUJUhswKcn0irUmOx8ktUZPDYfX4Zjg4ZGFfNUVGSzwDLvU8OOnUYP\r\nBUO8tWGSGu/bIa/QcIE4A+VRnLh1ecU/XqBEygkgH6WHUjj/bJQ+XDsE5eHx\r\nnkY1e7DBvLPbXUzOq7uUP/k6J9CfDZGyoSiAfhCIq8fkB8LcIMgbFXDeG/tU\r\ny55B/y+AEeDZyG+ckSKaVyBO0DX802CTNAB3mDvgki61UNJn1paLeB12EJ54\r\n23Vzo0YtVakMoZlodm80lFkTDfMFisJus0g+fY1tS6iuD35UTYCLAP1d8RWZ\r\nHxxlpD5QTycg8/xhFNRdXdy6d2jFAbBeHoIxJ2L0slwrgMC2iS9lmFHPegEI\r\n77bMKMMxE9bib0n3+HEH2TDE+TL6Eb9qHI0se5n+iuJCik9SgvjbkBvxbBlr\r\nKZUuDW0XKTnKJDS3/hBrYaHT6/w4UD6sIMvSGW7U2oJ+v0gfPPOpCyj4PhFA\r\nKXJqumuUaXUAUr9K3LoWAG/FZqjPyoO8pkSQUH6ouRIv4pIU+v2nhjJ40+aI\r\nJtV0Y9tS2eAgp/gp/9hUUnvVE9p9w75gzOvVmaeSio7Uk5SkRCmokA3S2Nda\r\nFqPgCatFsh29FrXJWP16+ZURgr9H+ll7hjo=\r\n=Ua3d\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFojIviEnTG66LyoKURrF46nlQfwoqlWTzPUEizH+h1pAiEA2qpEon7ND6TTDR29hXvnTnXZUhUe8xBf3V/uQ1v16Ks="}]},"_npmUser":{"name":"simenb","email":"sbekkhus91@gmail.com"},"directories":{},"maintainers":[{"name":"scotthovestadt","email":"scott.hovestadt@gmail.com"},{"name":"rubennorte","email":"rubennorte@gmail.com"},{"name":"simenb","email":"sbekkhus91@gmail.com"},{"name":"fb","email":"opensource+npm@fb.com"},{"name":"aaronabramov","email":"aaron@abramov.io"},{"name":"davidzilburg","email":"davidzilburg@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pretty-format_28.0.0-alpha.4_1645532034396_0.6724369004713402"},"_hasShrinkwrap":false},"28.0.0-alpha.5":{"name":"pretty-format","version":"28.0.0-alpha.5","repository":{"type":"git","url":"git+https://github.com/facebook/jest.git","directory":"packages/pretty-format"},"license":"MIT","description":"Stringify any JavaScript value.","main":"./build/index.js","types":"./build/index.d.ts","exports":{".":{"types":"./build/index.d.ts","default":"./build/index.js"},"./package.json":"./package.json","./ConvertAnsi":"./build/plugins/ConvertAnsi.js"},"author":{"name":"James Kyle","email":"me@thejameskyle.com"},"dependencies":{"@jest/schemas":"^28.0.0-alpha.3","ansi-regex":"^5.0.1","ansi-styles":"^5.0.0","react-is":"^17.0.1"},"devDependencies":{"@types/react":"*","@types/react-is":"^17.0.0","@types/react-test-renderer":"*","immutable":"^4.0.0","jest-util":"^28.0.0-alpha.5","react":"*","react-dom":"*","react-test-renderer":"*"},"engines":{"node":"^12.13.0 || ^14.15.0 || ^16.13.0 || >=17.0.0"},"publishConfig":{"access":"public"},"gitHead":"46fb19b2628bd87676c10730ba19592c30b05478","readme":"# pretty-format\n\nStringify any JavaScript value.\n\n- Serialize built-in JavaScript types.\n- Serialize application-specific data types with built-in or user-defined plugins.\n\n## Installation\n\n```sh\n$ yarn add pretty-format\n```\n\n## Usage\n\n```js\nconst {format: prettyFormat} = require('pretty-format'); // CommonJS\n```\n\n```js\nimport {format as prettyFormat} from 'pretty-format'; // ES2015 modules\n```\n\n```js\nconst val = {object: {}};\nval.circularReference = val;\nval[Symbol('foo')] = 'foo';\nval.map = new Map([['prop', 'value']]);\nval.array = [-0, Infinity, NaN];\n\nconsole.log(prettyFormat(val));\n/*\nObject {\n \"array\": Array [\n -0,\n Infinity,\n NaN,\n ],\n \"circularReference\": [Circular],\n \"map\": Map {\n \"prop\" => \"value\",\n },\n \"object\": Object {},\n Symbol(foo): \"foo\",\n}\n*/\n```\n\n## Usage with options\n\n```js\nfunction onClick() {}\n\nconsole.log(prettyFormat(onClick));\n/*\n[Function onClick]\n*/\n\nconst options = {\n printFunctionName: false,\n};\nconsole.log(prettyFormat(onClick, options));\n/*\n[Function]\n*/\n```\n\n\n| key | type | default | description |\n| :-------------------- | :-------- | :--------- | :------------------------------------------------------ |\n| `callToJSON` | `boolean` | `true` | call `toJSON` method (if it exists) on objects |\n| `compareKeys` | `function`| `undefined`| compare function used when sorting object keys |\n| `escapeRegex` | `boolean` | `false` | escape special characters in regular expressions |\n| `escapeString` | `boolean` | `true` | escape special characters in strings |\n| `highlight` | `boolean` | `false` | highlight syntax with colors in terminal (some plugins) |\n| `indent` | `number` | `2` | spaces in each level of indentation |\n| `maxDepth` | `number` | `Infinity` | levels to print in arrays, objects, elements, and so on |\n| `maxWidth` | `number` | `Infinity` | number of elements to print in arrays, sets, and so on |\n| `min` | `boolean` | `false` | minimize added space: no indentation nor line breaks |\n| `plugins` | `array` | `[]` | plugins to serialize application-specific data types |\n| `printBasicPrototype` | `boolean` | `false` | print the prototype for plain objects and arrays |\n| `printFunctionName` | `boolean` | `true` | include or omit the name of a function |\n| `theme` | `object` | | colors to highlight syntax in terminal |\n\nProperty values of `theme` are from [ansi-styles colors](https://github.com/chalk/ansi-styles#colors)\n\n```js\nconst DEFAULT_THEME = {\n comment: 'gray',\n content: 'reset',\n prop: 'yellow',\n tag: 'cyan',\n value: 'green',\n};\n```\n\n## Usage with plugins\n\nThe `pretty-format` package provides some built-in plugins, including:\n\n- `ReactElement` for elements from `react`\n- `ReactTestComponent` for test objects from `react-test-renderer`\n\n```js\n// CommonJS\nconst React = require('react');\nconst renderer = require('react-test-renderer');\nconst {format: prettyFormat, plugins} = require('pretty-format');\n\nconst {ReactElement, ReactTestComponent} = plugins;\n```\n\n```js\n// ES2015 modules and destructuring assignment\nimport React from 'react';\nimport renderer from 'react-test-renderer';\nimport {plugins, format as prettyFormat} from 'pretty-format';\n\nconst {ReactElement, ReactTestComponent} = plugins;\n```\n\n```js\nconst onClick = () => {};\nconst element = React.createElement('button', {onClick}, 'Hello World');\n\nconst formatted1 = prettyFormat(element, {\n plugins: [ReactElement],\n printFunctionName: false,\n});\nconst formatted2 = prettyFormat(renderer.create(element).toJSON(), {\n plugins: [ReactTestComponent],\n printFunctionName: false,\n});\n/*\n\n*/\n```\n\n## Usage in Jest\n\nFor snapshot tests, Jest uses `pretty-format` with options that include some of its built-in plugins. For this purpose, plugins are also known as **snapshot serializers**.\n\nTo serialize application-specific data types, you can add modules to `devDependencies` of a project, and then:\n\nIn an **individual** test file, you can add a module as follows. It precedes any modules from Jest configuration.\n\n```js\nimport serializer from 'my-serializer-module';\nexpect.addSnapshotSerializer(serializer);\n\n// tests which have `expect(value).toMatchSnapshot()` assertions\n```\n\nFor **all** test files, you can specify modules in Jest configuration. They precede built-in plugins for React, HTML, and Immutable.js data types. For example, in a `package.json` file:\n\n```json\n{\n \"jest\": {\n \"snapshotSerializers\": [\"my-serializer-module\"]\n }\n}\n```\n\n## Writing plugins\n\nA plugin is a JavaScript object.\n\nIf `options` has a `plugins` array: for the first plugin whose `test(val)` method returns a truthy value, then `prettyFormat(val, options)` returns the result from either:\n\n- `serialize(val, …)` method of the **improved** interface (available in **version 21** or later)\n- `print(val, …)` method of the **original** interface (if plugin does not have `serialize` method)\n\n### test\n\nWrite `test` so it can receive `val` argument of any type. To serialize **objects** which have certain properties, then a guarded expression like `val != null && …` or more concise `val && …` prevents the following errors:\n\n- `TypeError: Cannot read property 'whatever' of null`\n- `TypeError: Cannot read property 'whatever' of undefined`\n\nFor example, `test` method of built-in `ReactElement` plugin:\n\n```js\nconst elementSymbol = Symbol.for('react.element');\nconst test = val => val && val.$$typeof === elementSymbol;\n```\n\nPay attention to efficiency in `test` because `pretty-format` calls it often.\n\n### serialize\n\nThe **improved** interface is available in **version 21** or later.\n\nWrite `serialize` to return a string, given the arguments:\n\n- `val` which “passed the test”\n- unchanging `config` object: derived from `options`\n- current `indentation` string: concatenate to `indent` from `config`\n- current `depth` number: compare to `maxDepth` from `config`\n- current `refs` array: find circular references in objects\n- `printer` callback function: serialize children\n\n### config\n\n\n| key | type | description |\n| :------------------ | :-------- | :------------------------------------------------------ |\n| `callToJSON` | `boolean` | call `toJSON` method (if it exists) on objects |\n| `compareKeys` | `function`| compare function used when sorting object keys |\n| `colors` | `Object` | escape codes for colors to highlight syntax |\n| `escapeRegex` | `boolean` | escape special characters in regular expressions |\n| `escapeString` | `boolean` | escape special characters in strings |\n| `indent` | `string` | spaces in each level of indentation |\n| `maxDepth` | `number` | levels to print in arrays, objects, elements, and so on |\n| `min` | `boolean` | minimize added space: no indentation nor line breaks |\n| `plugins` | `array` | plugins to serialize application-specific data types |\n| `printFunctionName` | `boolean` | include or omit the name of a function |\n| `spacingInner` | `string` | spacing to separate items in a list |\n| `spacingOuter` | `string` | spacing to enclose a list of items |\n\nEach property of `colors` in `config` corresponds to a property of `theme` in `options`:\n\n- the key is the same (for example, `tag`)\n- the value in `colors` is a object with `open` and `close` properties whose values are escape codes from [ansi-styles](https://github.com/chalk/ansi-styles) for the color value in `theme` (for example, `'cyan'`)\n\nSome properties in `config` are derived from `min` in `options`:\n\n- `spacingInner` and `spacingOuter` are **newline** if `min` is `false`\n- `spacingInner` is **space** and `spacingOuter` is **empty string** if `min` is `true`\n\n### Example of serialize and test\n\nThis plugin is a pattern you can apply to serialize composite data types. Side note: `pretty-format` does not need a plugin to serialize arrays.\n\n```js\n// We reused more code when we factored out a function for child items\n// that is independent of depth, name, and enclosing punctuation (see below).\nconst SEPARATOR = ',';\nfunction serializeItems(items, config, indentation, depth, refs, printer) {\n if (items.length === 0) {\n return '';\n }\n const indentationItems = indentation + config.indent;\n return (\n config.spacingOuter +\n items\n .map(\n item =>\n indentationItems +\n printer(item, config, indentationItems, depth, refs), // callback\n )\n .join(SEPARATOR + config.spacingInner) +\n (config.min ? '' : SEPARATOR) + // following the last item\n config.spacingOuter +\n indentation\n );\n}\n\nconst plugin = {\n test(val) {\n return Array.isArray(val);\n },\n serialize(array, config, indentation, depth, refs, printer) {\n const name = array.constructor.name;\n return ++depth > config.maxDepth\n ? '[' + name + ']'\n : (config.min ? '' : name + ' ') +\n '[' +\n serializeItems(array, config, indentation, depth, refs, printer) +\n ']';\n },\n};\n```\n\n```js\nconst val = {\n filter: 'completed',\n items: [\n {\n text: 'Write test',\n completed: true,\n },\n {\n text: 'Write serialize',\n completed: true,\n },\n ],\n};\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n plugins: [plugin],\n }),\n);\n/*\nObject {\n \"filter\": \"completed\",\n \"items\": Array [\n Object {\n \"completed\": true,\n \"text\": \"Write test\",\n },\n Object {\n \"completed\": true,\n \"text\": \"Write serialize\",\n },\n ],\n}\n*/\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n indent: 4,\n plugins: [plugin],\n }),\n);\n/*\nObject {\n \"filter\": \"completed\",\n \"items\": Array [\n Object {\n \"completed\": true,\n \"text\": \"Write test\",\n },\n Object {\n \"completed\": true,\n \"text\": \"Write serialize\",\n },\n ],\n}\n*/\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n maxDepth: 1,\n plugins: [plugin],\n }),\n);\n/*\nObject {\n \"filter\": \"completed\",\n \"items\": [Array],\n}\n*/\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n min: true,\n plugins: [plugin],\n }),\n);\n/*\n{\"filter\": \"completed\", \"items\": [{\"completed\": true, \"text\": \"Write test\"}, {\"completed\": true, \"text\": \"Write serialize\"}]}\n*/\n```\n\n### print\n\nThe **original** interface is adequate for plugins:\n\n- that **do not** depend on options other than `highlight` or `min`\n- that **do not** depend on `depth` or `refs` in recursive traversal, and\n- if values either\n - do **not** require indentation, or\n - do **not** occur as children of JavaScript data structures (for example, array)\n\nWrite `print` to return a string, given the arguments:\n\n- `val` which “passed the test”\n- current `printer(valChild)` callback function: serialize children\n- current `indenter(lines)` callback function: indent lines at the next level\n- unchanging `config` object: derived from `options`\n- unchanging `colors` object: derived from `options`\n\nThe 3 properties of `config` are `min` in `options` and:\n\n- `spacing` and `edgeSpacing` are **newline** if `min` is `false`\n- `spacing` is **space** and `edgeSpacing` is **empty string** if `min` is `true`\n\nEach property of `colors` corresponds to a property of `theme` in `options`:\n\n- the key is the same (for example, `tag`)\n- the value in `colors` is a object with `open` and `close` properties whose values are escape codes from [ansi-styles](https://github.com/chalk/ansi-styles) for the color value in `theme` (for example, `'cyan'`)\n\n### Example of print and test\n\nThis plugin prints functions with the **number of named arguments** excluding rest argument.\n\n```js\nconst plugin = {\n print(val) {\n return `[Function ${val.name || 'anonymous'} ${val.length}]`;\n },\n test(val) {\n return typeof val === 'function';\n },\n};\n```\n\n```js\nconst val = {\n onClick(event) {},\n render() {},\n};\n\nprettyFormat(val, {\n plugins: [plugin],\n});\n/*\nObject {\n \"onClick\": [Function onClick 1],\n \"render\": [Function render 0],\n}\n*/\n\nprettyFormat(val);\n/*\nObject {\n \"onClick\": [Function onClick],\n \"render\": [Function render],\n}\n*/\n```\n\nThis plugin **ignores** the `printFunctionName` option. That limitation of the original `print` interface is a reason to use the improved `serialize` interface, described above.\n\n```js\nprettyFormat(val, {\n plugins: [pluginOld],\n printFunctionName: false,\n});\n/*\nObject {\n \"onClick\": [Function onClick 1],\n \"render\": [Function render 0],\n}\n*/\n\nprettyFormat(val, {\n printFunctionName: false,\n});\n/*\nObject {\n \"onClick\": [Function],\n \"render\": [Function],\n}\n*/\n```\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/facebook/jest/issues"},"homepage":"https://github.com/facebook/jest#readme","_id":"pretty-format@28.0.0-alpha.5","_nodeVersion":"16.14.0","_npmVersion":"lerna/4.0.0/node@v16.14.0+x64 (darwin)","dist":{"integrity":"sha512-188xlJdjYl6YAeMLBoBaI0WfcN/+dqpsOPM4gVewrm7JJ9gqu2lCbQ8e9GVIbu6vsJCKXJujBfqA2Tpb0GWk0Q==","shasum":"4de87bceb13bcddda77d1ba8b37bd270f3c6f389","tarball":"http://localhost:4545/npm/registry/pretty-format/pretty-format-28.0.0-alpha.5.tgz","fileCount":16,"unpackedSize":64632,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiF/EuACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmrhbg//YJzBBlkMi5to5WjeBp+SOH7n5+H2vrsPupRqf6ZyRSe0QD2r\r\nvrRB4y3fM0172mElT5btr8ERpV7gSrpDz/zGEmA1zO1SRjCQeIKxASHBi2hQ\r\n+d7M6bsFTscwmTKRFV9zsk3aGjsH0mUTk0464u4NGimTrgUEua7P6f3AoObj\r\nI5mw1dd+1mnjvTXxDmmnoe3c15qP9jb7bGmJj/QeEDpPJo//xQQdraUhEZz/\r\nhXictlcZN/ocDW8oS28UB7ZL/KIvOiQ+wFVnk+mgK27RKKAJ2k7sm7k6o6Qn\r\nzNYDBZUednO7nCKQgPYTZGcG8jqk+aKqbb1V8KQEsedwLH/8UqB2S7D4UGmM\r\n7sSQ7GrsjhGjlgqFkxTks7KLOf/pTh+671TvZKhRie0E7a1IOO8r4lwyDWxi\r\nYVlxWs1yueMU9ngn1znwXeTo0+OO+RMEC8OadX3oDIx5Iw6lZ9AeRhvYgy5P\r\nkFYh2YUcYfPh3xe/bI5llB6Eyk07IAPe7+MJR7y/R0xDOh0df+zOG5pOuocJ\r\n2qb5UPZ2NNq0OpD40NFVLIYSXkOAWmi8WnLRm6Apd8LqdhMMh36A80gNnpba\r\nVXjeZXY+iUClxbGKsv0hgSZ7ZrTtQSizuX+jVVBCY/WN68famSsfZgHRVure\r\nmoveg2sV5f6/LbGNexW8OGUSQ4fNioRpKCE=\r\n=Jl9d\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC+xqTboCojbx0+ArJz1lvGuZfAToFQ7B2z8oTnUrqiSQIhAICIEmVfuh5w6G4T5b6s5g79x8cH/I3CWTDlPyr/yhWA"}]},"_npmUser":{"name":"simenb","email":"sbekkhus91@gmail.com"},"directories":{},"maintainers":[{"name":"scotthovestadt","email":"scott.hovestadt@gmail.com"},{"name":"rubennorte","email":"rubennorte@gmail.com"},{"name":"simenb","email":"sbekkhus91@gmail.com"},{"name":"fb","email":"opensource+npm@fb.com"},{"name":"aaronabramov","email":"aaron@abramov.io"},{"name":"davidzilburg","email":"davidzilburg@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pretty-format_28.0.0-alpha.5_1645736237951_0.49014202807759455"},"_hasShrinkwrap":false},"28.0.0-alpha.6":{"name":"pretty-format","version":"28.0.0-alpha.6","repository":{"type":"git","url":"git+https://github.com/facebook/jest.git","directory":"packages/pretty-format"},"license":"MIT","description":"Stringify any JavaScript value.","main":"./build/index.js","types":"./build/index.d.ts","exports":{".":{"types":"./build/index.d.ts","default":"./build/index.js"},"./package.json":"./package.json","./ConvertAnsi":"./build/plugins/ConvertAnsi.js"},"author":{"name":"James Kyle","email":"me@thejameskyle.com"},"dependencies":{"@jest/schemas":"^28.0.0-alpha.3","ansi-regex":"^5.0.1","ansi-styles":"^5.0.0","react-is":"^17.0.1"},"devDependencies":{"@types/react":"*","@types/react-is":"^17.0.0","@types/react-test-renderer":"*","immutable":"^4.0.0","jest-util":"^28.0.0-alpha.6","react":"*","react-dom":"*","react-test-renderer":"*"},"engines":{"node":"^12.13.0 || ^14.15.0 || ^16.13.0 || >=17.0.0"},"publishConfig":{"access":"public"},"gitHead":"6284ada4adb7008f5f8673b1a7b1c789d2e508fb","readme":"# pretty-format\n\nStringify any JavaScript value.\n\n- Serialize built-in JavaScript types.\n- Serialize application-specific data types with built-in or user-defined plugins.\n\n## Installation\n\n```sh\n$ yarn add pretty-format\n```\n\n## Usage\n\n```js\nconst {format: prettyFormat} = require('pretty-format'); // CommonJS\n```\n\n```js\nimport {format as prettyFormat} from 'pretty-format'; // ES2015 modules\n```\n\n```js\nconst val = {object: {}};\nval.circularReference = val;\nval[Symbol('foo')] = 'foo';\nval.map = new Map([['prop', 'value']]);\nval.array = [-0, Infinity, NaN];\n\nconsole.log(prettyFormat(val));\n/*\nObject {\n \"array\": Array [\n -0,\n Infinity,\n NaN,\n ],\n \"circularReference\": [Circular],\n \"map\": Map {\n \"prop\" => \"value\",\n },\n \"object\": Object {},\n Symbol(foo): \"foo\",\n}\n*/\n```\n\n## Usage with options\n\n```js\nfunction onClick() {}\n\nconsole.log(prettyFormat(onClick));\n/*\n[Function onClick]\n*/\n\nconst options = {\n printFunctionName: false,\n};\nconsole.log(prettyFormat(onClick, options));\n/*\n[Function]\n*/\n```\n\n\n| key | type | default | description |\n| :-------------------- | :-------- | :--------- | :------------------------------------------------------ |\n| `callToJSON` | `boolean` | `true` | call `toJSON` method (if it exists) on objects |\n| `compareKeys` | `function`| `undefined`| compare function used when sorting object keys |\n| `escapeRegex` | `boolean` | `false` | escape special characters in regular expressions |\n| `escapeString` | `boolean` | `true` | escape special characters in strings |\n| `highlight` | `boolean` | `false` | highlight syntax with colors in terminal (some plugins) |\n| `indent` | `number` | `2` | spaces in each level of indentation |\n| `maxDepth` | `number` | `Infinity` | levels to print in arrays, objects, elements, and so on |\n| `maxWidth` | `number` | `Infinity` | number of elements to print in arrays, sets, and so on |\n| `min` | `boolean` | `false` | minimize added space: no indentation nor line breaks |\n| `plugins` | `array` | `[]` | plugins to serialize application-specific data types |\n| `printBasicPrototype` | `boolean` | `false` | print the prototype for plain objects and arrays |\n| `printFunctionName` | `boolean` | `true` | include or omit the name of a function |\n| `theme` | `object` | | colors to highlight syntax in terminal |\n\nProperty values of `theme` are from [ansi-styles colors](https://github.com/chalk/ansi-styles#colors)\n\n```js\nconst DEFAULT_THEME = {\n comment: 'gray',\n content: 'reset',\n prop: 'yellow',\n tag: 'cyan',\n value: 'green',\n};\n```\n\n## Usage with plugins\n\nThe `pretty-format` package provides some built-in plugins, including:\n\n- `ReactElement` for elements from `react`\n- `ReactTestComponent` for test objects from `react-test-renderer`\n\n```js\n// CommonJS\nconst React = require('react');\nconst renderer = require('react-test-renderer');\nconst {format: prettyFormat, plugins} = require('pretty-format');\n\nconst {ReactElement, ReactTestComponent} = plugins;\n```\n\n```js\n// ES2015 modules and destructuring assignment\nimport React from 'react';\nimport renderer from 'react-test-renderer';\nimport {plugins, format as prettyFormat} from 'pretty-format';\n\nconst {ReactElement, ReactTestComponent} = plugins;\n```\n\n```js\nconst onClick = () => {};\nconst element = React.createElement('button', {onClick}, 'Hello World');\n\nconst formatted1 = prettyFormat(element, {\n plugins: [ReactElement],\n printFunctionName: false,\n});\nconst formatted2 = prettyFormat(renderer.create(element).toJSON(), {\n plugins: [ReactTestComponent],\n printFunctionName: false,\n});\n/*\n\n*/\n```\n\n## Usage in Jest\n\nFor snapshot tests, Jest uses `pretty-format` with options that include some of its built-in plugins. For this purpose, plugins are also known as **snapshot serializers**.\n\nTo serialize application-specific data types, you can add modules to `devDependencies` of a project, and then:\n\nIn an **individual** test file, you can add a module as follows. It precedes any modules from Jest configuration.\n\n```js\nimport serializer from 'my-serializer-module';\nexpect.addSnapshotSerializer(serializer);\n\n// tests which have `expect(value).toMatchSnapshot()` assertions\n```\n\nFor **all** test files, you can specify modules in Jest configuration. They precede built-in plugins for React, HTML, and Immutable.js data types. For example, in a `package.json` file:\n\n```json\n{\n \"jest\": {\n \"snapshotSerializers\": [\"my-serializer-module\"]\n }\n}\n```\n\n## Writing plugins\n\nA plugin is a JavaScript object.\n\nIf `options` has a `plugins` array: for the first plugin whose `test(val)` method returns a truthy value, then `prettyFormat(val, options)` returns the result from either:\n\n- `serialize(val, …)` method of the **improved** interface (available in **version 21** or later)\n- `print(val, …)` method of the **original** interface (if plugin does not have `serialize` method)\n\n### test\n\nWrite `test` so it can receive `val` argument of any type. To serialize **objects** which have certain properties, then a guarded expression like `val != null && …` or more concise `val && …` prevents the following errors:\n\n- `TypeError: Cannot read property 'whatever' of null`\n- `TypeError: Cannot read property 'whatever' of undefined`\n\nFor example, `test` method of built-in `ReactElement` plugin:\n\n```js\nconst elementSymbol = Symbol.for('react.element');\nconst test = val => val && val.$$typeof === elementSymbol;\n```\n\nPay attention to efficiency in `test` because `pretty-format` calls it often.\n\n### serialize\n\nThe **improved** interface is available in **version 21** or later.\n\nWrite `serialize` to return a string, given the arguments:\n\n- `val` which “passed the test”\n- unchanging `config` object: derived from `options`\n- current `indentation` string: concatenate to `indent` from `config`\n- current `depth` number: compare to `maxDepth` from `config`\n- current `refs` array: find circular references in objects\n- `printer` callback function: serialize children\n\n### config\n\n\n| key | type | description |\n| :------------------ | :-------- | :------------------------------------------------------ |\n| `callToJSON` | `boolean` | call `toJSON` method (if it exists) on objects |\n| `compareKeys` | `function`| compare function used when sorting object keys |\n| `colors` | `Object` | escape codes for colors to highlight syntax |\n| `escapeRegex` | `boolean` | escape special characters in regular expressions |\n| `escapeString` | `boolean` | escape special characters in strings |\n| `indent` | `string` | spaces in each level of indentation |\n| `maxDepth` | `number` | levels to print in arrays, objects, elements, and so on |\n| `min` | `boolean` | minimize added space: no indentation nor line breaks |\n| `plugins` | `array` | plugins to serialize application-specific data types |\n| `printFunctionName` | `boolean` | include or omit the name of a function |\n| `spacingInner` | `string` | spacing to separate items in a list |\n| `spacingOuter` | `string` | spacing to enclose a list of items |\n\nEach property of `colors` in `config` corresponds to a property of `theme` in `options`:\n\n- the key is the same (for example, `tag`)\n- the value in `colors` is a object with `open` and `close` properties whose values are escape codes from [ansi-styles](https://github.com/chalk/ansi-styles) for the color value in `theme` (for example, `'cyan'`)\n\nSome properties in `config` are derived from `min` in `options`:\n\n- `spacingInner` and `spacingOuter` are **newline** if `min` is `false`\n- `spacingInner` is **space** and `spacingOuter` is **empty string** if `min` is `true`\n\n### Example of serialize and test\n\nThis plugin is a pattern you can apply to serialize composite data types. Side note: `pretty-format` does not need a plugin to serialize arrays.\n\n```js\n// We reused more code when we factored out a function for child items\n// that is independent of depth, name, and enclosing punctuation (see below).\nconst SEPARATOR = ',';\nfunction serializeItems(items, config, indentation, depth, refs, printer) {\n if (items.length === 0) {\n return '';\n }\n const indentationItems = indentation + config.indent;\n return (\n config.spacingOuter +\n items\n .map(\n item =>\n indentationItems +\n printer(item, config, indentationItems, depth, refs), // callback\n )\n .join(SEPARATOR + config.spacingInner) +\n (config.min ? '' : SEPARATOR) + // following the last item\n config.spacingOuter +\n indentation\n );\n}\n\nconst plugin = {\n test(val) {\n return Array.isArray(val);\n },\n serialize(array, config, indentation, depth, refs, printer) {\n const name = array.constructor.name;\n return ++depth > config.maxDepth\n ? `[${name}]`\n : `${config.min ? '' : `${name} `}[${serializeItems(\n array,\n config,\n indentation,\n depth,\n refs,\n printer,\n )}]`;\n },\n};\n```\n\n```js\nconst val = {\n filter: 'completed',\n items: [\n {\n text: 'Write test',\n completed: true,\n },\n {\n text: 'Write serialize',\n completed: true,\n },\n ],\n};\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n plugins: [plugin],\n }),\n);\n/*\nObject {\n \"filter\": \"completed\",\n \"items\": Array [\n Object {\n \"completed\": true,\n \"text\": \"Write test\",\n },\n Object {\n \"completed\": true,\n \"text\": \"Write serialize\",\n },\n ],\n}\n*/\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n indent: 4,\n plugins: [plugin],\n }),\n);\n/*\nObject {\n \"filter\": \"completed\",\n \"items\": Array [\n Object {\n \"completed\": true,\n \"text\": \"Write test\",\n },\n Object {\n \"completed\": true,\n \"text\": \"Write serialize\",\n },\n ],\n}\n*/\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n maxDepth: 1,\n plugins: [plugin],\n }),\n);\n/*\nObject {\n \"filter\": \"completed\",\n \"items\": [Array],\n}\n*/\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n min: true,\n plugins: [plugin],\n }),\n);\n/*\n{\"filter\": \"completed\", \"items\": [{\"completed\": true, \"text\": \"Write test\"}, {\"completed\": true, \"text\": \"Write serialize\"}]}\n*/\n```\n\n### print\n\nThe **original** interface is adequate for plugins:\n\n- that **do not** depend on options other than `highlight` or `min`\n- that **do not** depend on `depth` or `refs` in recursive traversal, and\n- if values either\n - do **not** require indentation, or\n - do **not** occur as children of JavaScript data structures (for example, array)\n\nWrite `print` to return a string, given the arguments:\n\n- `val` which “passed the test”\n- current `printer(valChild)` callback function: serialize children\n- current `indenter(lines)` callback function: indent lines at the next level\n- unchanging `config` object: derived from `options`\n- unchanging `colors` object: derived from `options`\n\nThe 3 properties of `config` are `min` in `options` and:\n\n- `spacing` and `edgeSpacing` are **newline** if `min` is `false`\n- `spacing` is **space** and `edgeSpacing` is **empty string** if `min` is `true`\n\nEach property of `colors` corresponds to a property of `theme` in `options`:\n\n- the key is the same (for example, `tag`)\n- the value in `colors` is a object with `open` and `close` properties whose values are escape codes from [ansi-styles](https://github.com/chalk/ansi-styles) for the color value in `theme` (for example, `'cyan'`)\n\n### Example of print and test\n\nThis plugin prints functions with the **number of named arguments** excluding rest argument.\n\n```js\nconst plugin = {\n print(val) {\n return `[Function ${val.name || 'anonymous'} ${val.length}]`;\n },\n test(val) {\n return typeof val === 'function';\n },\n};\n```\n\n```js\nconst val = {\n onClick(event) {},\n render() {},\n};\n\nprettyFormat(val, {\n plugins: [plugin],\n});\n/*\nObject {\n \"onClick\": [Function onClick 1],\n \"render\": [Function render 0],\n}\n*/\n\nprettyFormat(val);\n/*\nObject {\n \"onClick\": [Function onClick],\n \"render\": [Function render],\n}\n*/\n```\n\nThis plugin **ignores** the `printFunctionName` option. That limitation of the original `print` interface is a reason to use the improved `serialize` interface, described above.\n\n```js\nprettyFormat(val, {\n plugins: [pluginOld],\n printFunctionName: false,\n});\n/*\nObject {\n \"onClick\": [Function onClick 1],\n \"render\": [Function render 0],\n}\n*/\n\nprettyFormat(val, {\n printFunctionName: false,\n});\n/*\nObject {\n \"onClick\": [Function],\n \"render\": [Function],\n}\n*/\n```\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/facebook/jest/issues"},"homepage":"https://github.com/facebook/jest#readme","_id":"pretty-format@28.0.0-alpha.6","_nodeVersion":"16.14.0","_npmVersion":"lerna/4.0.0/node@v16.14.0+x64 (darwin)","dist":{"integrity":"sha512-ZpWa20EGIu2DWS+jAmELiGAVrfECoNooq/DdeZdvPY8T+UNsqwu/UY4t/SLZ/1wM3p16Hunb1jY/BrTsgGndfA==","shasum":"200d65bb7e118ce3fbee6b8955065837ca0b51c9","tarball":"http://localhost:4545/npm/registry/pretty-format/pretty-format-28.0.0-alpha.6.tgz","fileCount":16,"unpackedSize":63893,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiHdoXACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmpGJBAAhTFqKQ7deTUMcGBlaCIgm+h7+vLXH5MB1NOTMk7NGlEkP0sC\r\ne0lUSLsASSimbDEfP3Imr+vXWZoY4XRAZbJ7POw2sTNNj89/6LQk/RCb4EW+\r\nT92fJ+Gxz9wuzyW7yQRALcMSHU6Xk1WCOHadbuaCW6r+pvh7Cj1MUp/UYl2B\r\n4Vqw3xXDk2kEtS+fZsVnMBeIRVlZcMOrD2W1bjTp9pcGb4cHDH6ZVdyLwvrC\r\nC9jHb9Nhh4gqi9dYII8bv3vCZrRtG4ShzP7cCwiZ4N3TCEIEQiNO5dz1E1X2\r\nCMOHczSJwpa3NVgPitPy11vJbn4ok83wSd/i5yxjejMXKg+2zlyBrCBgKU8E\r\nNs8wedUqz6HfNxJJgqTHKbzF2vammwqksPyYLsgnSH/QA0CETeEIwm+4ueyt\r\nP+FAR1hMfB99if2e5gQHefu6BFYkNpDxRBg2eP0nZgwSVFAqaryITd6PH5l3\r\n60M2Lv3vvTd4icCCRxQjyBznnA7SLI4B03zIYBSSQqr30fz99Xt26n+dVsXu\r\n8XOtDscnen0Tyb4E6J8iHxtJDorpsscBizz+k6SI0rwVn14HVaosi9vXJJvR\r\nHxnBJR/2YOS5VH5yydraozWsNa4ok/YYo5RGeLt5dwwiDUgwidCael1kKbIl\r\nrPciAUvF5CYUnEUQMmfQm7LR5nWokfGV21A=\r\n=Kcz/\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIA7UUzF1qzeVY8Kbrql0MShYoXd78iWrUd4mDtMmUN3HAiAvf1/6d1B5/f/KobA89NAJmpSAjTJR9P3vnNr7sNVbbg=="}]},"_npmUser":{"name":"simenb","email":"sbekkhus91@gmail.com"},"directories":{},"maintainers":[{"name":"scotthovestadt","email":"scott.hovestadt@gmail.com"},{"name":"rubennorte","email":"rubennorte@gmail.com"},{"name":"simenb","email":"sbekkhus91@gmail.com"},{"name":"fb","email":"opensource+npm@fb.com"},{"name":"aaronabramov","email":"aaron@abramov.io"},{"name":"davidzilburg","email":"davidzilburg@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pretty-format_28.0.0-alpha.6_1646123543138_0.36579205309415164"},"_hasShrinkwrap":false},"28.0.0-alpha.7":{"name":"pretty-format","version":"28.0.0-alpha.7","repository":{"type":"git","url":"git+https://github.com/facebook/jest.git","directory":"packages/pretty-format"},"license":"MIT","description":"Stringify any JavaScript value.","main":"./build/index.js","types":"./build/index.d.ts","exports":{".":{"types":"./build/index.d.ts","default":"./build/index.js"},"./package.json":"./package.json","./ConvertAnsi":"./build/plugins/ConvertAnsi.js"},"author":{"name":"James Kyle","email":"me@thejameskyle.com"},"dependencies":{"@jest/schemas":"^28.0.0-alpha.3","ansi-regex":"^5.0.1","ansi-styles":"^5.0.0","react-is":"^17.0.1"},"devDependencies":{"@types/react":"*","@types/react-is":"^17.0.0","@types/react-test-renderer":"*","immutable":"^4.0.0","jest-util":"^28.0.0-alpha.7","react":"*","react-dom":"*","react-test-renderer":"*"},"engines":{"node":"^12.13.0 || ^14.15.0 || ^16.13.0 || >=17.0.0"},"publishConfig":{"access":"public"},"gitHead":"06f58f8ca70abc9c09d554967935b58ce85c48d6","readme":"# pretty-format\n\nStringify any JavaScript value.\n\n- Serialize built-in JavaScript types.\n- Serialize application-specific data types with built-in or user-defined plugins.\n\n## Installation\n\n```sh\n$ yarn add pretty-format\n```\n\n## Usage\n\n```js\nconst {format: prettyFormat} = require('pretty-format'); // CommonJS\n```\n\n```js\nimport {format as prettyFormat} from 'pretty-format'; // ES2015 modules\n```\n\n```js\nconst val = {object: {}};\nval.circularReference = val;\nval[Symbol('foo')] = 'foo';\nval.map = new Map([['prop', 'value']]);\nval.array = [-0, Infinity, NaN];\n\nconsole.log(prettyFormat(val));\n/*\nObject {\n \"array\": Array [\n -0,\n Infinity,\n NaN,\n ],\n \"circularReference\": [Circular],\n \"map\": Map {\n \"prop\" => \"value\",\n },\n \"object\": Object {},\n Symbol(foo): \"foo\",\n}\n*/\n```\n\n## Usage with options\n\n```js\nfunction onClick() {}\n\nconsole.log(prettyFormat(onClick));\n/*\n[Function onClick]\n*/\n\nconst options = {\n printFunctionName: false,\n};\nconsole.log(prettyFormat(onClick, options));\n/*\n[Function]\n*/\n```\n\n\n| key | type | default | description |\n| :-------------------- | :-------- | :--------- | :------------------------------------------------------ |\n| `callToJSON` | `boolean` | `true` | call `toJSON` method (if it exists) on objects |\n| `compareKeys` | `function`| `undefined`| compare function used when sorting object keys |\n| `escapeRegex` | `boolean` | `false` | escape special characters in regular expressions |\n| `escapeString` | `boolean` | `true` | escape special characters in strings |\n| `highlight` | `boolean` | `false` | highlight syntax with colors in terminal (some plugins) |\n| `indent` | `number` | `2` | spaces in each level of indentation |\n| `maxDepth` | `number` | `Infinity` | levels to print in arrays, objects, elements, and so on |\n| `maxWidth` | `number` | `Infinity` | number of elements to print in arrays, sets, and so on |\n| `min` | `boolean` | `false` | minimize added space: no indentation nor line breaks |\n| `plugins` | `array` | `[]` | plugins to serialize application-specific data types |\n| `printBasicPrototype` | `boolean` | `false` | print the prototype for plain objects and arrays |\n| `printFunctionName` | `boolean` | `true` | include or omit the name of a function |\n| `theme` | `object` | | colors to highlight syntax in terminal |\n\nProperty values of `theme` are from [ansi-styles colors](https://github.com/chalk/ansi-styles#colors)\n\n```js\nconst DEFAULT_THEME = {\n comment: 'gray',\n content: 'reset',\n prop: 'yellow',\n tag: 'cyan',\n value: 'green',\n};\n```\n\n## Usage with plugins\n\nThe `pretty-format` package provides some built-in plugins, including:\n\n- `ReactElement` for elements from `react`\n- `ReactTestComponent` for test objects from `react-test-renderer`\n\n```js\n// CommonJS\nconst React = require('react');\nconst renderer = require('react-test-renderer');\nconst {format: prettyFormat, plugins} = require('pretty-format');\n\nconst {ReactElement, ReactTestComponent} = plugins;\n```\n\n```js\n// ES2015 modules and destructuring assignment\nimport React from 'react';\nimport renderer from 'react-test-renderer';\nimport {plugins, format as prettyFormat} from 'pretty-format';\n\nconst {ReactElement, ReactTestComponent} = plugins;\n```\n\n```js\nconst onClick = () => {};\nconst element = React.createElement('button', {onClick}, 'Hello World');\n\nconst formatted1 = prettyFormat(element, {\n plugins: [ReactElement],\n printFunctionName: false,\n});\nconst formatted2 = prettyFormat(renderer.create(element).toJSON(), {\n plugins: [ReactTestComponent],\n printFunctionName: false,\n});\n/*\n\n*/\n```\n\n## Usage in Jest\n\nFor snapshot tests, Jest uses `pretty-format` with options that include some of its built-in plugins. For this purpose, plugins are also known as **snapshot serializers**.\n\nTo serialize application-specific data types, you can add modules to `devDependencies` of a project, and then:\n\nIn an **individual** test file, you can add a module as follows. It precedes any modules from Jest configuration.\n\n```js\nimport serializer from 'my-serializer-module';\nexpect.addSnapshotSerializer(serializer);\n\n// tests which have `expect(value).toMatchSnapshot()` assertions\n```\n\nFor **all** test files, you can specify modules in Jest configuration. They precede built-in plugins for React, HTML, and Immutable.js data types. For example, in a `package.json` file:\n\n```json\n{\n \"jest\": {\n \"snapshotSerializers\": [\"my-serializer-module\"]\n }\n}\n```\n\n## Writing plugins\n\nA plugin is a JavaScript object.\n\nIf `options` has a `plugins` array: for the first plugin whose `test(val)` method returns a truthy value, then `prettyFormat(val, options)` returns the result from either:\n\n- `serialize(val, …)` method of the **improved** interface (available in **version 21** or later)\n- `print(val, …)` method of the **original** interface (if plugin does not have `serialize` method)\n\n### test\n\nWrite `test` so it can receive `val` argument of any type. To serialize **objects** which have certain properties, then a guarded expression like `val != null && …` or more concise `val && …` prevents the following errors:\n\n- `TypeError: Cannot read property 'whatever' of null`\n- `TypeError: Cannot read property 'whatever' of undefined`\n\nFor example, `test` method of built-in `ReactElement` plugin:\n\n```js\nconst elementSymbol = Symbol.for('react.element');\nconst test = val => val && val.$$typeof === elementSymbol;\n```\n\nPay attention to efficiency in `test` because `pretty-format` calls it often.\n\n### serialize\n\nThe **improved** interface is available in **version 21** or later.\n\nWrite `serialize` to return a string, given the arguments:\n\n- `val` which “passed the test”\n- unchanging `config` object: derived from `options`\n- current `indentation` string: concatenate to `indent` from `config`\n- current `depth` number: compare to `maxDepth` from `config`\n- current `refs` array: find circular references in objects\n- `printer` callback function: serialize children\n\n### config\n\n\n| key | type | description |\n| :------------------ | :-------- | :------------------------------------------------------ |\n| `callToJSON` | `boolean` | call `toJSON` method (if it exists) on objects |\n| `compareKeys` | `function`| compare function used when sorting object keys |\n| `colors` | `Object` | escape codes for colors to highlight syntax |\n| `escapeRegex` | `boolean` | escape special characters in regular expressions |\n| `escapeString` | `boolean` | escape special characters in strings |\n| `indent` | `string` | spaces in each level of indentation |\n| `maxDepth` | `number` | levels to print in arrays, objects, elements, and so on |\n| `min` | `boolean` | minimize added space: no indentation nor line breaks |\n| `plugins` | `array` | plugins to serialize application-specific data types |\n| `printFunctionName` | `boolean` | include or omit the name of a function |\n| `spacingInner` | `string` | spacing to separate items in a list |\n| `spacingOuter` | `string` | spacing to enclose a list of items |\n\nEach property of `colors` in `config` corresponds to a property of `theme` in `options`:\n\n- the key is the same (for example, `tag`)\n- the value in `colors` is a object with `open` and `close` properties whose values are escape codes from [ansi-styles](https://github.com/chalk/ansi-styles) for the color value in `theme` (for example, `'cyan'`)\n\nSome properties in `config` are derived from `min` in `options`:\n\n- `spacingInner` and `spacingOuter` are **newline** if `min` is `false`\n- `spacingInner` is **space** and `spacingOuter` is **empty string** if `min` is `true`\n\n### Example of serialize and test\n\nThis plugin is a pattern you can apply to serialize composite data types. Side note: `pretty-format` does not need a plugin to serialize arrays.\n\n```js\n// We reused more code when we factored out a function for child items\n// that is independent of depth, name, and enclosing punctuation (see below).\nconst SEPARATOR = ',';\nfunction serializeItems(items, config, indentation, depth, refs, printer) {\n if (items.length === 0) {\n return '';\n }\n const indentationItems = indentation + config.indent;\n return (\n config.spacingOuter +\n items\n .map(\n item =>\n indentationItems +\n printer(item, config, indentationItems, depth, refs), // callback\n )\n .join(SEPARATOR + config.spacingInner) +\n (config.min ? '' : SEPARATOR) + // following the last item\n config.spacingOuter +\n indentation\n );\n}\n\nconst plugin = {\n test(val) {\n return Array.isArray(val);\n },\n serialize(array, config, indentation, depth, refs, printer) {\n const name = array.constructor.name;\n return ++depth > config.maxDepth\n ? `[${name}]`\n : `${config.min ? '' : `${name} `}[${serializeItems(\n array,\n config,\n indentation,\n depth,\n refs,\n printer,\n )}]`;\n },\n};\n```\n\n```js\nconst val = {\n filter: 'completed',\n items: [\n {\n text: 'Write test',\n completed: true,\n },\n {\n text: 'Write serialize',\n completed: true,\n },\n ],\n};\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n plugins: [plugin],\n }),\n);\n/*\nObject {\n \"filter\": \"completed\",\n \"items\": Array [\n Object {\n \"completed\": true,\n \"text\": \"Write test\",\n },\n Object {\n \"completed\": true,\n \"text\": \"Write serialize\",\n },\n ],\n}\n*/\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n indent: 4,\n plugins: [plugin],\n }),\n);\n/*\nObject {\n \"filter\": \"completed\",\n \"items\": Array [\n Object {\n \"completed\": true,\n \"text\": \"Write test\",\n },\n Object {\n \"completed\": true,\n \"text\": \"Write serialize\",\n },\n ],\n}\n*/\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n maxDepth: 1,\n plugins: [plugin],\n }),\n);\n/*\nObject {\n \"filter\": \"completed\",\n \"items\": [Array],\n}\n*/\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n min: true,\n plugins: [plugin],\n }),\n);\n/*\n{\"filter\": \"completed\", \"items\": [{\"completed\": true, \"text\": \"Write test\"}, {\"completed\": true, \"text\": \"Write serialize\"}]}\n*/\n```\n\n### print\n\nThe **original** interface is adequate for plugins:\n\n- that **do not** depend on options other than `highlight` or `min`\n- that **do not** depend on `depth` or `refs` in recursive traversal, and\n- if values either\n - do **not** require indentation, or\n - do **not** occur as children of JavaScript data structures (for example, array)\n\nWrite `print` to return a string, given the arguments:\n\n- `val` which “passed the test”\n- current `printer(valChild)` callback function: serialize children\n- current `indenter(lines)` callback function: indent lines at the next level\n- unchanging `config` object: derived from `options`\n- unchanging `colors` object: derived from `options`\n\nThe 3 properties of `config` are `min` in `options` and:\n\n- `spacing` and `edgeSpacing` are **newline** if `min` is `false`\n- `spacing` is **space** and `edgeSpacing` is **empty string** if `min` is `true`\n\nEach property of `colors` corresponds to a property of `theme` in `options`:\n\n- the key is the same (for example, `tag`)\n- the value in `colors` is a object with `open` and `close` properties whose values are escape codes from [ansi-styles](https://github.com/chalk/ansi-styles) for the color value in `theme` (for example, `'cyan'`)\n\n### Example of print and test\n\nThis plugin prints functions with the **number of named arguments** excluding rest argument.\n\n```js\nconst plugin = {\n print(val) {\n return `[Function ${val.name || 'anonymous'} ${val.length}]`;\n },\n test(val) {\n return typeof val === 'function';\n },\n};\n```\n\n```js\nconst val = {\n onClick(event) {},\n render() {},\n};\n\nprettyFormat(val, {\n plugins: [plugin],\n});\n/*\nObject {\n \"onClick\": [Function onClick 1],\n \"render\": [Function render 0],\n}\n*/\n\nprettyFormat(val);\n/*\nObject {\n \"onClick\": [Function onClick],\n \"render\": [Function render],\n}\n*/\n```\n\nThis plugin **ignores** the `printFunctionName` option. That limitation of the original `print` interface is a reason to use the improved `serialize` interface, described above.\n\n```js\nprettyFormat(val, {\n plugins: [pluginOld],\n printFunctionName: false,\n});\n/*\nObject {\n \"onClick\": [Function onClick 1],\n \"render\": [Function render 0],\n}\n*/\n\nprettyFormat(val, {\n printFunctionName: false,\n});\n/*\nObject {\n \"onClick\": [Function],\n \"render\": [Function],\n}\n*/\n```\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/facebook/jest/issues"},"homepage":"https://github.com/facebook/jest#readme","_id":"pretty-format@28.0.0-alpha.7","_nodeVersion":"16.14.0","_npmVersion":"lerna/4.0.0/node@v16.14.0+x64 (darwin)","dist":{"integrity":"sha512-al2ExJ2p1yP7UVgwpVd/RJf0sFvBywxkPftrUIwkbgCQTLc7hWJ/BGseoGBpAIskQoagG2ZrZfVgSc05zhJSvg==","shasum":"0a570dd71fc8286669e733e3aaf834482f6889d4","tarball":"http://localhost:4545/npm/registry/pretty-format/pretty-format-28.0.0-alpha.7.tgz","fileCount":16,"unpackedSize":63893,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiJIa/ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmrHWw//dkZt3WHgfCh3M0YVf60oCK4EcR5xRbg8wK7CGzzCRigTba7h\r\n0bYnUX7xvl+2S27H6mQMHWi1585YW34XlM5khOm0yk8BQlqDR5xlNnvFNqzP\r\nITipzzMW1auvloS7O32y9JmDqQB7BQoGIhp/kEcflVDq/P3EsvIBBfb6RKjj\r\ng+Rl6FYSaF91o6sg+ofKJAp7EgOyo+8tqLX9c6NNt76Wx/fxTbpYETc7lAtT\r\nkEC0+B24lhWQ53f6ftby69ijcqJVNcVKbNzH1QgxocU8xLPZYlbIBYAz7gIj\r\nbCGgb1xuXpd3dU8IzerQsPlQZQ8UZdN6V0OY1quoHy+lUvV5fdkaV5getTNA\r\nAghsBf0SHxg3GQKC85s0RQ02kKT/eGtwzu12KcUA/pm8l102S8DK2JkLivcQ\r\n10rTc8S6ue3JdyYBJX53lZ1/onGmJknR7B5kKLVrbj+p4Q/dlxEty5WPZujK\r\nkLDCMLEK4yeKbaWCsS0LwZKPP9db76gNk1RMRUxSJpeg9C6AVLmR4JyRbo3o\r\nN9FgR1XqcWAZuOPUFpFetaGsU9FbmFEUi70bCVomaK36QB0KYx4J8w8laJ+/\r\nSHOMYB7hnTC92Fo8c9zD98fXlvVRFG8Wt1e1I+au54zgYiniA90lqGggSd2N\r\nxrULAiovDWhzUyr2YZKjpYThCVqcAZxhcec=\r\n=rPPY\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIF2/Vbsq4Sl7PbL+ceOR3fZLGMjPSMEsOInGNtpgLDEzAiEA3+wIa8HeG2mPr7rM5VX8ZQellxjrGwSDD0JX1+o8AbQ="}]},"_npmUser":{"name":"simenb","email":"sbekkhus91@gmail.com"},"directories":{},"maintainers":[{"name":"scotthovestadt","email":"scott.hovestadt@gmail.com"},{"name":"rubennorte","email":"rubennorte@gmail.com"},{"name":"simenb","email":"sbekkhus91@gmail.com"},{"name":"fb","email":"opensource+npm@fb.com"},{"name":"aaronabramov","email":"aaron@abramov.io"},{"name":"davidzilburg","email":"davidzilburg@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pretty-format_28.0.0-alpha.7_1646560959672_0.2511284546495116"},"_hasShrinkwrap":false},"28.0.0-alpha.8":{"name":"pretty-format","version":"28.0.0-alpha.8","repository":{"type":"git","url":"git+https://github.com/facebook/jest.git","directory":"packages/pretty-format"},"license":"MIT","description":"Stringify any JavaScript value.","main":"./build/index.js","types":"./build/index.d.ts","exports":{".":{"types":"./build/index.d.ts","default":"./build/index.js"},"./package.json":"./package.json","./ConvertAnsi":"./build/plugins/ConvertAnsi.js"},"author":{"name":"James Kyle","email":"me@thejameskyle.com"},"dependencies":{"@jest/schemas":"^28.0.0-alpha.3","ansi-regex":"^5.0.1","ansi-styles":"^5.0.0","react-is":"^17.0.1"},"devDependencies":{"@types/react":"*","@types/react-is":"^17.0.0","@types/react-test-renderer":"*","immutable":"^4.0.0","jest-util":"^28.0.0-alpha.8","react":"*","react-dom":"*","react-test-renderer":"*"},"engines":{"node":"^12.13.0 || ^14.15.0 || ^16.13.0 || >=17.0.0"},"publishConfig":{"access":"public"},"gitHead":"d915e7df92b220dbe6e124585ba6459838a6c41c","readme":"# pretty-format\n\nStringify any JavaScript value.\n\n- Serialize built-in JavaScript types.\n- Serialize application-specific data types with built-in or user-defined plugins.\n\n## Installation\n\n```sh\n$ yarn add pretty-format\n```\n\n## Usage\n\n```js\nconst {format: prettyFormat} = require('pretty-format'); // CommonJS\n```\n\n```js\nimport {format as prettyFormat} from 'pretty-format'; // ES2015 modules\n```\n\n```js\nconst val = {object: {}};\nval.circularReference = val;\nval[Symbol('foo')] = 'foo';\nval.map = new Map([['prop', 'value']]);\nval.array = [-0, Infinity, NaN];\n\nconsole.log(prettyFormat(val));\n/*\nObject {\n \"array\": Array [\n -0,\n Infinity,\n NaN,\n ],\n \"circularReference\": [Circular],\n \"map\": Map {\n \"prop\" => \"value\",\n },\n \"object\": Object {},\n Symbol(foo): \"foo\",\n}\n*/\n```\n\n## Usage with options\n\n```js\nfunction onClick() {}\n\nconsole.log(prettyFormat(onClick));\n/*\n[Function onClick]\n*/\n\nconst options = {\n printFunctionName: false,\n};\nconsole.log(prettyFormat(onClick, options));\n/*\n[Function]\n*/\n```\n\n\n| key | type | default | description |\n| :-------------------- | :-------- | :--------- | :------------------------------------------------------ |\n| `callToJSON` | `boolean` | `true` | call `toJSON` method (if it exists) on objects |\n| `compareKeys` | `function`| `undefined`| compare function used when sorting object keys |\n| `escapeRegex` | `boolean` | `false` | escape special characters in regular expressions |\n| `escapeString` | `boolean` | `true` | escape special characters in strings |\n| `highlight` | `boolean` | `false` | highlight syntax with colors in terminal (some plugins) |\n| `indent` | `number` | `2` | spaces in each level of indentation |\n| `maxDepth` | `number` | `Infinity` | levels to print in arrays, objects, elements, and so on |\n| `maxWidth` | `number` | `Infinity` | number of elements to print in arrays, sets, and so on |\n| `min` | `boolean` | `false` | minimize added space: no indentation nor line breaks |\n| `plugins` | `array` | `[]` | plugins to serialize application-specific data types |\n| `printBasicPrototype` | `boolean` | `false` | print the prototype for plain objects and arrays |\n| `printFunctionName` | `boolean` | `true` | include or omit the name of a function |\n| `theme` | `object` | | colors to highlight syntax in terminal |\n\nProperty values of `theme` are from [ansi-styles colors](https://github.com/chalk/ansi-styles#colors)\n\n```js\nconst DEFAULT_THEME = {\n comment: 'gray',\n content: 'reset',\n prop: 'yellow',\n tag: 'cyan',\n value: 'green',\n};\n```\n\n## Usage with plugins\n\nThe `pretty-format` package provides some built-in plugins, including:\n\n- `ReactElement` for elements from `react`\n- `ReactTestComponent` for test objects from `react-test-renderer`\n\n```js\n// CommonJS\nconst React = require('react');\nconst renderer = require('react-test-renderer');\nconst {format: prettyFormat, plugins} = require('pretty-format');\n\nconst {ReactElement, ReactTestComponent} = plugins;\n```\n\n```js\n// ES2015 modules and destructuring assignment\nimport React from 'react';\nimport renderer from 'react-test-renderer';\nimport {plugins, format as prettyFormat} from 'pretty-format';\n\nconst {ReactElement, ReactTestComponent} = plugins;\n```\n\n```js\nconst onClick = () => {};\nconst element = React.createElement('button', {onClick}, 'Hello World');\n\nconst formatted1 = prettyFormat(element, {\n plugins: [ReactElement],\n printFunctionName: false,\n});\nconst formatted2 = prettyFormat(renderer.create(element).toJSON(), {\n plugins: [ReactTestComponent],\n printFunctionName: false,\n});\n/*\n\n*/\n```\n\n## Usage in Jest\n\nFor snapshot tests, Jest uses `pretty-format` with options that include some of its built-in plugins. For this purpose, plugins are also known as **snapshot serializers**.\n\nTo serialize application-specific data types, you can add modules to `devDependencies` of a project, and then:\n\nIn an **individual** test file, you can add a module as follows. It precedes any modules from Jest configuration.\n\n```js\nimport serializer from 'my-serializer-module';\nexpect.addSnapshotSerializer(serializer);\n\n// tests which have `expect(value).toMatchSnapshot()` assertions\n```\n\nFor **all** test files, you can specify modules in Jest configuration. They precede built-in plugins for React, HTML, and Immutable.js data types. For example, in a `package.json` file:\n\n```json\n{\n \"jest\": {\n \"snapshotSerializers\": [\"my-serializer-module\"]\n }\n}\n```\n\n## Writing plugins\n\nA plugin is a JavaScript object.\n\nIf `options` has a `plugins` array: for the first plugin whose `test(val)` method returns a truthy value, then `prettyFormat(val, options)` returns the result from either:\n\n- `serialize(val, …)` method of the **improved** interface (available in **version 21** or later)\n- `print(val, …)` method of the **original** interface (if plugin does not have `serialize` method)\n\n### test\n\nWrite `test` so it can receive `val` argument of any type. To serialize **objects** which have certain properties, then a guarded expression like `val != null && …` or more concise `val && …` prevents the following errors:\n\n- `TypeError: Cannot read property 'whatever' of null`\n- `TypeError: Cannot read property 'whatever' of undefined`\n\nFor example, `test` method of built-in `ReactElement` plugin:\n\n```js\nconst elementSymbol = Symbol.for('react.element');\nconst test = val => val && val.$$typeof === elementSymbol;\n```\n\nPay attention to efficiency in `test` because `pretty-format` calls it often.\n\n### serialize\n\nThe **improved** interface is available in **version 21** or later.\n\nWrite `serialize` to return a string, given the arguments:\n\n- `val` which “passed the test”\n- unchanging `config` object: derived from `options`\n- current `indentation` string: concatenate to `indent` from `config`\n- current `depth` number: compare to `maxDepth` from `config`\n- current `refs` array: find circular references in objects\n- `printer` callback function: serialize children\n\n### config\n\n\n| key | type | description |\n| :------------------ | :-------- | :------------------------------------------------------ |\n| `callToJSON` | `boolean` | call `toJSON` method (if it exists) on objects |\n| `compareKeys` | `function`| compare function used when sorting object keys |\n| `colors` | `Object` | escape codes for colors to highlight syntax |\n| `escapeRegex` | `boolean` | escape special characters in regular expressions |\n| `escapeString` | `boolean` | escape special characters in strings |\n| `indent` | `string` | spaces in each level of indentation |\n| `maxDepth` | `number` | levels to print in arrays, objects, elements, and so on |\n| `min` | `boolean` | minimize added space: no indentation nor line breaks |\n| `plugins` | `array` | plugins to serialize application-specific data types |\n| `printFunctionName` | `boolean` | include or omit the name of a function |\n| `spacingInner` | `string` | spacing to separate items in a list |\n| `spacingOuter` | `string` | spacing to enclose a list of items |\n\nEach property of `colors` in `config` corresponds to a property of `theme` in `options`:\n\n- the key is the same (for example, `tag`)\n- the value in `colors` is a object with `open` and `close` properties whose values are escape codes from [ansi-styles](https://github.com/chalk/ansi-styles) for the color value in `theme` (for example, `'cyan'`)\n\nSome properties in `config` are derived from `min` in `options`:\n\n- `spacingInner` and `spacingOuter` are **newline** if `min` is `false`\n- `spacingInner` is **space** and `spacingOuter` is **empty string** if `min` is `true`\n\n### Example of serialize and test\n\nThis plugin is a pattern you can apply to serialize composite data types. Side note: `pretty-format` does not need a plugin to serialize arrays.\n\n```js\n// We reused more code when we factored out a function for child items\n// that is independent of depth, name, and enclosing punctuation (see below).\nconst SEPARATOR = ',';\nfunction serializeItems(items, config, indentation, depth, refs, printer) {\n if (items.length === 0) {\n return '';\n }\n const indentationItems = indentation + config.indent;\n return (\n config.spacingOuter +\n items\n .map(\n item =>\n indentationItems +\n printer(item, config, indentationItems, depth, refs), // callback\n )\n .join(SEPARATOR + config.spacingInner) +\n (config.min ? '' : SEPARATOR) + // following the last item\n config.spacingOuter +\n indentation\n );\n}\n\nconst plugin = {\n test(val) {\n return Array.isArray(val);\n },\n serialize(array, config, indentation, depth, refs, printer) {\n const name = array.constructor.name;\n return ++depth > config.maxDepth\n ? `[${name}]`\n : `${config.min ? '' : `${name} `}[${serializeItems(\n array,\n config,\n indentation,\n depth,\n refs,\n printer,\n )}]`;\n },\n};\n```\n\n```js\nconst val = {\n filter: 'completed',\n items: [\n {\n text: 'Write test',\n completed: true,\n },\n {\n text: 'Write serialize',\n completed: true,\n },\n ],\n};\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n plugins: [plugin],\n }),\n);\n/*\nObject {\n \"filter\": \"completed\",\n \"items\": Array [\n Object {\n \"completed\": true,\n \"text\": \"Write test\",\n },\n Object {\n \"completed\": true,\n \"text\": \"Write serialize\",\n },\n ],\n}\n*/\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n indent: 4,\n plugins: [plugin],\n }),\n);\n/*\nObject {\n \"filter\": \"completed\",\n \"items\": Array [\n Object {\n \"completed\": true,\n \"text\": \"Write test\",\n },\n Object {\n \"completed\": true,\n \"text\": \"Write serialize\",\n },\n ],\n}\n*/\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n maxDepth: 1,\n plugins: [plugin],\n }),\n);\n/*\nObject {\n \"filter\": \"completed\",\n \"items\": [Array],\n}\n*/\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n min: true,\n plugins: [plugin],\n }),\n);\n/*\n{\"filter\": \"completed\", \"items\": [{\"completed\": true, \"text\": \"Write test\"}, {\"completed\": true, \"text\": \"Write serialize\"}]}\n*/\n```\n\n### print\n\nThe **original** interface is adequate for plugins:\n\n- that **do not** depend on options other than `highlight` or `min`\n- that **do not** depend on `depth` or `refs` in recursive traversal, and\n- if values either\n - do **not** require indentation, or\n - do **not** occur as children of JavaScript data structures (for example, array)\n\nWrite `print` to return a string, given the arguments:\n\n- `val` which “passed the test”\n- current `printer(valChild)` callback function: serialize children\n- current `indenter(lines)` callback function: indent lines at the next level\n- unchanging `config` object: derived from `options`\n- unchanging `colors` object: derived from `options`\n\nThe 3 properties of `config` are `min` in `options` and:\n\n- `spacing` and `edgeSpacing` are **newline** if `min` is `false`\n- `spacing` is **space** and `edgeSpacing` is **empty string** if `min` is `true`\n\nEach property of `colors` corresponds to a property of `theme` in `options`:\n\n- the key is the same (for example, `tag`)\n- the value in `colors` is a object with `open` and `close` properties whose values are escape codes from [ansi-styles](https://github.com/chalk/ansi-styles) for the color value in `theme` (for example, `'cyan'`)\n\n### Example of print and test\n\nThis plugin prints functions with the **number of named arguments** excluding rest argument.\n\n```js\nconst plugin = {\n print(val) {\n return `[Function ${val.name || 'anonymous'} ${val.length}]`;\n },\n test(val) {\n return typeof val === 'function';\n },\n};\n```\n\n```js\nconst val = {\n onClick(event) {},\n render() {},\n};\n\nprettyFormat(val, {\n plugins: [plugin],\n});\n/*\nObject {\n \"onClick\": [Function onClick 1],\n \"render\": [Function render 0],\n}\n*/\n\nprettyFormat(val);\n/*\nObject {\n \"onClick\": [Function onClick],\n \"render\": [Function render],\n}\n*/\n```\n\nThis plugin **ignores** the `printFunctionName` option. That limitation of the original `print` interface is a reason to use the improved `serialize` interface, described above.\n\n```js\nprettyFormat(val, {\n plugins: [pluginOld],\n printFunctionName: false,\n});\n/*\nObject {\n \"onClick\": [Function onClick 1],\n \"render\": [Function render 0],\n}\n*/\n\nprettyFormat(val, {\n printFunctionName: false,\n});\n/*\nObject {\n \"onClick\": [Function],\n \"render\": [Function],\n}\n*/\n```\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/facebook/jest/issues"},"homepage":"https://github.com/facebook/jest#readme","_id":"pretty-format@28.0.0-alpha.8","_nodeVersion":"16.14.2","_npmVersion":"lerna/4.0.0/node@v16.14.2+x64 (darwin)","dist":{"integrity":"sha512-6F2AKNADeuUVO8jhwHEKWl54lCQTJg8kr9uHjiuxGCaOq4AxaIhdOlS/rDkFha8S7mmL0u9jz3jU5dlaWWFjnQ==","shasum":"311117b922c9d5d6d1421b6f0340c0f2d3973410","tarball":"http://localhost:4545/npm/registry/pretty-format/pretty-format-28.0.0-alpha.8.tgz","fileCount":16,"unpackedSize":63893,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCcotvSW6DgFyPPgU0Vgfcr4EItCptxYM45bhwQNWkclQIhAPKU7GyKVuoZ7C9+PWWF3/nvxtJO5q6xT962eM3Xilgh"}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiTFlbACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmr29Q/+KoWUvrQXPRSHL7sKYY7LUYlOSoFDmtPpKqQOMyI3+0/WZmZ/\r\nTGuNJWG2sQiUADtNVlMAG3WlJ57RXJSL+8ypSEoXwBShF08vnRz1EwpnJFfl\r\ntJ3APLwNrwzU1tjYCRWu4SZw2R8Voa1hkx8z9oOCE39kGXkQiDTqmppTdFl1\r\norjAwxi2QwRu0Ft0K5KnjP4aAJ+nFZT2fnFO2PLYmYEocF3K+geXwvU92eER\r\nLrAPpHyFGbjGoH2L4nc7CKvv2cuwWyRl9yuzu4y19ZRY7HVjJEKzkvqVeWFo\r\ncYFWLRNhEBYGD62K9BBd6WxdRfczvMy09OP9fd+0egDElMBFjH+hChjKletP\r\n6kC40/oddmkeD6IhbLenXUgmp1Ar16h5r2r3r+gq5jDdyNhxNm5arcPmrAIC\r\nJHgLE9rxrOSilQx9rIDBQCFIfjUIgJnFvsF1mzkACM3o8p+0p4LH23ikyA1v\r\nDV6oZQ0oMw2FG4oDJO4tkSOyQvzlfjkMEURvVndEXnPpl7RmFPBsTdAYi+TX\r\ntyShD8L5FmNUtA8KaMjfiRLRt2Tg5DNei7wnpGoyQrADy7QPWwILRlm/aed9\r\nRcTz8rJf/4cr2vJrGKhiufrj/Yx0FSQAizo6jIf7AV2i6xNjYAw3UMVkZtlX\r\nveOuqI3Iova9YYGsX/gCZrs4NgH8C5I1QVU=\r\n=mB/h\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"simenb","email":"sbekkhus91@gmail.com"},"directories":{},"maintainers":[{"name":"scotthovestadt","email":"scott.hovestadt@gmail.com"},{"name":"rubennorte","email":"rubennorte@gmail.com"},{"name":"simenb","email":"sbekkhus91@gmail.com"},{"name":"fb","email":"opensource+npm@fb.com"},{"name":"aaronabramov","email":"aaron@abramov.io"},{"name":"davidzilburg","email":"davidzilburg@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pretty-format_28.0.0-alpha.8_1649170779027_0.21054515954145026"},"_hasShrinkwrap":false},"28.0.0-alpha.9":{"name":"pretty-format","version":"28.0.0-alpha.9","repository":{"type":"git","url":"git+https://github.com/facebook/jest.git","directory":"packages/pretty-format"},"license":"MIT","description":"Stringify any JavaScript value.","main":"./build/index.js","types":"./build/index.d.ts","exports":{".":{"types":"./build/index.d.ts","default":"./build/index.js"},"./package.json":"./package.json","./ConvertAnsi":"./build/plugins/ConvertAnsi.js"},"author":{"name":"James Kyle","email":"me@thejameskyle.com"},"dependencies":{"@jest/schemas":"^28.0.0-alpha.3","ansi-regex":"^5.0.1","ansi-styles":"^5.0.0","react-is":"^18.0.0"},"devDependencies":{"@types/react":"^17.0.3","@types/react-is":"^17.0.0","@types/react-test-renderer":"17.0.2","expect":"^28.0.0-alpha.9","immutable":"^4.0.0","jest-util":"^28.0.0-alpha.9","react":"17.0.2","react-dom":"^17.0.1","react-test-renderer":"17.0.2"},"engines":{"node":"^12.13.0 || ^14.15.0 || ^16.13.0 || >=17.0.0"},"publishConfig":{"access":"public"},"gitHead":"7c63f5981eb20d4b89a4c04f3675e0050d8d7887","readme":"# pretty-format\n\nStringify any JavaScript value.\n\n- Serialize built-in JavaScript types.\n- Serialize application-specific data types with built-in or user-defined plugins.\n\n## Installation\n\n```sh\n$ yarn add pretty-format\n```\n\n## Usage\n\n```js\nconst {format: prettyFormat} = require('pretty-format'); // CommonJS\n```\n\n```js\nimport {format as prettyFormat} from 'pretty-format'; // ES2015 modules\n```\n\n```js\nconst val = {object: {}};\nval.circularReference = val;\nval[Symbol('foo')] = 'foo';\nval.map = new Map([['prop', 'value']]);\nval.array = [-0, Infinity, NaN];\n\nconsole.log(prettyFormat(val));\n/*\nObject {\n \"array\": Array [\n -0,\n Infinity,\n NaN,\n ],\n \"circularReference\": [Circular],\n \"map\": Map {\n \"prop\" => \"value\",\n },\n \"object\": Object {},\n Symbol(foo): \"foo\",\n}\n*/\n```\n\n## Usage with options\n\n```js\nfunction onClick() {}\n\nconsole.log(prettyFormat(onClick));\n/*\n[Function onClick]\n*/\n\nconst options = {\n printFunctionName: false,\n};\nconsole.log(prettyFormat(onClick, options));\n/*\n[Function]\n*/\n```\n\n\n| key | type | default | description |\n| :-------------------- | :-------- | :--------- | :------------------------------------------------------ |\n| `callToJSON` | `boolean` | `true` | call `toJSON` method (if it exists) on objects |\n| `compareKeys` | `function`| `undefined`| compare function used when sorting object keys |\n| `escapeRegex` | `boolean` | `false` | escape special characters in regular expressions |\n| `escapeString` | `boolean` | `true` | escape special characters in strings |\n| `highlight` | `boolean` | `false` | highlight syntax with colors in terminal (some plugins) |\n| `indent` | `number` | `2` | spaces in each level of indentation |\n| `maxDepth` | `number` | `Infinity` | levels to print in arrays, objects, elements, and so on |\n| `maxWidth` | `number` | `Infinity` | number of elements to print in arrays, sets, and so on |\n| `min` | `boolean` | `false` | minimize added space: no indentation nor line breaks |\n| `plugins` | `array` | `[]` | plugins to serialize application-specific data types |\n| `printBasicPrototype` | `boolean` | `false` | print the prototype for plain objects and arrays |\n| `printFunctionName` | `boolean` | `true` | include or omit the name of a function |\n| `theme` | `object` | | colors to highlight syntax in terminal |\n\nProperty values of `theme` are from [ansi-styles colors](https://github.com/chalk/ansi-styles#colors)\n\n```js\nconst DEFAULT_THEME = {\n comment: 'gray',\n content: 'reset',\n prop: 'yellow',\n tag: 'cyan',\n value: 'green',\n};\n```\n\n## Usage with plugins\n\nThe `pretty-format` package provides some built-in plugins, including:\n\n- `ReactElement` for elements from `react`\n- `ReactTestComponent` for test objects from `react-test-renderer`\n\n```js\n// CommonJS\nconst React = require('react');\nconst renderer = require('react-test-renderer');\nconst {format: prettyFormat, plugins} = require('pretty-format');\n\nconst {ReactElement, ReactTestComponent} = plugins;\n```\n\n```js\n// ES2015 modules and destructuring assignment\nimport React from 'react';\nimport renderer from 'react-test-renderer';\nimport {plugins, format as prettyFormat} from 'pretty-format';\n\nconst {ReactElement, ReactTestComponent} = plugins;\n```\n\n```js\nconst onClick = () => {};\nconst element = React.createElement('button', {onClick}, 'Hello World');\n\nconst formatted1 = prettyFormat(element, {\n plugins: [ReactElement],\n printFunctionName: false,\n});\nconst formatted2 = prettyFormat(renderer.create(element).toJSON(), {\n plugins: [ReactTestComponent],\n printFunctionName: false,\n});\n/*\n\n*/\n```\n\n## Usage in Jest\n\nFor snapshot tests, Jest uses `pretty-format` with options that include some of its built-in plugins. For this purpose, plugins are also known as **snapshot serializers**.\n\nTo serialize application-specific data types, you can add modules to `devDependencies` of a project, and then:\n\nIn an **individual** test file, you can add a module as follows. It precedes any modules from Jest configuration.\n\n```js\nimport serializer from 'my-serializer-module';\nexpect.addSnapshotSerializer(serializer);\n\n// tests which have `expect(value).toMatchSnapshot()` assertions\n```\n\nFor **all** test files, you can specify modules in Jest configuration. They precede built-in plugins for React, HTML, and Immutable.js data types. For example, in a `package.json` file:\n\n```json\n{\n \"jest\": {\n \"snapshotSerializers\": [\"my-serializer-module\"]\n }\n}\n```\n\n## Writing plugins\n\nA plugin is a JavaScript object.\n\nIf `options` has a `plugins` array: for the first plugin whose `test(val)` method returns a truthy value, then `prettyFormat(val, options)` returns the result from either:\n\n- `serialize(val, …)` method of the **improved** interface (available in **version 21** or later)\n- `print(val, …)` method of the **original** interface (if plugin does not have `serialize` method)\n\n### test\n\nWrite `test` so it can receive `val` argument of any type. To serialize **objects** which have certain properties, then a guarded expression like `val != null && …` or more concise `val && …` prevents the following errors:\n\n- `TypeError: Cannot read property 'whatever' of null`\n- `TypeError: Cannot read property 'whatever' of undefined`\n\nFor example, `test` method of built-in `ReactElement` plugin:\n\n```js\nconst elementSymbol = Symbol.for('react.element');\nconst test = val => val && val.$$typeof === elementSymbol;\n```\n\nPay attention to efficiency in `test` because `pretty-format` calls it often.\n\n### serialize\n\nThe **improved** interface is available in **version 21** or later.\n\nWrite `serialize` to return a string, given the arguments:\n\n- `val` which “passed the test”\n- unchanging `config` object: derived from `options`\n- current `indentation` string: concatenate to `indent` from `config`\n- current `depth` number: compare to `maxDepth` from `config`\n- current `refs` array: find circular references in objects\n- `printer` callback function: serialize children\n\n### config\n\n\n| key | type | description |\n| :------------------ | :-------- | :------------------------------------------------------ |\n| `callToJSON` | `boolean` | call `toJSON` method (if it exists) on objects |\n| `compareKeys` | `function`| compare function used when sorting object keys |\n| `colors` | `Object` | escape codes for colors to highlight syntax |\n| `escapeRegex` | `boolean` | escape special characters in regular expressions |\n| `escapeString` | `boolean` | escape special characters in strings |\n| `indent` | `string` | spaces in each level of indentation |\n| `maxDepth` | `number` | levels to print in arrays, objects, elements, and so on |\n| `min` | `boolean` | minimize added space: no indentation nor line breaks |\n| `plugins` | `array` | plugins to serialize application-specific data types |\n| `printFunctionName` | `boolean` | include or omit the name of a function |\n| `spacingInner` | `string` | spacing to separate items in a list |\n| `spacingOuter` | `string` | spacing to enclose a list of items |\n\nEach property of `colors` in `config` corresponds to a property of `theme` in `options`:\n\n- the key is the same (for example, `tag`)\n- the value in `colors` is a object with `open` and `close` properties whose values are escape codes from [ansi-styles](https://github.com/chalk/ansi-styles) for the color value in `theme` (for example, `'cyan'`)\n\nSome properties in `config` are derived from `min` in `options`:\n\n- `spacingInner` and `spacingOuter` are **newline** if `min` is `false`\n- `spacingInner` is **space** and `spacingOuter` is **empty string** if `min` is `true`\n\n### Example of serialize and test\n\nThis plugin is a pattern you can apply to serialize composite data types. Side note: `pretty-format` does not need a plugin to serialize arrays.\n\n```js\n// We reused more code when we factored out a function for child items\n// that is independent of depth, name, and enclosing punctuation (see below).\nconst SEPARATOR = ',';\nfunction serializeItems(items, config, indentation, depth, refs, printer) {\n if (items.length === 0) {\n return '';\n }\n const indentationItems = indentation + config.indent;\n return (\n config.spacingOuter +\n items\n .map(\n item =>\n indentationItems +\n printer(item, config, indentationItems, depth, refs), // callback\n )\n .join(SEPARATOR + config.spacingInner) +\n (config.min ? '' : SEPARATOR) + // following the last item\n config.spacingOuter +\n indentation\n );\n}\n\nconst plugin = {\n test(val) {\n return Array.isArray(val);\n },\n serialize(array, config, indentation, depth, refs, printer) {\n const name = array.constructor.name;\n return ++depth > config.maxDepth\n ? `[${name}]`\n : `${config.min ? '' : `${name} `}[${serializeItems(\n array,\n config,\n indentation,\n depth,\n refs,\n printer,\n )}]`;\n },\n};\n```\n\n```js\nconst val = {\n filter: 'completed',\n items: [\n {\n text: 'Write test',\n completed: true,\n },\n {\n text: 'Write serialize',\n completed: true,\n },\n ],\n};\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n plugins: [plugin],\n }),\n);\n/*\nObject {\n \"filter\": \"completed\",\n \"items\": Array [\n Object {\n \"completed\": true,\n \"text\": \"Write test\",\n },\n Object {\n \"completed\": true,\n \"text\": \"Write serialize\",\n },\n ],\n}\n*/\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n indent: 4,\n plugins: [plugin],\n }),\n);\n/*\nObject {\n \"filter\": \"completed\",\n \"items\": Array [\n Object {\n \"completed\": true,\n \"text\": \"Write test\",\n },\n Object {\n \"completed\": true,\n \"text\": \"Write serialize\",\n },\n ],\n}\n*/\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n maxDepth: 1,\n plugins: [plugin],\n }),\n);\n/*\nObject {\n \"filter\": \"completed\",\n \"items\": [Array],\n}\n*/\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n min: true,\n plugins: [plugin],\n }),\n);\n/*\n{\"filter\": \"completed\", \"items\": [{\"completed\": true, \"text\": \"Write test\"}, {\"completed\": true, \"text\": \"Write serialize\"}]}\n*/\n```\n\n### print\n\nThe **original** interface is adequate for plugins:\n\n- that **do not** depend on options other than `highlight` or `min`\n- that **do not** depend on `depth` or `refs` in recursive traversal, and\n- if values either\n - do **not** require indentation, or\n - do **not** occur as children of JavaScript data structures (for example, array)\n\nWrite `print` to return a string, given the arguments:\n\n- `val` which “passed the test”\n- current `printer(valChild)` callback function: serialize children\n- current `indenter(lines)` callback function: indent lines at the next level\n- unchanging `config` object: derived from `options`\n- unchanging `colors` object: derived from `options`\n\nThe 3 properties of `config` are `min` in `options` and:\n\n- `spacing` and `edgeSpacing` are **newline** if `min` is `false`\n- `spacing` is **space** and `edgeSpacing` is **empty string** if `min` is `true`\n\nEach property of `colors` corresponds to a property of `theme` in `options`:\n\n- the key is the same (for example, `tag`)\n- the value in `colors` is a object with `open` and `close` properties whose values are escape codes from [ansi-styles](https://github.com/chalk/ansi-styles) for the color value in `theme` (for example, `'cyan'`)\n\n### Example of print and test\n\nThis plugin prints functions with the **number of named arguments** excluding rest argument.\n\n```js\nconst plugin = {\n print(val) {\n return `[Function ${val.name || 'anonymous'} ${val.length}]`;\n },\n test(val) {\n return typeof val === 'function';\n },\n};\n```\n\n```js\nconst val = {\n onClick(event) {},\n render() {},\n};\n\nprettyFormat(val, {\n plugins: [plugin],\n});\n/*\nObject {\n \"onClick\": [Function onClick 1],\n \"render\": [Function render 0],\n}\n*/\n\nprettyFormat(val);\n/*\nObject {\n \"onClick\": [Function onClick],\n \"render\": [Function render],\n}\n*/\n```\n\nThis plugin **ignores** the `printFunctionName` option. That limitation of the original `print` interface is a reason to use the improved `serialize` interface, described above.\n\n```js\nprettyFormat(val, {\n plugins: [pluginOld],\n printFunctionName: false,\n});\n/*\nObject {\n \"onClick\": [Function onClick 1],\n \"render\": [Function render 0],\n}\n*/\n\nprettyFormat(val, {\n printFunctionName: false,\n});\n/*\nObject {\n \"onClick\": [Function],\n \"render\": [Function],\n}\n*/\n```\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/facebook/jest/issues"},"homepage":"https://github.com/facebook/jest#readme","_id":"pretty-format@28.0.0-alpha.9","_nodeVersion":"16.14.2","_npmVersion":"lerna/4.0.0/node@v16.14.2+x64 (darwin)","dist":{"integrity":"sha512-L9d6AzjnyvyoHr0F6jCB+70Nlk170kbfiXCrYism/Xapn4SGJDc8ldXfjFEkm+412HIHj8spWkHOOq2ovq0WQg==","shasum":"f91a5153ba51aa071fcd08fc63336df97026aa07","tarball":"http://localhost:4545/npm/registry/pretty-format/pretty-format-28.0.0-alpha.9.tgz","fileCount":16,"unpackedSize":64133,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD2NUlg1BtnLJ+NVzA19XOUg1yf3qvSKmv4xxjWh4AFvAIgLfVZj9MfuO5PLBH/nA87wS2I+RyyPw8akNMuKqNDi1M="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiXpYCACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmrFvw//TXmuVp1QyLBEjciTNdUBqbudBoxi6upVBA7Kxyhqm9vGldDT\r\n+yVtGB2Chw98p6/tZf4B9BhaJntVXVE5GbDUJE+2Mc3MA0llhiSG/isGTiUU\r\nYZ5MVWqN7yL+aNeo0KGm3Ee21In2BkJM8rzFEKszke9kGN9e9/fh/AoClEc2\r\n0AZxSn0252ot0EMhD9xrNVU11GC/WlCZoO+HSunX2SdfRQVutbqZweu4w+j+\r\nptLM2zdNQzM02M+iIg4P1Er8vkOJDywN1W/59Ael1/lqx0qIz+Rb4019PEP9\r\nX4Zi+nkpebRRaqXwq3OGjV6si+dnTGR7y6Na+QMIeHJe06dtAZiPNwTLBa7E\r\nfk51PlxiimXy9Zf0pCTET9p2Emwemo8XchxWFIHGZJPTy/1CLhNu+2SMt+w+\r\n8KyKYh/0VOePNYvLRx8iBurYhXktEpzRsz6xcgWMlOx7HroXZUbDbmh51P/d\r\npPq3SC+XxemmY5VCqERG0CFCwC1Nso4XR+9DggEj0blOqyQO7pqvfG5VCwWB\r\nVpXBar94MvS4/z9APwnGMfstS2p49BQgx8tRPqupqLiKNAlTXeb6JJyMDGh+\r\natL6nH/DnrRVHZHVhB1OfuKpmdV+4sIkyZXyeccTFwrVGxAPqZ85I12KSET9\r\nuWwVXKqJ0OP31WI178i8aL2GqElMBlhVg84=\r\n=edZp\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"simenb","email":"sbekkhus91@gmail.com"},"directories":{},"maintainers":[{"name":"scotthovestadt","email":"scott.hovestadt@gmail.com"},{"name":"rubennorte","email":"rubennorte@gmail.com"},{"name":"simenb","email":"sbekkhus91@gmail.com"},{"name":"fb","email":"opensource+npm@fb.com"},{"name":"aaronabramov","email":"aaron@abramov.io"},{"name":"davidzilburg","email":"davidzilburg@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pretty-format_28.0.0-alpha.9_1650365954013_0.5782213305662727"},"_hasShrinkwrap":false},"28.0.0":{"name":"pretty-format","version":"28.0.0","repository":{"type":"git","url":"git+https://github.com/facebook/jest.git","directory":"packages/pretty-format"},"license":"MIT","description":"Stringify any JavaScript value.","main":"./build/index.js","types":"./build/index.d.ts","exports":{".":{"types":"./build/index.d.ts","default":"./build/index.js"},"./package.json":"./package.json","./ConvertAnsi":"./build/plugins/ConvertAnsi.js"},"author":{"name":"James Kyle","email":"me@thejameskyle.com"},"dependencies":{"@jest/schemas":"^28.0.0","ansi-regex":"^5.0.1","ansi-styles":"^5.0.0","react-is":"^18.0.0"},"devDependencies":{"@types/react":"^17.0.3","@types/react-is":"^17.0.0","@types/react-test-renderer":"17.0.2","expect":"^28.0.0","immutable":"^4.0.0","jest-util":"^28.0.0","react":"17.0.2","react-dom":"^17.0.1","react-test-renderer":"17.0.2"},"engines":{"node":"^12.13.0 || ^14.15.0 || ^16.13.0 || >=17.0.0"},"publishConfig":{"access":"public"},"gitHead":"8f9b812faf8e4d241d560a8574f0c6ed20a89365","bugs":{"url":"https://github.com/facebook/jest/issues"},"homepage":"https://github.com/facebook/jest#readme","_id":"pretty-format@28.0.0","_nodeVersion":"16.14.2","_npmVersion":"lerna/4.0.0/node@v16.14.2+x64 (darwin)","dist":{"integrity":"sha512-CoBfnZavDij+aBzQCVWIIYaZEe1ifIGLI2lG+c3/spHWhpeSt4kpjGd5W50GqtdtbL/Ojx4ZonGIqZVdUNoBGQ==","shasum":"d0bd7ece4a113692865ec493df0a26490c791d21","tarball":"http://localhost:4545/npm/registry/pretty-format/pretty-format-28.0.0.tgz","fileCount":16,"unpackedSize":64101,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD0qVEYwHEthpQq7DnURfRFaX7I/+JTW3Hq76b7T05BcwIgO+uizR0ejvomDHmeyYrr3cJSv69S1PWDkX+jN+4APYU="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiZo8mACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmrr5Q//d6fb81Y0UHAzp1dqU6cDRWrwr0qtzwuJM7Rchmr0GgbrpoUf\r\neJ+CGbLCJTFcbZQCUUe3WyrKTLpB25pFVj+py/mTPhnS3jQCMYPAYmOfazaV\r\nEuoZOMzBHCMOYNjKdwRbRuAtmnWRVnieR5MLYkQNI30cy0srfxGu49OIT3wP\r\nrKNXQeKwzCFuTbu3morKZ4XRkQiP6HpZrcFjmMTiem1T+XNLChgcUpMrFxqk\r\nJTjppZ2M9jxAe4u3I49zim+0zZ9Dd4Llvy8UZSUYb7B2Lo3LUkcoofQvVIqM\r\niPUO6qQPGIvWlGXFUZ6h78GU1sQI3OWyKxpFB5cBaIMOQx4F8WtjUa/kTlqL\r\nZjvuJcVqxZN9BX3Y7cOR7pvLbgaU4iaBJo0eBlPsjFX9bW+6SVL18pCL7gUC\r\n+AELWv8kjsNKCR9KTQcjztOjOozUdZ+sp3i89rWk6mcbzxunFHF6uhMzXeCA\r\npoTWiDi8qZj7pKN9nn5yOrzc1L5nusMCuq5eMsmJSkYfPuIoQgT2q8qZ5xiB\r\nhAmE8/9OLufKvlz52idD56q28qAHTD2IH1CTzDZtxz5q1jbXQrfRaESJVyLG\r\n7ItnrN0fOgkR4RQOxFT5c31hwOinN2yazXU0GCpmnq1XYaYfNHRIixU94fzL\r\nK2tpEz1ASV9kdtxfYIQNs3fr+s6N7oc9EOk=\r\n=Pzxf\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"simenb","email":"sbekkhus91@gmail.com"},"directories":{},"maintainers":[{"name":"scotthovestadt","email":"scott.hovestadt@gmail.com"},{"name":"rubennorte","email":"rubennorte@gmail.com"},{"name":"simenb","email":"sbekkhus91@gmail.com"},{"name":"fb","email":"opensource+npm@fb.com"},{"name":"aaronabramov","email":"aaron@abramov.io"},{"name":"davidzilburg","email":"davidzilburg@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pretty-format_28.0.0_1650888486611_0.7246886855603005"},"_hasShrinkwrap":false},"28.0.1":{"name":"pretty-format","version":"28.0.1","repository":{"type":"git","url":"git+https://github.com/facebook/jest.git","directory":"packages/pretty-format"},"license":"MIT","description":"Stringify any JavaScript value.","main":"./build/index.js","types":"./build/index.d.ts","exports":{".":{"types":"./build/index.d.ts","default":"./build/index.js"},"./package.json":"./package.json","./ConvertAnsi":"./build/plugins/ConvertAnsi.js"},"author":{"name":"James Kyle","email":"me@thejameskyle.com"},"dependencies":{"@jest/schemas":"^28.0.0","ansi-regex":"^5.0.1","ansi-styles":"^5.0.0","react-is":"^18.0.0"},"devDependencies":{"@types/react":"^17.0.3","@types/react-is":"^17.0.0","@types/react-test-renderer":"17.0.2","expect":"^28.0.1","immutable":"^4.0.0","jest-util":"^28.0.1","react":"17.0.2","react-dom":"^17.0.1","react-test-renderer":"17.0.2"},"engines":{"node":"^12.13.0 || ^14.15.0 || ^16.13.0 || >=17.0.0"},"publishConfig":{"access":"public"},"gitHead":"0a08639e4299f07becf1020a761adfec83536018","bugs":{"url":"https://github.com/facebook/jest/issues"},"homepage":"https://github.com/facebook/jest#readme","_id":"pretty-format@28.0.1","_nodeVersion":"16.14.2","_npmVersion":"lerna/4.0.0/node@v16.14.2+x64 (darwin)","dist":{"integrity":"sha512-utVSIy0ImophYyJALfiWULOeMnfoxLZEzii/92VcSzN7OX5U1r7erAMqfDJyuv31ugw4Rp5tOYUMndsZV1w8DQ==","shasum":"ae6753bd2bf26fdd552f41194568ccbef23d22af","tarball":"http://localhost:4545/npm/registry/pretty-format/pretty-format-28.0.1.tgz","fileCount":16,"unpackedSize":64101,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCWMB2LYED9Y26Hbf/JN26dKoJUyy8BAVNJsOwWY6fwUAIhAKOJ6KTwc/Hh52ws8QLhz7/jYrIzQuA/5cBc6OKqYQ6h"}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiZ8M4ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmqfPA//Rwodfiz/OegmMxhEC6Qiacd8MXBrLOqUMr0B2g9JZL4TVNJa\r\nKn+Gom5gWk8N1x6P4l7eutMSr6pCrxeuav5hg5VU4k0xein2ppTcLsS6jIh8\r\nPvo/+tFKyX/g6WC6El4t1HjlitPeL0h2+wBG+NVXQVcPvPrgPDSZvT1TDQVk\r\ndGRTv4RMOzubmjZnc4Kld1XgPkBy83QYbeTpgNa3kzZfPNQcC952nPOP+iH4\r\npQpFHFnEgd4ygzrhLAxbAivGZVojaFLyF7AgmURcF6rGSanC7Sv5Cza7KaLU\r\nepIqa1tHtIEqI3hBF1QJHDbVACAZG+T65kesFxdFVx0jJDUX17d2F0dtIU9I\r\naDDk3DYsH+jv9LRaF2PL+QCKx++vsBFLxJOMqZB4D8yzFpnt6+BvGvlnHL01\r\n0QgLr3Z/WSl50r3CaBo8VHeMuP9Li9xMjdpgefVyH0k42QKY/myGswZJ6uTF\r\ncORApEtpQzpzjc6iEa+Z6vMReu2ZDlGHgePsBPiO+529UVWh9MbE2vGpdhmM\r\nf27+GICHWVEP+KIVXpTt5NzIuR1IIutG8LwD3Idfm0SCWRDPvE2II8tNJxl3\r\ntbNkLQneubXJA4xcdlKAyNKze5BEM1KvztB5J2e27FXtVsFrcCfl8m0oNx6z\r\nSAxPb9QPwCa3FROSFKdZfiqTTHKrQS7svw8=\r\n=a1G4\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"simenb","email":"sbekkhus91@gmail.com"},"directories":{},"maintainers":[{"name":"scotthovestadt","email":"scott.hovestadt@gmail.com"},{"name":"rubennorte","email":"rubennorte@gmail.com"},{"name":"simenb","email":"sbekkhus91@gmail.com"},{"name":"fb","email":"opensource+npm@fb.com"},{"name":"aaronabramov","email":"aaron@abramov.io"},{"name":"davidzilburg","email":"davidzilburg@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pretty-format_28.0.1_1650967352300_0.6302006512233063"},"_hasShrinkwrap":false},"28.0.2":{"name":"pretty-format","version":"28.0.2","repository":{"type":"git","url":"git+https://github.com/facebook/jest.git","directory":"packages/pretty-format"},"license":"MIT","description":"Stringify any JavaScript value.","main":"./build/index.js","types":"./build/index.d.ts","exports":{".":{"types":"./build/index.d.ts","default":"./build/index.js"},"./package.json":"./package.json","./ConvertAnsi":"./build/plugins/ConvertAnsi.js"},"author":{"name":"James Kyle","email":"me@thejameskyle.com"},"dependencies":{"@jest/schemas":"^28.0.2","ansi-regex":"^5.0.1","ansi-styles":"^5.0.0","react-is":"^18.0.0"},"devDependencies":{"@types/react":"^17.0.3","@types/react-is":"^17.0.0","@types/react-test-renderer":"17.0.2","expect":"^28.0.2","immutable":"^4.0.0","jest-util":"^28.0.2","react":"17.0.2","react-dom":"^17.0.1","react-test-renderer":"17.0.2"},"engines":{"node":"^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0"},"publishConfig":{"access":"public"},"gitHead":"279ee6658d763f024d51f340fab6a37c17d94502","bugs":{"url":"https://github.com/facebook/jest/issues"},"homepage":"https://github.com/facebook/jest#readme","_id":"pretty-format@28.0.2","_nodeVersion":"16.15.0","_npmVersion":"lerna/4.0.0/node@v16.15.0+x64 (darwin)","dist":{"integrity":"sha512-UmGZ1IERwS3yY35LDMTaBUYI1w4udZDdJGGT/DqQeKG9ZLDn7/K2Jf/JtYSRiHCCKMHvUA+zsEGSmHdpaVp1yw==","shasum":"6a24d71cbb61a5e5794ba7513fe22101675481bc","tarball":"http://localhost:4545/npm/registry/pretty-format/pretty-format-28.0.2.tgz","fileCount":16,"unpackedSize":64101,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDGMf5Vmti+pXap1k1v8HQQIlYy3cWKsMcjSPfsERY2EQIgdltGk+QiRQthWotzvSVyj0wz5Trc2YzrvEwkUj+DzTk="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiaPRBACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmr8jxAAnIYpdfUBZiwxWm/6kY88OSBdOCa+94+okjEw5gpTmka7TmAg\r\nteOnEiKgGQn0mFaZeqsFpq7sciTFQZOMoNQxGwwd1WCcXdbjQx5FEGMlxjjR\r\nmitGZHmgEGo71sQ3a5CY4poBIKo3JnQbPBqsoVZPjd57iMyu8miJPsdxEd6a\r\n3i96z9EU6uvIpLVFuH0lEz6yseobgTMReb2QGqAijEEijqH4hg4nF3eDP0+L\r\nkkY+4iPObr88n8d4e7CXdjSXJst9Anf2gaUFWd2IJm14EV0wxiY2Qu/eP43m\r\nhL0EyoBtO71gADqjVQhyLrITdUSWBWZJ73EyCgXQIG46SH/zZgd79Qh6q3uj\r\noaDbbVBH3PLxRtjjeT+dot5gep9OlDjxJeGYB8QX+epFk+FJC/H0ZjPTN9YO\r\nKzSaPqxMX1u0vUh6k5T+GHaDqu2R5pZmwxCOmfS/1ryoc0n9onVxdaZV4cAT\r\n/UWtoSGy91nHRlt66TXTBcIkoK8KylSwsRLi8bwtegF0hRBqprHi0HeOZbF9\r\nWs4+ktfmCp+/hS605vyacMPBuLxdcBhyypvJCrX2dBzDbHSbUH9MYqyeDqWb\r\n+XCjk/0sP5Tb//kegJdNt5EULMoS24PoYY9LPFSzjGpx3uO8j2oRXlKIAxu0\r\naf6ImSLAt/pL+n9f0t9EujEZhCek1gx0+wk=\r\n=K+GM\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"simenb","email":"sbekkhus91@gmail.com"},"directories":{},"maintainers":[{"name":"scotthovestadt","email":"scott.hovestadt@gmail.com"},{"name":"rubennorte","email":"rubennorte@gmail.com"},{"name":"simenb","email":"sbekkhus91@gmail.com"},{"name":"fb","email":"opensource+npm@fb.com"},{"name":"aaronabramov","email":"aaron@abramov.io"},{"name":"davidzilburg","email":"davidzilburg@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pretty-format_28.0.2_1651045441612_0.8638898920815299"},"_hasShrinkwrap":false},"28.1.0":{"name":"pretty-format","version":"28.1.0","repository":{"type":"git","url":"git+https://github.com/facebook/jest.git","directory":"packages/pretty-format"},"license":"MIT","description":"Stringify any JavaScript value.","main":"./build/index.js","types":"./build/index.d.ts","exports":{".":{"types":"./build/index.d.ts","default":"./build/index.js"},"./package.json":"./package.json","./ConvertAnsi":"./build/plugins/ConvertAnsi.js"},"author":{"name":"James Kyle","email":"me@thejameskyle.com"},"dependencies":{"@jest/schemas":"^28.0.2","ansi-regex":"^5.0.1","ansi-styles":"^5.0.0","react-is":"^18.0.0"},"devDependencies":{"@types/react":"^17.0.3","@types/react-is":"^17.0.0","@types/react-test-renderer":"17.0.2","expect":"^28.1.0","immutable":"^4.0.0","jest-util":"^28.1.0","react":"17.0.2","react-dom":"^17.0.1","react-test-renderer":"17.0.2"},"engines":{"node":"^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0"},"publishConfig":{"access":"public"},"gitHead":"f5db241312f46528389e55c38221e6b6968622cf","bugs":{"url":"https://github.com/facebook/jest/issues"},"homepage":"https://github.com/facebook/jest#readme","_id":"pretty-format@28.1.0","_nodeVersion":"16.15.0","_npmVersion":"lerna/4.0.0/node@v16.15.0+x64 (darwin)","dist":{"integrity":"sha512-79Z4wWOYCdvQkEoEuSlBhHJqWeZ8D8YRPiPctJFCtvuaClGpiwiQYSCUOE6IEKUbbFukKOTFIUAXE8N4EQTo1Q==","shasum":"8f5836c6a0dfdb834730577ec18029052191af55","tarball":"http://localhost:4545/npm/registry/pretty-format/pretty-format-28.1.0.tgz","fileCount":16,"unpackedSize":64101,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEga5NvNYUymiNpUcHiNitM9sxSTmChPHXKiPZPO1CPqAiAP6zhjUWyqKggAsiOoa6q4xIWXpoJVIUFyFhaZ+Kqwag=="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJidP0VACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmod6g/+MdpJUmlFaibworTHGNC60ckA1+KELWX7745SmrmyD4RFzeOe\r\n64rR93gpGvUy1QEBFo7WNa/eiSBZ840zNhRbLU/easWPxZOltDL2mxdh9x0r\r\nw9c3cVAJqrRVL4SIxHFNbDruQjweG+vw6EN5XD0kBX2UvpNDIgooy/9xPpax\r\ntZfXm9KMCKxms4JKwKDt3R9SpyBhfC9HKm3Itig2A8gDah0fwsvfa8okfnCO\r\nZS6MaofcaZJQEkXvcDx1aa81OsalWbz/Bk/5aX/R8deu9jljP1UK66yL3z90\r\nsbnl+h6TDt3Pt8+28dgxp8dEBJ0Ea7idmxQsC12Zb6Ob7GXboIIWByIaIb+N\r\nR/SnoyUkxRhoby2EYgy8WeLrGjHd1UyWtay/rqmiVmj+N37umOgGDp/AZtNX\r\nriCLHSSRvTd/KIKGeOZNYbYiHV6eHH87X6Hv+VrkEHb+R412JBgwKAjvs7ve\r\nkJbN8CrWDj8Tu/YSDBiEjUcFko6MT4VeCrKPKYxBzPYCI1BWLnEW2rvb1XfB\r\n35WoPfMWhb05jtPObwAK3l4A1GibFBQWNwYehajilHfvHXFN7DDGN7+iCUFQ\r\nt2extRHSuwYAs74WnYnMq1qgrXsO6lxivDDEkftpDKBvjRFheIzJzx1uF4xG\r\nxdtTY8dCp0G/TO+LXrWYNTHG/LXh6JvK5lQ=\r\n=6m27\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"simenb","email":"sbekkhus91@gmail.com"},"directories":{},"maintainers":[{"name":"scotthovestadt","email":"scott.hovestadt@gmail.com"},{"name":"rubennorte","email":"rubennorte@gmail.com"},{"name":"simenb","email":"sbekkhus91@gmail.com"},{"name":"fb","email":"opensource+npm@fb.com"},{"name":"aaronabramov","email":"aaron@abramov.io"},{"name":"davidzilburg","email":"davidzilburg@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pretty-format_28.1.0_1651834133317_0.5061198094419364"},"_hasShrinkwrap":false},"28.1.1":{"name":"pretty-format","version":"28.1.1","repository":{"type":"git","url":"git+https://github.com/facebook/jest.git","directory":"packages/pretty-format"},"license":"MIT","description":"Stringify any JavaScript value.","main":"./build/index.js","types":"./build/index.d.ts","exports":{".":{"types":"./build/index.d.ts","default":"./build/index.js"},"./package.json":"./package.json","./ConvertAnsi":"./build/plugins/ConvertAnsi.js"},"author":{"name":"James Kyle","email":"me@thejameskyle.com"},"dependencies":{"@jest/schemas":"^28.0.2","ansi-regex":"^5.0.1","ansi-styles":"^5.0.0","react-is":"^18.0.0"},"devDependencies":{"@types/react":"^17.0.3","@types/react-is":"^17.0.0","@types/react-test-renderer":"17.0.2","expect":"^28.1.1","immutable":"^4.0.0","jest-util":"^28.1.1","react":"17.0.2","react-dom":"^17.0.1","react-test-renderer":"17.0.2"},"engines":{"node":"^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0"},"publishConfig":{"access":"public"},"gitHead":"eb954f8874960920ac50a8f976bb333fbb06ada9","bugs":{"url":"https://github.com/facebook/jest/issues"},"homepage":"https://github.com/facebook/jest#readme","_id":"pretty-format@28.1.1","_nodeVersion":"16.15.1","_npmVersion":"lerna/4.0.0/node@v16.15.1+x64 (darwin)","dist":{"integrity":"sha512-wwJbVTGFHeucr5Jw2bQ9P+VYHyLdAqedFLEkdQUVaBF/eiidDwH5OpilINq4mEfhbCjLnirt6HTTDhv1HaTIQw==","shasum":"f731530394e0f7fcd95aba6b43c50e02d86b95cb","tarball":"http://localhost:4545/npm/registry/pretty-format/pretty-format-28.1.1.tgz","fileCount":16,"unpackedSize":64101,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBHWTh0R5OWPBXZCmE82Cd9QylJIxCJbdt92GwXg1HJeAiEAypMTBYlwurLVjpVuVHhMjVtcuJCK088S9IXPoO7DijM="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJinuufACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmpVPA//SmmgcdE3n51GapMieIH3SRC3FSs5ZweygiRs6/Rk6FLYbWrs\r\nycrLDoxpMHfWqFYZW3dpPM0v+onkcD3DhSujODdMeqlT87Q1UBZB66S6imy2\r\nMsRVfuquNRPPpWY7alqg1zE427CfERZVM3ADPZKroPOm2gRt4E2wXrsYBKYy\r\n461xnBj5MIo9X+UeiAbn/DnGd5Gk6By/DhU5961MJSum3UgOGbDst8r7GFc+\r\nHxJ+6J1KD1TzWLP2AHJxcXkTLagDJsK+g24fjrl2EjQyfPJI/Bb3z6uAKLyh\r\n6FMrVX2bmQwdkZgR4S4/dcmdZHRyw+LqK1p6tyZF2es2CD4VOJ8vZO1Gh32Y\r\n9LgywCYg40FcAyptN/+1wZCxX7LoT3dbRK4RV3e000z2ZGHI5OoLlRSlaP1J\r\nB2YujXJ9NxLCD7zUAoyph/IGrVtFcLk9Z6r9kjx+zMOVvvPhIY8uUHTFmPo4\r\nxDeS8g1J7e0qSL++j6diRuA2OUhy9AQeUgNmwZ7Jb48No1BidtZ0EG5hcJYC\r\nEsEzfWoC6w1QCP1Fk+hecx3LWZWL5pEMGa23VtER+wnqmetQNyfJQK8nQ9zi\r\n6idhIuJkjyhRBaracH5zy1trj80TH+eHiLV4R3o754Js/cQk1XBLv2is0YQT\r\nXYkhQQinA9+NmN27wjjYr0K8aFQ27VAo2os=\r\n=53Sc\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"simenb","email":"sbekkhus91@gmail.com"},"directories":{},"maintainers":[{"name":"scotthovestadt","email":"scott.hovestadt@gmail.com"},{"name":"rubennorte","email":"rubennorte@gmail.com"},{"name":"simenb","email":"sbekkhus91@gmail.com"},{"name":"fb","email":"opensource+npm@fb.com"},{"name":"aaronabramov","email":"aaron@abramov.io"},{"name":"davidzilburg","email":"davidzilburg@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pretty-format_28.1.1_1654582175397_0.28329124387424587"},"_hasShrinkwrap":false},"28.1.3":{"name":"pretty-format","version":"28.1.3","repository":{"type":"git","url":"git+https://github.com/facebook/jest.git","directory":"packages/pretty-format"},"license":"MIT","description":"Stringify any JavaScript value.","main":"./build/index.js","types":"./build/index.d.ts","exports":{".":{"types":"./build/index.d.ts","default":"./build/index.js"},"./package.json":"./package.json","./ConvertAnsi":"./build/plugins/ConvertAnsi.js"},"author":{"name":"James Kyle","email":"me@thejameskyle.com"},"dependencies":{"@jest/schemas":"^28.1.3","ansi-regex":"^5.0.1","ansi-styles":"^5.0.0","react-is":"^18.0.0"},"devDependencies":{"@types/react":"^17.0.3","@types/react-is":"^17.0.0","@types/react-test-renderer":"17.0.2","expect":"^28.1.3","immutable":"^4.0.0","jest-util":"^28.1.3","react":"17.0.2","react-dom":"^17.0.1","react-test-renderer":"17.0.2"},"engines":{"node":"^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0"},"publishConfig":{"access":"public"},"gitHead":"2cce069800dab3fc8ca7c469b32d2e2b2f7e2bb1","bugs":{"url":"https://github.com/facebook/jest/issues"},"homepage":"https://github.com/facebook/jest#readme","_id":"pretty-format@28.1.3","_nodeVersion":"16.15.1","_npmVersion":"lerna/4.0.0/node@v16.15.1+x64 (darwin)","dist":{"integrity":"sha512-8gFb/To0OmxHR9+ZTb14Df2vNxdGCX8g1xWGUTqUw5TiZvcQf5sHKObd5UcPyLLyowNwDAMTF3XWOG1B6mxl1Q==","shasum":"c9fba8cedf99ce50963a11b27d982a9ae90970d5","tarball":"http://localhost:4545/npm/registry/pretty-format/pretty-format-28.1.3.tgz","fileCount":16,"unpackedSize":64101,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAXAAwZr9RPm8nj74hL+hm++n4JhP4KTPbOCfL21ZKp3AiBwtwwkAtMTZSwMPwwoW/wXyYu5RqCT7E7QubtsZhQRYQ=="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiztLLACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmoQcg/9Fu6jM1gaiw5m6rlw+rKF8ItOOH9mAl9O7AXdyWSaGeCROUKA\r\ndzxLQJ/dhVdCFIIY0ffcvbNAasEdXsOR8kijmc5ODuhiK/CuJz7czZ7L6/Gd\r\n9iISKICBvGghbloraKE3ZuDBDL3yhSp5Yb9gV9VcsFpF3J5ZzeLN29P4bQb2\r\nhzEwpL/G0oCC8jcDmhczfVnciWgxnNrig2TsZJkbScW7c+Ohlno+rVqA/HFB\r\n3pbDau+rrvdw2pcNOqCTA0CbUwOjVFt4iEjxgxiCcndr0hEJUVm9+JDpCigQ\r\npRTuDfRwSL/eLRWcXTbCmaRaJKq2rbrSYsKVm+eS5mcPtfSh00dLTkoW4yUi\r\n5cMFMsqlBiKVe6kEWjd0pf4VBtFCI6W6ikRcqGw7XkV9JI1WCSN8sCfSc9vd\r\n+4pkMlTzaDq4upT7FOnGPBD/tME0BVTFn1T4ZBOKBjzrPOVJmtL282i9w3jJ\r\nxu3bVsOB+lBs4B9ruMjT8JLRifiA/Hr5qupu4zOZYY2RXY/lzcixIDY+ypor\r\nXK5EC249FZiuksdoKtFZjTJ/iOcyNMs+aD9u2TSxi6CqQ5H48n8UO/tuWMPx\r\nymAhhFr8jPlruaskvxamUQ1mxeaRXatWAqi4IGxxMBTmGzEPGENzqKfHZY8f\r\n48DtPsU87AG8GO7dBiBP1aay9ZPDySUKS0g=\r\n=rwNr\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"simenb","email":"sbekkhus91@gmail.com"},"directories":{},"maintainers":[{"name":"scotthovestadt","email":"scott.hovestadt@gmail.com"},{"name":"rubennorte","email":"rubennorte@gmail.com"},{"name":"simenb","email":"sbekkhus91@gmail.com"},{"name":"fb","email":"opensource+npm@fb.com"},{"name":"aaronabramov","email":"aaron@abramov.io"},{"name":"davidzilburg","email":"davidzilburg@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pretty-format_28.1.3_1657721546848_0.8877523208230207"},"_hasShrinkwrap":false},"29.0.0-alpha.0":{"name":"pretty-format","version":"29.0.0-alpha.0","repository":{"type":"git","url":"git+https://github.com/facebook/jest.git","directory":"packages/pretty-format"},"license":"MIT","description":"Stringify any JavaScript value.","main":"./build/index.js","types":"./build/index.d.ts","exports":{".":{"types":"./build/index.d.ts","default":"./build/index.js"},"./package.json":"./package.json","./ConvertAnsi":"./build/plugins/ConvertAnsi.js"},"author":{"name":"James Kyle","email":"me@thejameskyle.com"},"dependencies":{"@jest/schemas":"^29.0.0-alpha.0","ansi-regex":"^5.0.1","ansi-styles":"^5.0.0","react-is":"^18.0.0"},"devDependencies":{"@types/react":"^17.0.3","@types/react-is":"^17.0.0","@types/react-test-renderer":"17.0.2","expect":"^29.0.0-alpha.0","immutable":"^4.0.0","jest-util":"^29.0.0-alpha.0","react":"17.0.2","react-dom":"^17.0.1","react-test-renderer":"17.0.2"},"engines":{"node":"^14.15.0 || ^16.10.0 || >=18.0.0"},"publishConfig":{"access":"public"},"gitHead":"6862afb00307b52f32eedee977a9b3041355f184","readme":"# pretty-format\n\nStringify any JavaScript value.\n\n- Serialize built-in JavaScript types.\n- Serialize application-specific data types with built-in or user-defined plugins.\n\n## Installation\n\n```sh\n$ yarn add pretty-format\n```\n\n## Usage\n\n```js\nconst {format: prettyFormat} = require('pretty-format'); // CommonJS\n```\n\n```js\nimport {format as prettyFormat} from 'pretty-format'; // ES2015 modules\n```\n\n```js\nconst val = {object: {}};\nval.circularReference = val;\nval[Symbol('foo')] = 'foo';\nval.map = new Map([['prop', 'value']]);\nval.array = [-0, Infinity, NaN];\n\nconsole.log(prettyFormat(val));\n/*\nObject {\n \"array\": Array [\n -0,\n Infinity,\n NaN,\n ],\n \"circularReference\": [Circular],\n \"map\": Map {\n \"prop\" => \"value\",\n },\n \"object\": Object {},\n Symbol(foo): \"foo\",\n}\n*/\n```\n\n## Usage with options\n\n```js\nfunction onClick() {}\n\nconsole.log(prettyFormat(onClick));\n/*\n[Function onClick]\n*/\n\nconst options = {\n printFunctionName: false,\n};\nconsole.log(prettyFormat(onClick, options));\n/*\n[Function]\n*/\n```\n\n\n| key | type | default | description |\n| :-------------------- | :-------- | :--------- | :------------------------------------------------------ |\n| `callToJSON` | `boolean` | `true` | call `toJSON` method (if it exists) on objects |\n| `compareKeys` | `function`| `undefined`| compare function used when sorting object keys |\n| `escapeRegex` | `boolean` | `false` | escape special characters in regular expressions |\n| `escapeString` | `boolean` | `true` | escape special characters in strings |\n| `highlight` | `boolean` | `false` | highlight syntax with colors in terminal (some plugins) |\n| `indent` | `number` | `2` | spaces in each level of indentation |\n| `maxDepth` | `number` | `Infinity` | levels to print in arrays, objects, elements, and so on |\n| `maxWidth` | `number` | `Infinity` | number of elements to print in arrays, sets, and so on |\n| `min` | `boolean` | `false` | minimize added space: no indentation nor line breaks |\n| `plugins` | `array` | `[]` | plugins to serialize application-specific data types |\n| `printBasicPrototype` | `boolean` | `false` | print the prototype for plain objects and arrays |\n| `printFunctionName` | `boolean` | `true` | include or omit the name of a function |\n| `theme` | `object` | | colors to highlight syntax in terminal |\n\nProperty values of `theme` are from [ansi-styles colors](https://github.com/chalk/ansi-styles#colors)\n\n```js\nconst DEFAULT_THEME = {\n comment: 'gray',\n content: 'reset',\n prop: 'yellow',\n tag: 'cyan',\n value: 'green',\n};\n```\n\n## Usage with plugins\n\nThe `pretty-format` package provides some built-in plugins, including:\n\n- `ReactElement` for elements from `react`\n- `ReactTestComponent` for test objects from `react-test-renderer`\n\n```js\n// CommonJS\nconst React = require('react');\nconst renderer = require('react-test-renderer');\nconst {format: prettyFormat, plugins} = require('pretty-format');\n\nconst {ReactElement, ReactTestComponent} = plugins;\n```\n\n```js\n// ES2015 modules and destructuring assignment\nimport React from 'react';\nimport renderer from 'react-test-renderer';\nimport {plugins, format as prettyFormat} from 'pretty-format';\n\nconst {ReactElement, ReactTestComponent} = plugins;\n```\n\n```js\nconst onClick = () => {};\nconst element = React.createElement('button', {onClick}, 'Hello World');\n\nconst formatted1 = prettyFormat(element, {\n plugins: [ReactElement],\n printFunctionName: false,\n});\nconst formatted2 = prettyFormat(renderer.create(element).toJSON(), {\n plugins: [ReactTestComponent],\n printFunctionName: false,\n});\n/*\n\n*/\n```\n\n## Usage in Jest\n\nFor snapshot tests, Jest uses `pretty-format` with options that include some of its built-in plugins. For this purpose, plugins are also known as **snapshot serializers**.\n\nTo serialize application-specific data types, you can add modules to `devDependencies` of a project, and then:\n\nIn an **individual** test file, you can add a module as follows. It precedes any modules from Jest configuration.\n\n```js\nimport serializer from 'my-serializer-module';\nexpect.addSnapshotSerializer(serializer);\n\n// tests which have `expect(value).toMatchSnapshot()` assertions\n```\n\nFor **all** test files, you can specify modules in Jest configuration. They precede built-in plugins for React, HTML, and Immutable.js data types. For example, in a `package.json` file:\n\n```json\n{\n \"jest\": {\n \"snapshotSerializers\": [\"my-serializer-module\"]\n }\n}\n```\n\n## Writing plugins\n\nA plugin is a JavaScript object.\n\nIf `options` has a `plugins` array: for the first plugin whose `test(val)` method returns a truthy value, then `prettyFormat(val, options)` returns the result from either:\n\n- `serialize(val, …)` method of the **improved** interface (available in **version 21** or later)\n- `print(val, …)` method of the **original** interface (if plugin does not have `serialize` method)\n\n### test\n\nWrite `test` so it can receive `val` argument of any type. To serialize **objects** which have certain properties, then a guarded expression like `val != null && …` or more concise `val && …` prevents the following errors:\n\n- `TypeError: Cannot read property 'whatever' of null`\n- `TypeError: Cannot read property 'whatever' of undefined`\n\nFor example, `test` method of built-in `ReactElement` plugin:\n\n```js\nconst elementSymbol = Symbol.for('react.element');\nconst test = val => val && val.$$typeof === elementSymbol;\n```\n\nPay attention to efficiency in `test` because `pretty-format` calls it often.\n\n### serialize\n\nThe **improved** interface is available in **version 21** or later.\n\nWrite `serialize` to return a string, given the arguments:\n\n- `val` which “passed the test”\n- unchanging `config` object: derived from `options`\n- current `indentation` string: concatenate to `indent` from `config`\n- current `depth` number: compare to `maxDepth` from `config`\n- current `refs` array: find circular references in objects\n- `printer` callback function: serialize children\n\n### config\n\n\n| key | type | description |\n| :------------------ | :-------- | :------------------------------------------------------ |\n| `callToJSON` | `boolean` | call `toJSON` method (if it exists) on objects |\n| `compareKeys` | `function`| compare function used when sorting object keys |\n| `colors` | `Object` | escape codes for colors to highlight syntax |\n| `escapeRegex` | `boolean` | escape special characters in regular expressions |\n| `escapeString` | `boolean` | escape special characters in strings |\n| `indent` | `string` | spaces in each level of indentation |\n| `maxDepth` | `number` | levels to print in arrays, objects, elements, and so on |\n| `min` | `boolean` | minimize added space: no indentation nor line breaks |\n| `plugins` | `array` | plugins to serialize application-specific data types |\n| `printFunctionName` | `boolean` | include or omit the name of a function |\n| `spacingInner` | `string` | spacing to separate items in a list |\n| `spacingOuter` | `string` | spacing to enclose a list of items |\n\nEach property of `colors` in `config` corresponds to a property of `theme` in `options`:\n\n- the key is the same (for example, `tag`)\n- the value in `colors` is a object with `open` and `close` properties whose values are escape codes from [ansi-styles](https://github.com/chalk/ansi-styles) for the color value in `theme` (for example, `'cyan'`)\n\nSome properties in `config` are derived from `min` in `options`:\n\n- `spacingInner` and `spacingOuter` are **newline** if `min` is `false`\n- `spacingInner` is **space** and `spacingOuter` is **empty string** if `min` is `true`\n\n### Example of serialize and test\n\nThis plugin is a pattern you can apply to serialize composite data types. Side note: `pretty-format` does not need a plugin to serialize arrays.\n\n```js\n// We reused more code when we factored out a function for child items\n// that is independent of depth, name, and enclosing punctuation (see below).\nconst SEPARATOR = ',';\nfunction serializeItems(items, config, indentation, depth, refs, printer) {\n if (items.length === 0) {\n return '';\n }\n const indentationItems = indentation + config.indent;\n return (\n config.spacingOuter +\n items\n .map(\n item =>\n indentationItems +\n printer(item, config, indentationItems, depth, refs), // callback\n )\n .join(SEPARATOR + config.spacingInner) +\n (config.min ? '' : SEPARATOR) + // following the last item\n config.spacingOuter +\n indentation\n );\n}\n\nconst plugin = {\n test(val) {\n return Array.isArray(val);\n },\n serialize(array, config, indentation, depth, refs, printer) {\n const name = array.constructor.name;\n return ++depth > config.maxDepth\n ? `[${name}]`\n : `${config.min ? '' : `${name} `}[${serializeItems(\n array,\n config,\n indentation,\n depth,\n refs,\n printer,\n )}]`;\n },\n};\n```\n\n```js\nconst val = {\n filter: 'completed',\n items: [\n {\n text: 'Write test',\n completed: true,\n },\n {\n text: 'Write serialize',\n completed: true,\n },\n ],\n};\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n plugins: [plugin],\n }),\n);\n/*\nObject {\n \"filter\": \"completed\",\n \"items\": Array [\n Object {\n \"completed\": true,\n \"text\": \"Write test\",\n },\n Object {\n \"completed\": true,\n \"text\": \"Write serialize\",\n },\n ],\n}\n*/\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n indent: 4,\n plugins: [plugin],\n }),\n);\n/*\nObject {\n \"filter\": \"completed\",\n \"items\": Array [\n Object {\n \"completed\": true,\n \"text\": \"Write test\",\n },\n Object {\n \"completed\": true,\n \"text\": \"Write serialize\",\n },\n ],\n}\n*/\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n maxDepth: 1,\n plugins: [plugin],\n }),\n);\n/*\nObject {\n \"filter\": \"completed\",\n \"items\": [Array],\n}\n*/\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n min: true,\n plugins: [plugin],\n }),\n);\n/*\n{\"filter\": \"completed\", \"items\": [{\"completed\": true, \"text\": \"Write test\"}, {\"completed\": true, \"text\": \"Write serialize\"}]}\n*/\n```\n\n### print\n\nThe **original** interface is adequate for plugins:\n\n- that **do not** depend on options other than `highlight` or `min`\n- that **do not** depend on `depth` or `refs` in recursive traversal, and\n- if values either\n - do **not** require indentation, or\n - do **not** occur as children of JavaScript data structures (for example, array)\n\nWrite `print` to return a string, given the arguments:\n\n- `val` which “passed the test”\n- current `printer(valChild)` callback function: serialize children\n- current `indenter(lines)` callback function: indent lines at the next level\n- unchanging `config` object: derived from `options`\n- unchanging `colors` object: derived from `options`\n\nThe 3 properties of `config` are `min` in `options` and:\n\n- `spacing` and `edgeSpacing` are **newline** if `min` is `false`\n- `spacing` is **space** and `edgeSpacing` is **empty string** if `min` is `true`\n\nEach property of `colors` corresponds to a property of `theme` in `options`:\n\n- the key is the same (for example, `tag`)\n- the value in `colors` is a object with `open` and `close` properties whose values are escape codes from [ansi-styles](https://github.com/chalk/ansi-styles) for the color value in `theme` (for example, `'cyan'`)\n\n### Example of print and test\n\nThis plugin prints functions with the **number of named arguments** excluding rest argument.\n\n```js\nconst plugin = {\n print(val) {\n return `[Function ${val.name || 'anonymous'} ${val.length}]`;\n },\n test(val) {\n return typeof val === 'function';\n },\n};\n```\n\n```js\nconst val = {\n onClick(event) {},\n render() {},\n};\n\nprettyFormat(val, {\n plugins: [plugin],\n});\n/*\nObject {\n \"onClick\": [Function onClick 1],\n \"render\": [Function render 0],\n}\n*/\n\nprettyFormat(val);\n/*\nObject {\n \"onClick\": [Function onClick],\n \"render\": [Function render],\n}\n*/\n```\n\nThis plugin **ignores** the `printFunctionName` option. That limitation of the original `print` interface is a reason to use the improved `serialize` interface, described above.\n\n```js\nprettyFormat(val, {\n plugins: [pluginOld],\n printFunctionName: false,\n});\n/*\nObject {\n \"onClick\": [Function onClick 1],\n \"render\": [Function render 0],\n}\n*/\n\nprettyFormat(val, {\n printFunctionName: false,\n});\n/*\nObject {\n \"onClick\": [Function],\n \"render\": [Function],\n}\n*/\n```\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/facebook/jest/issues"},"homepage":"https://github.com/facebook/jest#readme","_id":"pretty-format@29.0.0-alpha.0","_nodeVersion":"16.15.1","_npmVersion":"lerna/4.0.0/node@v16.15.1+x64 (darwin)","dist":{"integrity":"sha512-jJty30gRCVJwXpdphPaKXkc9bl87jFxbt0ozgsV7Kp5cV+2YF+5ZfIPne+s0WI80JYXta2qzdQeeoTLrVRoAGg==","shasum":"934f5469a2641c2212034e7e26f43784a8ee3a20","tarball":"http://localhost:4545/npm/registry/pretty-format/pretty-format-29.0.0-alpha.0.tgz","fileCount":16,"unpackedSize":61546,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICCLR0N8CjGxhCgsEpYlIXAZg/IkuGntnXYUGB5PsisCAiEAiiX9LEAi6ByuCrXOwN+lQbRWsbs4akm4b4/I7KYY1gs="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJi1IgKACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmr2jg/9GSiCd118HgvbJ6RY68mDAW5C2yF7vFDtj418yZch1vhT8xOA\r\nU6Xz6nAtbhoZRJT/aO3WBgPiWMSUq1SuqdEi0SCqJGiYr3ffWN5dDfZEWVeL\r\nJyBv76HAr5DXOtYijREgML0b8w3cGumvF9zWHm3PaJ6876wbq9DsZtg8FHzP\r\ncP3eZVRz1wAkoD+AQ6SITR/GfOZtDkcCtnxP1eroYqD6lJq6RZuWud9y6pDu\r\nL5c5OpPCyhQ8l5iLpiRDYovJMYqW07VEgFocx4D56YtRAMULxBLLlJttTnVG\r\n2zGrH3KmmkC4+Cid7CSjYj4+3R3W4ubRtMAUKu80PHkR5f5sX3a17m6u11uj\r\nVcTnIfME0xhFRosf2JJ+3D1AjG7p7RAVMLqOzEluKT0D08SqUNmFU/ApF0I3\r\n96S5ctV3zO9TQWGPi2bw+RZ6bqLyvktPRDAJioMNxMVNuLNgg+1VQdQdwXgj\r\nrz7v72tufCxM4h4g7vwzdSzj7QGh9qCdDDzVYRo6cni1exckKbhTw8g5BlFV\r\nxtHv9ax4e9BPsFr0ze9fPfh65qQhCkwBsuavf+15ZikM51x591GxtcyA5tlz\r\nefsxcVNv+sj/rzCfPxPwVslmxASztA8wwKWQOCAVsPIUCRQYQmSGK754EvRu\r\nKW9a0MHeycEQhch3LN1/9M/dos7LpmUQV+E=\r\n=XnCo\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"simenb","email":"sbekkhus91@gmail.com"},"directories":{},"maintainers":[{"name":"scotthovestadt","email":"scott.hovestadt@gmail.com"},{"name":"rubennorte","email":"rubennorte@gmail.com"},{"name":"simenb","email":"sbekkhus91@gmail.com"},{"name":"fb","email":"opensource+npm@fb.com"},{"name":"aaronabramov","email":"aaron@abramov.io"},{"name":"davidzilburg","email":"davidzilburg@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pretty-format_29.0.0-alpha.0_1658095626813_0.7693977634747002"},"_hasShrinkwrap":false},"29.0.0-alpha.1":{"name":"pretty-format","version":"29.0.0-alpha.1","repository":{"type":"git","url":"git+https://github.com/facebook/jest.git","directory":"packages/pretty-format"},"license":"MIT","description":"Stringify any JavaScript value.","main":"./build/index.js","types":"./build/index.d.ts","exports":{".":{"types":"./build/index.d.ts","default":"./build/index.js"},"./package.json":"./package.json"},"author":{"name":"James Kyle","email":"me@thejameskyle.com"},"dependencies":{"@jest/schemas":"^29.0.0-alpha.0","ansi-styles":"^5.0.0","react-is":"^18.0.0"},"devDependencies":{"@types/react":"^17.0.3","@types/react-is":"^17.0.0","@types/react-test-renderer":"17.0.2","expect":"^29.0.0-alpha.1","immutable":"^4.0.0","jest-util":"^29.0.0-alpha.0","react":"17.0.2","react-dom":"^17.0.1","react-test-renderer":"17.0.2"},"engines":{"node":"^14.15.0 || ^16.10.0 || >=18.0.0"},"publishConfig":{"access":"public"},"gitHead":"10f1e7f52d9f876e6fb7f20c1903fdcddd8db8b1","readme":"# pretty-format\n\nStringify any JavaScript value.\n\n- Serialize built-in JavaScript types.\n- Serialize application-specific data types with built-in or user-defined plugins.\n\n## Installation\n\n```sh\n$ yarn add pretty-format\n```\n\n## Usage\n\n```js\nconst {format: prettyFormat} = require('pretty-format'); // CommonJS\n```\n\n```js\nimport {format as prettyFormat} from 'pretty-format'; // ES2015 modules\n```\n\n```js\nconst val = {object: {}};\nval.circularReference = val;\nval[Symbol('foo')] = 'foo';\nval.map = new Map([['prop', 'value']]);\nval.array = [-0, Infinity, NaN];\n\nconsole.log(prettyFormat(val));\n/*\nObject {\n \"array\": Array [\n -0,\n Infinity,\n NaN,\n ],\n \"circularReference\": [Circular],\n \"map\": Map {\n \"prop\" => \"value\",\n },\n \"object\": Object {},\n Symbol(foo): \"foo\",\n}\n*/\n```\n\n## Usage with options\n\n```js\nfunction onClick() {}\n\nconsole.log(prettyFormat(onClick));\n/*\n[Function onClick]\n*/\n\nconst options = {\n printFunctionName: false,\n};\nconsole.log(prettyFormat(onClick, options));\n/*\n[Function]\n*/\n```\n\n\n| key | type | default | description |\n| :-------------------- | :-------- | :--------- | :------------------------------------------------------ |\n| `callToJSON` | `boolean` | `true` | call `toJSON` method (if it exists) on objects |\n| `compareKeys` | `function`| `undefined`| compare function used when sorting object keys |\n| `escapeRegex` | `boolean` | `false` | escape special characters in regular expressions |\n| `escapeString` | `boolean` | `true` | escape special characters in strings |\n| `highlight` | `boolean` | `false` | highlight syntax with colors in terminal (some plugins) |\n| `indent` | `number` | `2` | spaces in each level of indentation |\n| `maxDepth` | `number` | `Infinity` | levels to print in arrays, objects, elements, and so on |\n| `maxWidth` | `number` | `Infinity` | number of elements to print in arrays, sets, and so on |\n| `min` | `boolean` | `false` | minimize added space: no indentation nor line breaks |\n| `plugins` | `array` | `[]` | plugins to serialize application-specific data types |\n| `printBasicPrototype` | `boolean` | `false` | print the prototype for plain objects and arrays |\n| `printFunctionName` | `boolean` | `true` | include or omit the name of a function |\n| `theme` | `object` | | colors to highlight syntax in terminal |\n\nProperty values of `theme` are from [ansi-styles colors](https://github.com/chalk/ansi-styles#colors)\n\n```js\nconst DEFAULT_THEME = {\n comment: 'gray',\n content: 'reset',\n prop: 'yellow',\n tag: 'cyan',\n value: 'green',\n};\n```\n\n## Usage with plugins\n\nThe `pretty-format` package provides some built-in plugins, including:\n\n- `ReactElement` for elements from `react`\n- `ReactTestComponent` for test objects from `react-test-renderer`\n\n```js\n// CommonJS\nconst React = require('react');\nconst renderer = require('react-test-renderer');\nconst {format: prettyFormat, plugins} = require('pretty-format');\n\nconst {ReactElement, ReactTestComponent} = plugins;\n```\n\n```js\n// ES2015 modules and destructuring assignment\nimport React from 'react';\nimport renderer from 'react-test-renderer';\nimport {plugins, format as prettyFormat} from 'pretty-format';\n\nconst {ReactElement, ReactTestComponent} = plugins;\n```\n\n```js\nconst onClick = () => {};\nconst element = React.createElement('button', {onClick}, 'Hello World');\n\nconst formatted1 = prettyFormat(element, {\n plugins: [ReactElement],\n printFunctionName: false,\n});\nconst formatted2 = prettyFormat(renderer.create(element).toJSON(), {\n plugins: [ReactTestComponent],\n printFunctionName: false,\n});\n/*\n\n*/\n```\n\n## Usage in Jest\n\nFor snapshot tests, Jest uses `pretty-format` with options that include some of its built-in plugins. For this purpose, plugins are also known as **snapshot serializers**.\n\nTo serialize application-specific data types, you can add modules to `devDependencies` of a project, and then:\n\nIn an **individual** test file, you can add a module as follows. It precedes any modules from Jest configuration.\n\n```js\nimport serializer from 'my-serializer-module';\nexpect.addSnapshotSerializer(serializer);\n\n// tests which have `expect(value).toMatchSnapshot()` assertions\n```\n\nFor **all** test files, you can specify modules in Jest configuration. They precede built-in plugins for React, HTML, and Immutable.js data types. For example, in a `package.json` file:\n\n```json\n{\n \"jest\": {\n \"snapshotSerializers\": [\"my-serializer-module\"]\n }\n}\n```\n\n## Writing plugins\n\nA plugin is a JavaScript object.\n\nIf `options` has a `plugins` array: for the first plugin whose `test(val)` method returns a truthy value, then `prettyFormat(val, options)` returns the result from either:\n\n- `serialize(val, …)` method of the **improved** interface (available in **version 21** or later)\n- `print(val, …)` method of the **original** interface (if plugin does not have `serialize` method)\n\n### test\n\nWrite `test` so it can receive `val` argument of any type. To serialize **objects** which have certain properties, then a guarded expression like `val != null && …` or more concise `val && …` prevents the following errors:\n\n- `TypeError: Cannot read property 'whatever' of null`\n- `TypeError: Cannot read property 'whatever' of undefined`\n\nFor example, `test` method of built-in `ReactElement` plugin:\n\n```js\nconst elementSymbol = Symbol.for('react.element');\nconst test = val => val && val.$$typeof === elementSymbol;\n```\n\nPay attention to efficiency in `test` because `pretty-format` calls it often.\n\n### serialize\n\nThe **improved** interface is available in **version 21** or later.\n\nWrite `serialize` to return a string, given the arguments:\n\n- `val` which “passed the test”\n- unchanging `config` object: derived from `options`\n- current `indentation` string: concatenate to `indent` from `config`\n- current `depth` number: compare to `maxDepth` from `config`\n- current `refs` array: find circular references in objects\n- `printer` callback function: serialize children\n\n### config\n\n\n| key | type | description |\n| :------------------ | :-------- | :------------------------------------------------------ |\n| `callToJSON` | `boolean` | call `toJSON` method (if it exists) on objects |\n| `compareKeys` | `function`| compare function used when sorting object keys |\n| `colors` | `Object` | escape codes for colors to highlight syntax |\n| `escapeRegex` | `boolean` | escape special characters in regular expressions |\n| `escapeString` | `boolean` | escape special characters in strings |\n| `indent` | `string` | spaces in each level of indentation |\n| `maxDepth` | `number` | levels to print in arrays, objects, elements, and so on |\n| `min` | `boolean` | minimize added space: no indentation nor line breaks |\n| `plugins` | `array` | plugins to serialize application-specific data types |\n| `printFunctionName` | `boolean` | include or omit the name of a function |\n| `spacingInner` | `string` | spacing to separate items in a list |\n| `spacingOuter` | `string` | spacing to enclose a list of items |\n\nEach property of `colors` in `config` corresponds to a property of `theme` in `options`:\n\n- the key is the same (for example, `tag`)\n- the value in `colors` is a object with `open` and `close` properties whose values are escape codes from [ansi-styles](https://github.com/chalk/ansi-styles) for the color value in `theme` (for example, `'cyan'`)\n\nSome properties in `config` are derived from `min` in `options`:\n\n- `spacingInner` and `spacingOuter` are **newline** if `min` is `false`\n- `spacingInner` is **space** and `spacingOuter` is **empty string** if `min` is `true`\n\n### Example of serialize and test\n\nThis plugin is a pattern you can apply to serialize composite data types. Side note: `pretty-format` does not need a plugin to serialize arrays.\n\n```js\n// We reused more code when we factored out a function for child items\n// that is independent of depth, name, and enclosing punctuation (see below).\nconst SEPARATOR = ',';\nfunction serializeItems(items, config, indentation, depth, refs, printer) {\n if (items.length === 0) {\n return '';\n }\n const indentationItems = indentation + config.indent;\n return (\n config.spacingOuter +\n items\n .map(\n item =>\n indentationItems +\n printer(item, config, indentationItems, depth, refs), // callback\n )\n .join(SEPARATOR + config.spacingInner) +\n (config.min ? '' : SEPARATOR) + // following the last item\n config.spacingOuter +\n indentation\n );\n}\n\nconst plugin = {\n test(val) {\n return Array.isArray(val);\n },\n serialize(array, config, indentation, depth, refs, printer) {\n const name = array.constructor.name;\n return ++depth > config.maxDepth\n ? `[${name}]`\n : `${config.min ? '' : `${name} `}[${serializeItems(\n array,\n config,\n indentation,\n depth,\n refs,\n printer,\n )}]`;\n },\n};\n```\n\n```js\nconst val = {\n filter: 'completed',\n items: [\n {\n text: 'Write test',\n completed: true,\n },\n {\n text: 'Write serialize',\n completed: true,\n },\n ],\n};\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n plugins: [plugin],\n }),\n);\n/*\nObject {\n \"filter\": \"completed\",\n \"items\": Array [\n Object {\n \"completed\": true,\n \"text\": \"Write test\",\n },\n Object {\n \"completed\": true,\n \"text\": \"Write serialize\",\n },\n ],\n}\n*/\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n indent: 4,\n plugins: [plugin],\n }),\n);\n/*\nObject {\n \"filter\": \"completed\",\n \"items\": Array [\n Object {\n \"completed\": true,\n \"text\": \"Write test\",\n },\n Object {\n \"completed\": true,\n \"text\": \"Write serialize\",\n },\n ],\n}\n*/\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n maxDepth: 1,\n plugins: [plugin],\n }),\n);\n/*\nObject {\n \"filter\": \"completed\",\n \"items\": [Array],\n}\n*/\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n min: true,\n plugins: [plugin],\n }),\n);\n/*\n{\"filter\": \"completed\", \"items\": [{\"completed\": true, \"text\": \"Write test\"}, {\"completed\": true, \"text\": \"Write serialize\"}]}\n*/\n```\n\n### print\n\nThe **original** interface is adequate for plugins:\n\n- that **do not** depend on options other than `highlight` or `min`\n- that **do not** depend on `depth` or `refs` in recursive traversal, and\n- if values either\n - do **not** require indentation, or\n - do **not** occur as children of JavaScript data structures (for example, array)\n\nWrite `print` to return a string, given the arguments:\n\n- `val` which “passed the test”\n- current `printer(valChild)` callback function: serialize children\n- current `indenter(lines)` callback function: indent lines at the next level\n- unchanging `config` object: derived from `options`\n- unchanging `colors` object: derived from `options`\n\nThe 3 properties of `config` are `min` in `options` and:\n\n- `spacing` and `edgeSpacing` are **newline** if `min` is `false`\n- `spacing` is **space** and `edgeSpacing` is **empty string** if `min` is `true`\n\nEach property of `colors` corresponds to a property of `theme` in `options`:\n\n- the key is the same (for example, `tag`)\n- the value in `colors` is a object with `open` and `close` properties whose values are escape codes from [ansi-styles](https://github.com/chalk/ansi-styles) for the color value in `theme` (for example, `'cyan'`)\n\n### Example of print and test\n\nThis plugin prints functions with the **number of named arguments** excluding rest argument.\n\n```js\nconst plugin = {\n print(val) {\n return `[Function ${val.name || 'anonymous'} ${val.length}]`;\n },\n test(val) {\n return typeof val === 'function';\n },\n};\n```\n\n```js\nconst val = {\n onClick(event) {},\n render() {},\n};\n\nprettyFormat(val, {\n plugins: [plugin],\n});\n/*\nObject {\n \"onClick\": [Function onClick 1],\n \"render\": [Function render 0],\n}\n*/\n\nprettyFormat(val);\n/*\nObject {\n \"onClick\": [Function onClick],\n \"render\": [Function render],\n}\n*/\n```\n\nThis plugin **ignores** the `printFunctionName` option. That limitation of the original `print` interface is a reason to use the improved `serialize` interface, described above.\n\n```js\nprettyFormat(val, {\n plugins: [pluginOld],\n printFunctionName: false,\n});\n/*\nObject {\n \"onClick\": [Function onClick 1],\n \"render\": [Function render 0],\n}\n*/\n\nprettyFormat(val, {\n printFunctionName: false,\n});\n/*\nObject {\n \"onClick\": [Function],\n \"render\": [Function],\n}\n*/\n```\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/facebook/jest/issues"},"homepage":"https://github.com/facebook/jest#readme","_id":"pretty-format@29.0.0-alpha.1","_nodeVersion":"16.15.1","_npmVersion":"lerna/4.0.0/node@v16.15.1+x64 (darwin)","dist":{"integrity":"sha512-KDMbK6D5xr3jmk8DRQzGzKqFt+5D89zIAYlEUuReet9KznB342p/EC/G7+1u2eOBfIpaeiMNqGU5LSgfSAjRmw==","shasum":"0983500df3b2f43432d92609cdb756e2aa16ffbf","tarball":"http://localhost:4545/npm/registry/pretty-format/pretty-format-29.0.0-alpha.1.tgz","fileCount":15,"unpackedSize":58727,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDejR0uooPv/qQJaxsmYJndBGU0IUxF7YmG2dUrNOYV1AiAgZ+iS2fTqBACeRM6nzGqg3e66WKRH2HJWSALU5jTkuQ=="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJi64IAACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmqo2w/7B5c9nbJ2DXbsx5e/t6bZgdXTUpMkQSAYhiD1np6Eqeuyz6cl\r\nl9Y+7vXxpC7TOo71TAFr5FSbLDoX2P6XKQrlLozGxBzSoAojrZPv/6dTJlaG\r\nCIowKTixw4mJ33UwR1fyYWqaaU4VMcXQCFZd1tFUCTLDJkHSUfnufZcR8ES5\r\nRCrOrMSydBhygGAfKuXv8rf7dpgnzWt0QPgUn3dYctv+CBrJJAPj6fdG88zv\r\n8SJEVg35g9CvopggsT0M/Xked7bRHLjtUZQxmnOOGitFXdC5x/AZK838SU+E\r\nNyhGzIYukORi8eVt4UThsLvlj+QR6zdKf0K+BG1vJlC5czGWgiGNVgiIU75s\r\nKwGH1GnkyXNn9KQM1bDfddBWZK+TqHHISREZw43QpVWq5aScQg3ijj8/lhWU\r\nbIKqO9KIJll18lROHvgv4DjtrmzXoZG7g1r31sgjP0Gw5s/DJgX1mGc/E9Gb\r\nSrQCm78yP3TlaI98tBuXzDf1Aqdxg1P412dPXLqhSfHrhcaDYWUs9wlBmvN1\r\nz/bf9SidKup4oTrMGh3LEaApAeZzKuJm+pOh9vLUZAd2M9um4Bn8wB3SxJsr\r\nc/WI313yYyU6jTlsijRI3/U+Qtkpxlq90RahxFjNpXnQgv6R/sgztnCJnYtm\r\noyp2mgjRAYygsdbvje66kMDvp4QVCzpXFrU=\r\n=ujFi\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"simenb","email":"sbekkhus91@gmail.com"},"directories":{},"maintainers":[{"name":"scotthovestadt","email":"scott.hovestadt@gmail.com"},{"name":"rubennorte","email":"rubennorte@gmail.com"},{"name":"simenb","email":"sbekkhus91@gmail.com"},{"name":"fb","email":"opensource+npm@fb.com"},{"name":"aaronabramov","email":"aaron@abramov.io"},{"name":"davidzilburg","email":"davidzilburg@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pretty-format_29.0.0-alpha.1_1659601408591_0.6820707347770099"},"_hasShrinkwrap":false},"29.0.0-alpha.3":{"name":"pretty-format","version":"29.0.0-alpha.3","repository":{"type":"git","url":"git+https://github.com/facebook/jest.git","directory":"packages/pretty-format"},"license":"MIT","description":"Stringify any JavaScript value.","main":"./build/index.js","types":"./build/index.d.ts","exports":{".":{"types":"./build/index.d.ts","default":"./build/index.js"},"./package.json":"./package.json"},"author":{"name":"James Kyle","email":"me@thejameskyle.com"},"dependencies":{"@jest/schemas":"^29.0.0-alpha.3","ansi-styles":"^5.0.0","react-is":"^18.0.0"},"devDependencies":{"@types/react":"^17.0.3","@types/react-is":"^17.0.0","@types/react-test-renderer":"17.0.2","expect":"^29.0.0-alpha.3","immutable":"^4.0.0","jest-util":"^29.0.0-alpha.3","react":"17.0.2","react-dom":"^17.0.1","react-test-renderer":"17.0.2"},"engines":{"node":"^14.15.0 || ^16.10.0 || >=18.0.0"},"publishConfig":{"access":"public"},"gitHead":"09981873c55442e5e494d42012f518b7d3d41fbd","readme":"# pretty-format\n\nStringify any JavaScript value.\n\n- Serialize built-in JavaScript types.\n- Serialize application-specific data types with built-in or user-defined plugins.\n\n## Installation\n\n```sh\n$ yarn add pretty-format\n```\n\n## Usage\n\n```js\nconst {format: prettyFormat} = require('pretty-format'); // CommonJS\n```\n\n```js\nimport {format as prettyFormat} from 'pretty-format'; // ES2015 modules\n```\n\n```js\nconst val = {object: {}};\nval.circularReference = val;\nval[Symbol('foo')] = 'foo';\nval.map = new Map([['prop', 'value']]);\nval.array = [-0, Infinity, NaN];\n\nconsole.log(prettyFormat(val));\n/*\nObject {\n \"array\": Array [\n -0,\n Infinity,\n NaN,\n ],\n \"circularReference\": [Circular],\n \"map\": Map {\n \"prop\" => \"value\",\n },\n \"object\": Object {},\n Symbol(foo): \"foo\",\n}\n*/\n```\n\n## Usage with options\n\n```js\nfunction onClick() {}\n\nconsole.log(prettyFormat(onClick));\n/*\n[Function onClick]\n*/\n\nconst options = {\n printFunctionName: false,\n};\nconsole.log(prettyFormat(onClick, options));\n/*\n[Function]\n*/\n```\n\n\n| key | type | default | description |\n| :-------------------- | :-------- | :--------- | :------------------------------------------------------ |\n| `callToJSON` | `boolean` | `true` | call `toJSON` method (if it exists) on objects |\n| `compareKeys` | `function`| `undefined`| compare function used when sorting object keys |\n| `escapeRegex` | `boolean` | `false` | escape special characters in regular expressions |\n| `escapeString` | `boolean` | `true` | escape special characters in strings |\n| `highlight` | `boolean` | `false` | highlight syntax with colors in terminal (some plugins) |\n| `indent` | `number` | `2` | spaces in each level of indentation |\n| `maxDepth` | `number` | `Infinity` | levels to print in arrays, objects, elements, and so on |\n| `maxWidth` | `number` | `Infinity` | number of elements to print in arrays, sets, and so on |\n| `min` | `boolean` | `false` | minimize added space: no indentation nor line breaks |\n| `plugins` | `array` | `[]` | plugins to serialize application-specific data types |\n| `printBasicPrototype` | `boolean` | `false` | print the prototype for plain objects and arrays |\n| `printFunctionName` | `boolean` | `true` | include or omit the name of a function |\n| `theme` | `object` | | colors to highlight syntax in terminal |\n\nProperty values of `theme` are from [ansi-styles colors](https://github.com/chalk/ansi-styles#colors)\n\n```js\nconst DEFAULT_THEME = {\n comment: 'gray',\n content: 'reset',\n prop: 'yellow',\n tag: 'cyan',\n value: 'green',\n};\n```\n\n## Usage with plugins\n\nThe `pretty-format` package provides some built-in plugins, including:\n\n- `ReactElement` for elements from `react`\n- `ReactTestComponent` for test objects from `react-test-renderer`\n\n```js\n// CommonJS\nconst React = require('react');\nconst renderer = require('react-test-renderer');\nconst {format: prettyFormat, plugins} = require('pretty-format');\n\nconst {ReactElement, ReactTestComponent} = plugins;\n```\n\n```js\n// ES2015 modules and destructuring assignment\nimport React from 'react';\nimport renderer from 'react-test-renderer';\nimport {plugins, format as prettyFormat} from 'pretty-format';\n\nconst {ReactElement, ReactTestComponent} = plugins;\n```\n\n```js\nconst onClick = () => {};\nconst element = React.createElement('button', {onClick}, 'Hello World');\n\nconst formatted1 = prettyFormat(element, {\n plugins: [ReactElement],\n printFunctionName: false,\n});\nconst formatted2 = prettyFormat(renderer.create(element).toJSON(), {\n plugins: [ReactTestComponent],\n printFunctionName: false,\n});\n/*\n\n*/\n```\n\n## Usage in Jest\n\nFor snapshot tests, Jest uses `pretty-format` with options that include some of its built-in plugins. For this purpose, plugins are also known as **snapshot serializers**.\n\nTo serialize application-specific data types, you can add modules to `devDependencies` of a project, and then:\n\nIn an **individual** test file, you can add a module as follows. It precedes any modules from Jest configuration.\n\n```js\nimport serializer from 'my-serializer-module';\nexpect.addSnapshotSerializer(serializer);\n\n// tests which have `expect(value).toMatchSnapshot()` assertions\n```\n\nFor **all** test files, you can specify modules in Jest configuration. They precede built-in plugins for React, HTML, and Immutable.js data types. For example, in a `package.json` file:\n\n```json\n{\n \"jest\": {\n \"snapshotSerializers\": [\"my-serializer-module\"]\n }\n}\n```\n\n## Writing plugins\n\nA plugin is a JavaScript object.\n\nIf `options` has a `plugins` array: for the first plugin whose `test(val)` method returns a truthy value, then `prettyFormat(val, options)` returns the result from either:\n\n- `serialize(val, …)` method of the **improved** interface (available in **version 21** or later)\n- `print(val, …)` method of the **original** interface (if plugin does not have `serialize` method)\n\n### test\n\nWrite `test` so it can receive `val` argument of any type. To serialize **objects** which have certain properties, then a guarded expression like `val != null && …` or more concise `val && …` prevents the following errors:\n\n- `TypeError: Cannot read property 'whatever' of null`\n- `TypeError: Cannot read property 'whatever' of undefined`\n\nFor example, `test` method of built-in `ReactElement` plugin:\n\n```js\nconst elementSymbol = Symbol.for('react.element');\nconst test = val => val && val.$$typeof === elementSymbol;\n```\n\nPay attention to efficiency in `test` because `pretty-format` calls it often.\n\n### serialize\n\nThe **improved** interface is available in **version 21** or later.\n\nWrite `serialize` to return a string, given the arguments:\n\n- `val` which “passed the test”\n- unchanging `config` object: derived from `options`\n- current `indentation` string: concatenate to `indent` from `config`\n- current `depth` number: compare to `maxDepth` from `config`\n- current `refs` array: find circular references in objects\n- `printer` callback function: serialize children\n\n### config\n\n\n| key | type | description |\n| :------------------ | :-------- | :------------------------------------------------------ |\n| `callToJSON` | `boolean` | call `toJSON` method (if it exists) on objects |\n| `compareKeys` | `function`| compare function used when sorting object keys |\n| `colors` | `Object` | escape codes for colors to highlight syntax |\n| `escapeRegex` | `boolean` | escape special characters in regular expressions |\n| `escapeString` | `boolean` | escape special characters in strings |\n| `indent` | `string` | spaces in each level of indentation |\n| `maxDepth` | `number` | levels to print in arrays, objects, elements, and so on |\n| `min` | `boolean` | minimize added space: no indentation nor line breaks |\n| `plugins` | `array` | plugins to serialize application-specific data types |\n| `printFunctionName` | `boolean` | include or omit the name of a function |\n| `spacingInner` | `string` | spacing to separate items in a list |\n| `spacingOuter` | `string` | spacing to enclose a list of items |\n\nEach property of `colors` in `config` corresponds to a property of `theme` in `options`:\n\n- the key is the same (for example, `tag`)\n- the value in `colors` is a object with `open` and `close` properties whose values are escape codes from [ansi-styles](https://github.com/chalk/ansi-styles) for the color value in `theme` (for example, `'cyan'`)\n\nSome properties in `config` are derived from `min` in `options`:\n\n- `spacingInner` and `spacingOuter` are **newline** if `min` is `false`\n- `spacingInner` is **space** and `spacingOuter` is **empty string** if `min` is `true`\n\n### Example of serialize and test\n\nThis plugin is a pattern you can apply to serialize composite data types. Side note: `pretty-format` does not need a plugin to serialize arrays.\n\n```js\n// We reused more code when we factored out a function for child items\n// that is independent of depth, name, and enclosing punctuation (see below).\nconst SEPARATOR = ',';\nfunction serializeItems(items, config, indentation, depth, refs, printer) {\n if (items.length === 0) {\n return '';\n }\n const indentationItems = indentation + config.indent;\n return (\n config.spacingOuter +\n items\n .map(\n item =>\n indentationItems +\n printer(item, config, indentationItems, depth, refs), // callback\n )\n .join(SEPARATOR + config.spacingInner) +\n (config.min ? '' : SEPARATOR) + // following the last item\n config.spacingOuter +\n indentation\n );\n}\n\nconst plugin = {\n test(val) {\n return Array.isArray(val);\n },\n serialize(array, config, indentation, depth, refs, printer) {\n const name = array.constructor.name;\n return ++depth > config.maxDepth\n ? `[${name}]`\n : `${config.min ? '' : `${name} `}[${serializeItems(\n array,\n config,\n indentation,\n depth,\n refs,\n printer,\n )}]`;\n },\n};\n```\n\n```js\nconst val = {\n filter: 'completed',\n items: [\n {\n text: 'Write test',\n completed: true,\n },\n {\n text: 'Write serialize',\n completed: true,\n },\n ],\n};\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n plugins: [plugin],\n }),\n);\n/*\nObject {\n \"filter\": \"completed\",\n \"items\": Array [\n Object {\n \"completed\": true,\n \"text\": \"Write test\",\n },\n Object {\n \"completed\": true,\n \"text\": \"Write serialize\",\n },\n ],\n}\n*/\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n indent: 4,\n plugins: [plugin],\n }),\n);\n/*\nObject {\n \"filter\": \"completed\",\n \"items\": Array [\n Object {\n \"completed\": true,\n \"text\": \"Write test\",\n },\n Object {\n \"completed\": true,\n \"text\": \"Write serialize\",\n },\n ],\n}\n*/\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n maxDepth: 1,\n plugins: [plugin],\n }),\n);\n/*\nObject {\n \"filter\": \"completed\",\n \"items\": [Array],\n}\n*/\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n min: true,\n plugins: [plugin],\n }),\n);\n/*\n{\"filter\": \"completed\", \"items\": [{\"completed\": true, \"text\": \"Write test\"}, {\"completed\": true, \"text\": \"Write serialize\"}]}\n*/\n```\n\n### print\n\nThe **original** interface is adequate for plugins:\n\n- that **do not** depend on options other than `highlight` or `min`\n- that **do not** depend on `depth` or `refs` in recursive traversal, and\n- if values either\n - do **not** require indentation, or\n - do **not** occur as children of JavaScript data structures (for example, array)\n\nWrite `print` to return a string, given the arguments:\n\n- `val` which “passed the test”\n- current `printer(valChild)` callback function: serialize children\n- current `indenter(lines)` callback function: indent lines at the next level\n- unchanging `config` object: derived from `options`\n- unchanging `colors` object: derived from `options`\n\nThe 3 properties of `config` are `min` in `options` and:\n\n- `spacing` and `edgeSpacing` are **newline** if `min` is `false`\n- `spacing` is **space** and `edgeSpacing` is **empty string** if `min` is `true`\n\nEach property of `colors` corresponds to a property of `theme` in `options`:\n\n- the key is the same (for example, `tag`)\n- the value in `colors` is a object with `open` and `close` properties whose values are escape codes from [ansi-styles](https://github.com/chalk/ansi-styles) for the color value in `theme` (for example, `'cyan'`)\n\n### Example of print and test\n\nThis plugin prints functions with the **number of named arguments** excluding rest argument.\n\n```js\nconst plugin = {\n print(val) {\n return `[Function ${val.name || 'anonymous'} ${val.length}]`;\n },\n test(val) {\n return typeof val === 'function';\n },\n};\n```\n\n```js\nconst val = {\n onClick(event) {},\n render() {},\n};\n\nprettyFormat(val, {\n plugins: [plugin],\n});\n/*\nObject {\n \"onClick\": [Function onClick 1],\n \"render\": [Function render 0],\n}\n*/\n\nprettyFormat(val);\n/*\nObject {\n \"onClick\": [Function onClick],\n \"render\": [Function render],\n}\n*/\n```\n\nThis plugin **ignores** the `printFunctionName` option. That limitation of the original `print` interface is a reason to use the improved `serialize` interface, described above.\n\n```js\nprettyFormat(val, {\n plugins: [pluginOld],\n printFunctionName: false,\n});\n/*\nObject {\n \"onClick\": [Function onClick 1],\n \"render\": [Function render 0],\n}\n*/\n\nprettyFormat(val, {\n printFunctionName: false,\n});\n/*\nObject {\n \"onClick\": [Function],\n \"render\": [Function],\n}\n*/\n```\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/facebook/jest/issues"},"homepage":"https://github.com/facebook/jest#readme","_id":"pretty-format@29.0.0-alpha.3","_nodeVersion":"16.15.1","_npmVersion":"lerna/1.10.0/node@v16.15.1+x64 (darwin)","dist":{"integrity":"sha512-Sbr8fLVdpbjQF37YqOiyn0XdpLKkPe3PiMfxAxKRXhiAQUV33IhvnyWrRwdt3VYVguu0UHcloDRaE3C70LJM5w==","shasum":"d09e7d8738f4503f5454d4ac7649cca8717ae7c3","tarball":"http://localhost:4545/npm/registry/pretty-format/pretty-format-29.0.0-alpha.3.tgz","fileCount":15,"unpackedSize":58727,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCpDn7ftSNY21obI7FhViZMIMRQeQ1RweOgFkVj9zg1SgIgSXmrehrB93XRVcbfpx/nFoAcbsycaVVItglvOc/CcKc="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJi78EQACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmrcmQ/7BRgZUnGTKwsqQhJlGuxPYt1F/Mv7EbELq1rrcr9bnf0Yb/v7\r\n3zVkDhENDiVoOCJ1yj/1XluMG2g6ci/HORyGUK+JpbeUeFxLG5gSuSo+eGRS\r\nAAnHi8lDIGnbDstM6w3yMg9nPFbK1BOJ7455B6MjOKBC+mk5NlRWyXfotp+a\r\njsA8fsQdWcgyT0VzoBmZNbSNtKV9EDQEeXFUmj5S7Klak499J2w7iwz+xQKI\r\nSm0a3cRi2t7npEmJ00WEzc89cfF5qVGhuwu/DqQjDC5cecBUB0bvd9PKhgEg\r\nERqgrpZr9zk13Lb6m4QuuDgBNKIqFyw6Ks+0URVfVBYo28r2QcEi5heKso1G\r\nEJsHBn8/+tVD97Wdzm4srPOoDP8opGaM8RPRUAA/yKHnTE0DRNrN4RPRQ6fP\r\nuecfcL2Qg6Cum8E9c4wErcN8xuaHHjwcH94KCidLkPMVzxKSQUw6X4bb9xhb\r\n+7JhFKvXr3j2tY6dxZsKuLiaNsPrDv5jTU2luezbQ6G7ZSGaesMs+RPHWLj7\r\nQZI3PHDQ/RozDZF8/3QjfWUVlJ13KWdjp6C+7zj+Kxsr4ubhsqt9GFWOaP2/\r\nTDRaoVIun6uPrSZR4VQwcKzCRDkzEflDVq4tNORUFQxryLz5CyPmlQez6kVI\r\nLDbl4/4JgZnc3LxOEq9Tz6fuBTTC5F70hU8=\r\n=ggwb\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"simenb","email":"sbekkhus91@gmail.com"},"directories":{},"maintainers":[{"name":"scotthovestadt","email":"scott.hovestadt@gmail.com"},{"name":"rubennorte","email":"rubennorte@gmail.com"},{"name":"simenb","email":"sbekkhus91@gmail.com"},{"name":"fb","email":"opensource+npm@fb.com"},{"name":"aaronabramov","email":"aaron@abramov.io"},{"name":"davidzilburg","email":"davidzilburg@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pretty-format_29.0.0-alpha.3_1659879696286_0.7638393311736449"},"_hasShrinkwrap":false},"29.0.0-alpha.4":{"name":"pretty-format","version":"29.0.0-alpha.4","repository":{"type":"git","url":"git+https://github.com/facebook/jest.git","directory":"packages/pretty-format"},"license":"MIT","description":"Stringify any JavaScript value.","main":"./build/index.js","types":"./build/index.d.ts","exports":{".":{"types":"./build/index.d.ts","default":"./build/index.js"},"./package.json":"./package.json"},"author":{"name":"James Kyle","email":"me@thejameskyle.com"},"dependencies":{"@jest/schemas":"^29.0.0-alpha.3","ansi-styles":"^5.0.0","react-is":"^18.0.0"},"devDependencies":{"@types/react":"^17.0.3","@types/react-is":"^17.0.0","@types/react-test-renderer":"17.0.2","expect":"^29.0.0-alpha.4","immutable":"^4.0.0","jest-util":"^29.0.0-alpha.4","react":"17.0.2","react-dom":"^17.0.1","react-test-renderer":"17.0.2"},"engines":{"node":"^14.15.0 || ^16.10.0 || >=18.0.0"},"publishConfig":{"access":"public"},"gitHead":"98a833bd4bc0bdcfcee5d4f04c2833400c4e2933","readme":"# pretty-format\n\nStringify any JavaScript value.\n\n- Serialize built-in JavaScript types.\n- Serialize application-specific data types with built-in or user-defined plugins.\n\n## Installation\n\n```sh\n$ yarn add pretty-format\n```\n\n## Usage\n\n```js\nconst {format: prettyFormat} = require('pretty-format'); // CommonJS\n```\n\n```js\nimport {format as prettyFormat} from 'pretty-format'; // ES2015 modules\n```\n\n```js\nconst val = {object: {}};\nval.circularReference = val;\nval[Symbol('foo')] = 'foo';\nval.map = new Map([['prop', 'value']]);\nval.array = [-0, Infinity, NaN];\n\nconsole.log(prettyFormat(val));\n/*\nObject {\n \"array\": Array [\n -0,\n Infinity,\n NaN,\n ],\n \"circularReference\": [Circular],\n \"map\": Map {\n \"prop\" => \"value\",\n },\n \"object\": Object {},\n Symbol(foo): \"foo\",\n}\n*/\n```\n\n## Usage with options\n\n```js\nfunction onClick() {}\n\nconsole.log(prettyFormat(onClick));\n/*\n[Function onClick]\n*/\n\nconst options = {\n printFunctionName: false,\n};\nconsole.log(prettyFormat(onClick, options));\n/*\n[Function]\n*/\n```\n\n\n| key | type | default | description |\n| :-------------------- | :-------- | :--------- | :------------------------------------------------------ |\n| `callToJSON` | `boolean` | `true` | call `toJSON` method (if it exists) on objects |\n| `compareKeys` | `function`| `undefined`| compare function used when sorting object keys |\n| `escapeRegex` | `boolean` | `false` | escape special characters in regular expressions |\n| `escapeString` | `boolean` | `true` | escape special characters in strings |\n| `highlight` | `boolean` | `false` | highlight syntax with colors in terminal (some plugins) |\n| `indent` | `number` | `2` | spaces in each level of indentation |\n| `maxDepth` | `number` | `Infinity` | levels to print in arrays, objects, elements, and so on |\n| `maxWidth` | `number` | `Infinity` | number of elements to print in arrays, sets, and so on |\n| `min` | `boolean` | `false` | minimize added space: no indentation nor line breaks |\n| `plugins` | `array` | `[]` | plugins to serialize application-specific data types |\n| `printBasicPrototype` | `boolean` | `false` | print the prototype for plain objects and arrays |\n| `printFunctionName` | `boolean` | `true` | include or omit the name of a function |\n| `theme` | `object` | | colors to highlight syntax in terminal |\n\nProperty values of `theme` are from [ansi-styles colors](https://github.com/chalk/ansi-styles#colors)\n\n```js\nconst DEFAULT_THEME = {\n comment: 'gray',\n content: 'reset',\n prop: 'yellow',\n tag: 'cyan',\n value: 'green',\n};\n```\n\n## Usage with plugins\n\nThe `pretty-format` package provides some built-in plugins, including:\n\n- `ReactElement` for elements from `react`\n- `ReactTestComponent` for test objects from `react-test-renderer`\n\n```js\n// CommonJS\nconst React = require('react');\nconst renderer = require('react-test-renderer');\nconst {format: prettyFormat, plugins} = require('pretty-format');\n\nconst {ReactElement, ReactTestComponent} = plugins;\n```\n\n```js\n// ES2015 modules and destructuring assignment\nimport React from 'react';\nimport renderer from 'react-test-renderer';\nimport {plugins, format as prettyFormat} from 'pretty-format';\n\nconst {ReactElement, ReactTestComponent} = plugins;\n```\n\n```js\nconst onClick = () => {};\nconst element = React.createElement('button', {onClick}, 'Hello World');\n\nconst formatted1 = prettyFormat(element, {\n plugins: [ReactElement],\n printFunctionName: false,\n});\nconst formatted2 = prettyFormat(renderer.create(element).toJSON(), {\n plugins: [ReactTestComponent],\n printFunctionName: false,\n});\n/*\n\n*/\n```\n\n## Usage in Jest\n\nFor snapshot tests, Jest uses `pretty-format` with options that include some of its built-in plugins. For this purpose, plugins are also known as **snapshot serializers**.\n\nTo serialize application-specific data types, you can add modules to `devDependencies` of a project, and then:\n\nIn an **individual** test file, you can add a module as follows. It precedes any modules from Jest configuration.\n\n```js\nimport serializer from 'my-serializer-module';\nexpect.addSnapshotSerializer(serializer);\n\n// tests which have `expect(value).toMatchSnapshot()` assertions\n```\n\nFor **all** test files, you can specify modules in Jest configuration. They precede built-in plugins for React, HTML, and Immutable.js data types. For example, in a `package.json` file:\n\n```json\n{\n \"jest\": {\n \"snapshotSerializers\": [\"my-serializer-module\"]\n }\n}\n```\n\n## Writing plugins\n\nA plugin is a JavaScript object.\n\nIf `options` has a `plugins` array: for the first plugin whose `test(val)` method returns a truthy value, then `prettyFormat(val, options)` returns the result from either:\n\n- `serialize(val, …)` method of the **improved** interface (available in **version 21** or later)\n- `print(val, …)` method of the **original** interface (if plugin does not have `serialize` method)\n\n### test\n\nWrite `test` so it can receive `val` argument of any type. To serialize **objects** which have certain properties, then a guarded expression like `val != null && …` or more concise `val && …` prevents the following errors:\n\n- `TypeError: Cannot read property 'whatever' of null`\n- `TypeError: Cannot read property 'whatever' of undefined`\n\nFor example, `test` method of built-in `ReactElement` plugin:\n\n```js\nconst elementSymbol = Symbol.for('react.element');\nconst test = val => val && val.$$typeof === elementSymbol;\n```\n\nPay attention to efficiency in `test` because `pretty-format` calls it often.\n\n### serialize\n\nThe **improved** interface is available in **version 21** or later.\n\nWrite `serialize` to return a string, given the arguments:\n\n- `val` which “passed the test”\n- unchanging `config` object: derived from `options`\n- current `indentation` string: concatenate to `indent` from `config`\n- current `depth` number: compare to `maxDepth` from `config`\n- current `refs` array: find circular references in objects\n- `printer` callback function: serialize children\n\n### config\n\n\n| key | type | description |\n| :------------------ | :-------- | :------------------------------------------------------ |\n| `callToJSON` | `boolean` | call `toJSON` method (if it exists) on objects |\n| `compareKeys` | `function`| compare function used when sorting object keys |\n| `colors` | `Object` | escape codes for colors to highlight syntax |\n| `escapeRegex` | `boolean` | escape special characters in regular expressions |\n| `escapeString` | `boolean` | escape special characters in strings |\n| `indent` | `string` | spaces in each level of indentation |\n| `maxDepth` | `number` | levels to print in arrays, objects, elements, and so on |\n| `min` | `boolean` | minimize added space: no indentation nor line breaks |\n| `plugins` | `array` | plugins to serialize application-specific data types |\n| `printFunctionName` | `boolean` | include or omit the name of a function |\n| `spacingInner` | `string` | spacing to separate items in a list |\n| `spacingOuter` | `string` | spacing to enclose a list of items |\n\nEach property of `colors` in `config` corresponds to a property of `theme` in `options`:\n\n- the key is the same (for example, `tag`)\n- the value in `colors` is a object with `open` and `close` properties whose values are escape codes from [ansi-styles](https://github.com/chalk/ansi-styles) for the color value in `theme` (for example, `'cyan'`)\n\nSome properties in `config` are derived from `min` in `options`:\n\n- `spacingInner` and `spacingOuter` are **newline** if `min` is `false`\n- `spacingInner` is **space** and `spacingOuter` is **empty string** if `min` is `true`\n\n### Example of serialize and test\n\nThis plugin is a pattern you can apply to serialize composite data types. Side note: `pretty-format` does not need a plugin to serialize arrays.\n\n```js\n// We reused more code when we factored out a function for child items\n// that is independent of depth, name, and enclosing punctuation (see below).\nconst SEPARATOR = ',';\nfunction serializeItems(items, config, indentation, depth, refs, printer) {\n if (items.length === 0) {\n return '';\n }\n const indentationItems = indentation + config.indent;\n return (\n config.spacingOuter +\n items\n .map(\n item =>\n indentationItems +\n printer(item, config, indentationItems, depth, refs), // callback\n )\n .join(SEPARATOR + config.spacingInner) +\n (config.min ? '' : SEPARATOR) + // following the last item\n config.spacingOuter +\n indentation\n );\n}\n\nconst plugin = {\n test(val) {\n return Array.isArray(val);\n },\n serialize(array, config, indentation, depth, refs, printer) {\n const name = array.constructor.name;\n return ++depth > config.maxDepth\n ? `[${name}]`\n : `${config.min ? '' : `${name} `}[${serializeItems(\n array,\n config,\n indentation,\n depth,\n refs,\n printer,\n )}]`;\n },\n};\n```\n\n```js\nconst val = {\n filter: 'completed',\n items: [\n {\n text: 'Write test',\n completed: true,\n },\n {\n text: 'Write serialize',\n completed: true,\n },\n ],\n};\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n plugins: [plugin],\n }),\n);\n/*\nObject {\n \"filter\": \"completed\",\n \"items\": Array [\n Object {\n \"completed\": true,\n \"text\": \"Write test\",\n },\n Object {\n \"completed\": true,\n \"text\": \"Write serialize\",\n },\n ],\n}\n*/\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n indent: 4,\n plugins: [plugin],\n }),\n);\n/*\nObject {\n \"filter\": \"completed\",\n \"items\": Array [\n Object {\n \"completed\": true,\n \"text\": \"Write test\",\n },\n Object {\n \"completed\": true,\n \"text\": \"Write serialize\",\n },\n ],\n}\n*/\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n maxDepth: 1,\n plugins: [plugin],\n }),\n);\n/*\nObject {\n \"filter\": \"completed\",\n \"items\": [Array],\n}\n*/\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n min: true,\n plugins: [plugin],\n }),\n);\n/*\n{\"filter\": \"completed\", \"items\": [{\"completed\": true, \"text\": \"Write test\"}, {\"completed\": true, \"text\": \"Write serialize\"}]}\n*/\n```\n\n### print\n\nThe **original** interface is adequate for plugins:\n\n- that **do not** depend on options other than `highlight` or `min`\n- that **do not** depend on `depth` or `refs` in recursive traversal, and\n- if values either\n - do **not** require indentation, or\n - do **not** occur as children of JavaScript data structures (for example, array)\n\nWrite `print` to return a string, given the arguments:\n\n- `val` which “passed the test”\n- current `printer(valChild)` callback function: serialize children\n- current `indenter(lines)` callback function: indent lines at the next level\n- unchanging `config` object: derived from `options`\n- unchanging `colors` object: derived from `options`\n\nThe 3 properties of `config` are `min` in `options` and:\n\n- `spacing` and `edgeSpacing` are **newline** if `min` is `false`\n- `spacing` is **space** and `edgeSpacing` is **empty string** if `min` is `true`\n\nEach property of `colors` corresponds to a property of `theme` in `options`:\n\n- the key is the same (for example, `tag`)\n- the value in `colors` is a object with `open` and `close` properties whose values are escape codes from [ansi-styles](https://github.com/chalk/ansi-styles) for the color value in `theme` (for example, `'cyan'`)\n\n### Example of print and test\n\nThis plugin prints functions with the **number of named arguments** excluding rest argument.\n\n```js\nconst plugin = {\n print(val) {\n return `[Function ${val.name || 'anonymous'} ${val.length}]`;\n },\n test(val) {\n return typeof val === 'function';\n },\n};\n```\n\n```js\nconst val = {\n onClick(event) {},\n render() {},\n};\n\nprettyFormat(val, {\n plugins: [plugin],\n});\n/*\nObject {\n \"onClick\": [Function onClick 1],\n \"render\": [Function render 0],\n}\n*/\n\nprettyFormat(val);\n/*\nObject {\n \"onClick\": [Function onClick],\n \"render\": [Function render],\n}\n*/\n```\n\nThis plugin **ignores** the `printFunctionName` option. That limitation of the original `print` interface is a reason to use the improved `serialize` interface, described above.\n\n```js\nprettyFormat(val, {\n plugins: [pluginOld],\n printFunctionName: false,\n});\n/*\nObject {\n \"onClick\": [Function onClick 1],\n \"render\": [Function render 0],\n}\n*/\n\nprettyFormat(val, {\n printFunctionName: false,\n});\n/*\nObject {\n \"onClick\": [Function],\n \"render\": [Function],\n}\n*/\n```\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/facebook/jest/issues"},"homepage":"https://github.com/facebook/jest#readme","_id":"pretty-format@29.0.0-alpha.4","_nodeVersion":"16.15.1","_npmVersion":"lerna/1.10.0/node@v16.15.1+x64 (darwin)","dist":{"integrity":"sha512-9EWTLT9Wsid/x4EX6En0YEbK4pbqpfPs60X44V7a61EePm2WXfJcoRmFfBQsgqSYRQMeiSV/T3dB0Jv0F1aZ1g==","shasum":"a185eeef2831a3986459b4b23fdc5ecacb844a87","tarball":"http://localhost:4545/npm/registry/pretty-format/pretty-format-29.0.0-alpha.4.tgz","fileCount":15,"unpackedSize":58727,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBzDOrnq16rgaSM0ClaJ29HsEYkm25X5Edmyao0bTfdwAiEAyEd8wVNriZeHj8L4QEiKAc2F8F0Ow467D8sckTNdOUk="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJi8QoeACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmpBgA/+PwtgDgo3CBPVsJ5ppCJ84RmzjZJAjRVfQBsp2/ez2CAGjEzo\r\nMqWNL4VCJJAXEmm2qS+B4KE9xOZnsIuXM6fPqqYsaeUzr7VptNJA4iZVp2B0\r\ntv/YELCXPVuPBJpHT9to8r3w59stdF9J/ZFo2KavssXkHjeviPAeWZSqLHuI\r\n31QuKKV0pu9cnG6agGMtrSqOakK/C89bZW6cGGuFSouTmpm0ITictnHmZ00N\r\nXVSdlARK6yOvtGDlojcyulaCP3O2uY1+SVRLDZq2Zsr1ueYjAA9HUPzYfDLv\r\n5ljkjhhLpGVWZGd3Ohdyjd/QENdet9tJVpeMu3EzKtpVKQIKFmhHliIHOMUe\r\n5J5BOjQyQfQvQFGBdh9KcA/jH9T+ueLLS3RkDpiYb3+Dqeen23cz10d/nDkf\r\n5sZOmDQFEQ6rfdgKxc+G/hzZdJXeZfJK5uNGf5AUUdTdRkgbvh6AHFJybPJ7\r\nCMqk7mpINyvJlzqzyxTBXO9jijJDSkGA4+DH13cfld8hg9EXdFptZq33oe7J\r\nOmaIHgIBlXKes3+DgfiRiNmQ/7FwLCQy1gb4TBnQSl8SMCJta4DwjfSomYvb\r\ncvAuF6XhmihMajbgQucPCf+VSUzyZzHByZYywoOY0h6jeE96wGoV+0/yT5uR\r\nmi70Ak6Q4Usy4JDUPILdDtdqENVJa5n/IPc=\r\n=Gd95\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"simenb","email":"sbekkhus91@gmail.com"},"directories":{},"maintainers":[{"name":"scotthovestadt","email":"scott.hovestadt@gmail.com"},{"name":"rubennorte","email":"rubennorte@gmail.com"},{"name":"simenb","email":"sbekkhus91@gmail.com"},{"name":"fb","email":"opensource+npm@fb.com"},{"name":"aaronabramov","email":"aaron@abramov.io"},{"name":"davidzilburg","email":"davidzilburg@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pretty-format_29.0.0-alpha.4_1659963934800_0.646159528420519"},"_hasShrinkwrap":false},"29.0.0-alpha.6":{"name":"pretty-format","version":"29.0.0-alpha.6","repository":{"type":"git","url":"git+https://github.com/facebook/jest.git","directory":"packages/pretty-format"},"license":"MIT","description":"Stringify any JavaScript value.","main":"./build/index.js","types":"./build/index.d.ts","exports":{".":{"types":"./build/index.d.ts","default":"./build/index.js"},"./package.json":"./package.json"},"author":{"name":"James Kyle","email":"me@thejameskyle.com"},"dependencies":{"@jest/schemas":"^29.0.0-alpha.3","ansi-styles":"^5.0.0","react-is":"^18.0.0"},"devDependencies":{"@types/react":"^17.0.3","@types/react-is":"^17.0.0","@types/react-test-renderer":"17.0.2","expect":"^29.0.0-alpha.6","immutable":"^4.0.0","jest-util":"^29.0.0-alpha.6","react":"17.0.2","react-dom":"^17.0.1","react-test-renderer":"17.0.2"},"engines":{"node":"^14.15.0 || ^16.10.0 || >=18.0.0"},"publishConfig":{"access":"public"},"gitHead":"4def94b073cad300e99de378ba900e6ba9b7032f","readme":"# pretty-format\n\nStringify any JavaScript value.\n\n- Serialize built-in JavaScript types.\n- Serialize application-specific data types with built-in or user-defined plugins.\n\n## Installation\n\n```sh\n$ yarn add pretty-format\n```\n\n## Usage\n\n```js\nconst {format: prettyFormat} = require('pretty-format'); // CommonJS\n```\n\n```js\nimport {format as prettyFormat} from 'pretty-format'; // ES2015 modules\n```\n\n```js\nconst val = {object: {}};\nval.circularReference = val;\nval[Symbol('foo')] = 'foo';\nval.map = new Map([['prop', 'value']]);\nval.array = [-0, Infinity, NaN];\n\nconsole.log(prettyFormat(val));\n/*\nObject {\n \"array\": Array [\n -0,\n Infinity,\n NaN,\n ],\n \"circularReference\": [Circular],\n \"map\": Map {\n \"prop\" => \"value\",\n },\n \"object\": Object {},\n Symbol(foo): \"foo\",\n}\n*/\n```\n\n## Usage with options\n\n```js\nfunction onClick() {}\n\nconsole.log(prettyFormat(onClick));\n/*\n[Function onClick]\n*/\n\nconst options = {\n printFunctionName: false,\n};\nconsole.log(prettyFormat(onClick, options));\n/*\n[Function]\n*/\n```\n\n\n| key | type | default | description |\n| :-------------------- | :-------- | :--------- | :------------------------------------------------------ |\n| `callToJSON` | `boolean` | `true` | call `toJSON` method (if it exists) on objects |\n| `compareKeys` | `function`| `undefined`| compare function used when sorting object keys |\n| `escapeRegex` | `boolean` | `false` | escape special characters in regular expressions |\n| `escapeString` | `boolean` | `true` | escape special characters in strings |\n| `highlight` | `boolean` | `false` | highlight syntax with colors in terminal (some plugins) |\n| `indent` | `number` | `2` | spaces in each level of indentation |\n| `maxDepth` | `number` | `Infinity` | levels to print in arrays, objects, elements, and so on |\n| `maxWidth` | `number` | `Infinity` | number of elements to print in arrays, sets, and so on |\n| `min` | `boolean` | `false` | minimize added space: no indentation nor line breaks |\n| `plugins` | `array` | `[]` | plugins to serialize application-specific data types |\n| `printBasicPrototype` | `boolean` | `false` | print the prototype for plain objects and arrays |\n| `printFunctionName` | `boolean` | `true` | include or omit the name of a function |\n| `theme` | `object` | | colors to highlight syntax in terminal |\n\nProperty values of `theme` are from [ansi-styles colors](https://github.com/chalk/ansi-styles#colors)\n\n```js\nconst DEFAULT_THEME = {\n comment: 'gray',\n content: 'reset',\n prop: 'yellow',\n tag: 'cyan',\n value: 'green',\n};\n```\n\n## Usage with plugins\n\nThe `pretty-format` package provides some built-in plugins, including:\n\n- `ReactElement` for elements from `react`\n- `ReactTestComponent` for test objects from `react-test-renderer`\n\n```js\n// CommonJS\nconst React = require('react');\nconst renderer = require('react-test-renderer');\nconst {format: prettyFormat, plugins} = require('pretty-format');\n\nconst {ReactElement, ReactTestComponent} = plugins;\n```\n\n```js\n// ES2015 modules and destructuring assignment\nimport React from 'react';\nimport renderer from 'react-test-renderer';\nimport {plugins, format as prettyFormat} from 'pretty-format';\n\nconst {ReactElement, ReactTestComponent} = plugins;\n```\n\n```js\nconst onClick = () => {};\nconst element = React.createElement('button', {onClick}, 'Hello World');\n\nconst formatted1 = prettyFormat(element, {\n plugins: [ReactElement],\n printFunctionName: false,\n});\nconst formatted2 = prettyFormat(renderer.create(element).toJSON(), {\n plugins: [ReactTestComponent],\n printFunctionName: false,\n});\n/*\n\n*/\n```\n\n## Usage in Jest\n\nFor snapshot tests, Jest uses `pretty-format` with options that include some of its built-in plugins. For this purpose, plugins are also known as **snapshot serializers**.\n\nTo serialize application-specific data types, you can add modules to `devDependencies` of a project, and then:\n\nIn an **individual** test file, you can add a module as follows. It precedes any modules from Jest configuration.\n\n```js\nimport serializer from 'my-serializer-module';\nexpect.addSnapshotSerializer(serializer);\n\n// tests which have `expect(value).toMatchSnapshot()` assertions\n```\n\nFor **all** test files, you can specify modules in Jest configuration. They precede built-in plugins for React, HTML, and Immutable.js data types. For example, in a `package.json` file:\n\n```json\n{\n \"jest\": {\n \"snapshotSerializers\": [\"my-serializer-module\"]\n }\n}\n```\n\n## Writing plugins\n\nA plugin is a JavaScript object.\n\nIf `options` has a `plugins` array: for the first plugin whose `test(val)` method returns a truthy value, then `prettyFormat(val, options)` returns the result from either:\n\n- `serialize(val, …)` method of the **improved** interface (available in **version 21** or later)\n- `print(val, …)` method of the **original** interface (if plugin does not have `serialize` method)\n\n### test\n\nWrite `test` so it can receive `val` argument of any type. To serialize **objects** which have certain properties, then a guarded expression like `val != null && …` or more concise `val && …` prevents the following errors:\n\n- `TypeError: Cannot read property 'whatever' of null`\n- `TypeError: Cannot read property 'whatever' of undefined`\n\nFor example, `test` method of built-in `ReactElement` plugin:\n\n```js\nconst elementSymbol = Symbol.for('react.element');\nconst test = val => val && val.$$typeof === elementSymbol;\n```\n\nPay attention to efficiency in `test` because `pretty-format` calls it often.\n\n### serialize\n\nThe **improved** interface is available in **version 21** or later.\n\nWrite `serialize` to return a string, given the arguments:\n\n- `val` which “passed the test”\n- unchanging `config` object: derived from `options`\n- current `indentation` string: concatenate to `indent` from `config`\n- current `depth` number: compare to `maxDepth` from `config`\n- current `refs` array: find circular references in objects\n- `printer` callback function: serialize children\n\n### config\n\n\n| key | type | description |\n| :------------------ | :-------- | :------------------------------------------------------ |\n| `callToJSON` | `boolean` | call `toJSON` method (if it exists) on objects |\n| `compareKeys` | `function`| compare function used when sorting object keys |\n| `colors` | `Object` | escape codes for colors to highlight syntax |\n| `escapeRegex` | `boolean` | escape special characters in regular expressions |\n| `escapeString` | `boolean` | escape special characters in strings |\n| `indent` | `string` | spaces in each level of indentation |\n| `maxDepth` | `number` | levels to print in arrays, objects, elements, and so on |\n| `min` | `boolean` | minimize added space: no indentation nor line breaks |\n| `plugins` | `array` | plugins to serialize application-specific data types |\n| `printFunctionName` | `boolean` | include or omit the name of a function |\n| `spacingInner` | `string` | spacing to separate items in a list |\n| `spacingOuter` | `string` | spacing to enclose a list of items |\n\nEach property of `colors` in `config` corresponds to a property of `theme` in `options`:\n\n- the key is the same (for example, `tag`)\n- the value in `colors` is a object with `open` and `close` properties whose values are escape codes from [ansi-styles](https://github.com/chalk/ansi-styles) for the color value in `theme` (for example, `'cyan'`)\n\nSome properties in `config` are derived from `min` in `options`:\n\n- `spacingInner` and `spacingOuter` are **newline** if `min` is `false`\n- `spacingInner` is **space** and `spacingOuter` is **empty string** if `min` is `true`\n\n### Example of serialize and test\n\nThis plugin is a pattern you can apply to serialize composite data types. Side note: `pretty-format` does not need a plugin to serialize arrays.\n\n```js\n// We reused more code when we factored out a function for child items\n// that is independent of depth, name, and enclosing punctuation (see below).\nconst SEPARATOR = ',';\nfunction serializeItems(items, config, indentation, depth, refs, printer) {\n if (items.length === 0) {\n return '';\n }\n const indentationItems = indentation + config.indent;\n return (\n config.spacingOuter +\n items\n .map(\n item =>\n indentationItems +\n printer(item, config, indentationItems, depth, refs), // callback\n )\n .join(SEPARATOR + config.spacingInner) +\n (config.min ? '' : SEPARATOR) + // following the last item\n config.spacingOuter +\n indentation\n );\n}\n\nconst plugin = {\n test(val) {\n return Array.isArray(val);\n },\n serialize(array, config, indentation, depth, refs, printer) {\n const name = array.constructor.name;\n return ++depth > config.maxDepth\n ? `[${name}]`\n : `${config.min ? '' : `${name} `}[${serializeItems(\n array,\n config,\n indentation,\n depth,\n refs,\n printer,\n )}]`;\n },\n};\n```\n\n```js\nconst val = {\n filter: 'completed',\n items: [\n {\n text: 'Write test',\n completed: true,\n },\n {\n text: 'Write serialize',\n completed: true,\n },\n ],\n};\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n plugins: [plugin],\n }),\n);\n/*\nObject {\n \"filter\": \"completed\",\n \"items\": Array [\n Object {\n \"completed\": true,\n \"text\": \"Write test\",\n },\n Object {\n \"completed\": true,\n \"text\": \"Write serialize\",\n },\n ],\n}\n*/\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n indent: 4,\n plugins: [plugin],\n }),\n);\n/*\nObject {\n \"filter\": \"completed\",\n \"items\": Array [\n Object {\n \"completed\": true,\n \"text\": \"Write test\",\n },\n Object {\n \"completed\": true,\n \"text\": \"Write serialize\",\n },\n ],\n}\n*/\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n maxDepth: 1,\n plugins: [plugin],\n }),\n);\n/*\nObject {\n \"filter\": \"completed\",\n \"items\": [Array],\n}\n*/\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n min: true,\n plugins: [plugin],\n }),\n);\n/*\n{\"filter\": \"completed\", \"items\": [{\"completed\": true, \"text\": \"Write test\"}, {\"completed\": true, \"text\": \"Write serialize\"}]}\n*/\n```\n\n### print\n\nThe **original** interface is adequate for plugins:\n\n- that **do not** depend on options other than `highlight` or `min`\n- that **do not** depend on `depth` or `refs` in recursive traversal, and\n- if values either\n - do **not** require indentation, or\n - do **not** occur as children of JavaScript data structures (for example, array)\n\nWrite `print` to return a string, given the arguments:\n\n- `val` which “passed the test”\n- current `printer(valChild)` callback function: serialize children\n- current `indenter(lines)` callback function: indent lines at the next level\n- unchanging `config` object: derived from `options`\n- unchanging `colors` object: derived from `options`\n\nThe 3 properties of `config` are `min` in `options` and:\n\n- `spacing` and `edgeSpacing` are **newline** if `min` is `false`\n- `spacing` is **space** and `edgeSpacing` is **empty string** if `min` is `true`\n\nEach property of `colors` corresponds to a property of `theme` in `options`:\n\n- the key is the same (for example, `tag`)\n- the value in `colors` is a object with `open` and `close` properties whose values are escape codes from [ansi-styles](https://github.com/chalk/ansi-styles) for the color value in `theme` (for example, `'cyan'`)\n\n### Example of print and test\n\nThis plugin prints functions with the **number of named arguments** excluding rest argument.\n\n```js\nconst plugin = {\n print(val) {\n return `[Function ${val.name || 'anonymous'} ${val.length}]`;\n },\n test(val) {\n return typeof val === 'function';\n },\n};\n```\n\n```js\nconst val = {\n onClick(event) {},\n render() {},\n};\n\nprettyFormat(val, {\n plugins: [plugin],\n});\n/*\nObject {\n \"onClick\": [Function onClick 1],\n \"render\": [Function render 0],\n}\n*/\n\nprettyFormat(val);\n/*\nObject {\n \"onClick\": [Function onClick],\n \"render\": [Function render],\n}\n*/\n```\n\nThis plugin **ignores** the `printFunctionName` option. That limitation of the original `print` interface is a reason to use the improved `serialize` interface, described above.\n\n```js\nprettyFormat(val, {\n plugins: [pluginOld],\n printFunctionName: false,\n});\n/*\nObject {\n \"onClick\": [Function onClick 1],\n \"render\": [Function render 0],\n}\n*/\n\nprettyFormat(val, {\n printFunctionName: false,\n});\n/*\nObject {\n \"onClick\": [Function],\n \"render\": [Function],\n}\n*/\n```\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/facebook/jest/issues"},"homepage":"https://github.com/facebook/jest#readme","_id":"pretty-format@29.0.0-alpha.6","_nodeVersion":"16.15.1","_npmVersion":"lerna/1.10.0/node@v16.15.1+x64 (darwin)","dist":{"integrity":"sha512-ifTZt5HTTYDLbav5bxgVgIRdqvAtaRrMLt03Ew5WaKNiV9ZsrF0lAoUyKrILho/kZ3WTZ7pr+k+dAbFhAteGbQ==","shasum":"fd7f4d58c14c60a41b0a29d77efe173d4ba3d75b","tarball":"http://localhost:4545/npm/registry/pretty-format/pretty-format-29.0.0-alpha.6.tgz","fileCount":25,"unpackedSize":66611,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICNQ1kcSuiwjPwH+BekFIFO0BU7Fnua/ah/FHQfAJanKAiAYAUZyEPUJbF2sHGrNAYk8A40+UlB9XLJyuE1/C4ScWg=="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJi/5bcACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmoz3w//fJnjaK3ZlovAigMwtVyuVa80bu9UxlldNbGNESuw2ZuIon5p\r\nUTqVvh+zQ3hQNq9EKQX6Op6x/VHCHHxKrJDV7Nnj+goseH0pS+fg83GiiHSZ\r\nvbDskg4H3lgqKM0W+fMBUVagTH73pfyNTuA+aUziou+E8zOxe0mG+O2l9rRB\r\n/UQRh1oXvsSfqf7QpfiGYnzFN+NiKg7+Lv80pkJQLCxDJ3tVrAuea94hf/ED\r\niOIG9oJrRFuZvy59lgzIAn5XuxnW5HuJqN9Z3S2qVSU1FWFAjqtnTqJOsN8B\r\nyqySMq8X/HXHHh8W49KphcaYNVM+7uubuRQoUe49UsLxQ+NY3vbe0ttYOICT\r\nLzUzkXxGQcBfPT3QbnHKwt63Uj+u0H01yRNB/j3VS2JCtQZgZ/RujIvbOzGu\r\nh9N0Jfm6DPzGN8CICT0mratLZMq/ykOW3m+qbVGBcehTvxMvKgSj3Is97Rtp\r\nDrbYBsZpEI6vaAE2eTgYo9yfiKi/7ZRcXMF4BJZALPTb9fwI3qEhsmt96+hD\r\ntRVA/anGK70oMnAexm3pAB+K9ng02swK2lRMxFLbc9hv35W1k4RP0WhlfW16\r\nPPnBAk5DeI3UoMhwknd1+C/7CKoZvx0puxF7KFBLDzKgBAF3w7kZd3NnAuuZ\r\nSAFxwfdp8vy5Ff3xndBZY7oMH5z8+PCRXhc=\r\n=xjmS\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"simenb","email":"sbekkhus91@gmail.com"},"directories":{},"maintainers":[{"name":"scotthovestadt","email":"scott.hovestadt@gmail.com"},{"name":"rubennorte","email":"rubennorte@gmail.com"},{"name":"simenb","email":"sbekkhus91@gmail.com"},{"name":"fb","email":"opensource+npm@fb.com"},{"name":"aaronabramov","email":"aaron@abramov.io"},{"name":"davidzilburg","email":"davidzilburg@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pretty-format_29.0.0-alpha.6_1660917468319_0.2431144175949127"},"_hasShrinkwrap":false},"29.0.0":{"name":"pretty-format","version":"29.0.0","repository":{"type":"git","url":"git+https://github.com/facebook/jest.git","directory":"packages/pretty-format"},"license":"MIT","description":"Stringify any JavaScript value.","main":"./build/index.js","types":"./build/index.d.ts","exports":{".":{"types":"./build/index.d.ts","default":"./build/index.js"},"./package.json":"./package.json"},"author":{"name":"James Kyle","email":"me@thejameskyle.com"},"dependencies":{"@jest/schemas":"^29.0.0","ansi-styles":"^5.0.0","react-is":"^18.0.0"},"devDependencies":{"@types/react":"^17.0.3","@types/react-is":"^17.0.0","@types/react-test-renderer":"17.0.2","expect":"^29.0.0","immutable":"^4.0.0","jest-util":"^29.0.0","react":"17.0.2","react-dom":"^17.0.1","react-test-renderer":"17.0.2"},"engines":{"node":"^14.15.0 || ^16.10.0 || >=18.0.0"},"publishConfig":{"access":"public"},"gitHead":"75006e46c76f6fda14bbc0548f86edb2ba087cd2","bugs":{"url":"https://github.com/facebook/jest/issues"},"homepage":"https://github.com/facebook/jest#readme","_id":"pretty-format@29.0.0","_nodeVersion":"16.17.0","_npmVersion":"lerna/1.10.0/node@v16.17.0+x64 (darwin)","dist":{"integrity":"sha512-tMkFRn1vxRwZdiDETcveuNeonRKDg4doOvI+iyb1sOAtxYioGzRicqnsr+d3C/lLv9hBiM/2lDBi5ilR81h2bQ==","shasum":"a9a604ca71678f803f34f6563a25a638fce267ba","tarball":"http://localhost:4545/npm/registry/pretty-format/pretty-format-29.0.0.tgz","fileCount":25,"unpackedSize":68506,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGu3X56eyNlXEJBkdwnE5j4m7npb3KK0tp5UKi+QcowIAiBunSxa4au7vcvA/YosGsYy3sowx6RwW/T5+TkvVpPcxg=="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjB2wYACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmqz4Q//dgfsiKF/a5D7FfiIBOfXtbn/iLdbGqK75HvrXeqXZEmgtVHF\r\nqQK+i3BAv7NxywVHrQo+0PSWLr94l6GO+7efLDRjVi3VgcNV9hZ7VrS6/eer\r\nNWAWn2aTNy3J1fniprzaDXuo3lVSr5xVKhEFOHaX+7TLfY9hJMfBUJVHVsGv\r\nkGTIafuRTZj/jPyyXbVOgOo38KmVO+vENjEmlsS22UtxyGbtvr85Id91rSLZ\r\nZHhtXubArdBwQ0aSBA/u3Y4IJZo1XgXEglAwjQRBZL7wmYm3cXwjkzrLD3Gi\r\n1x2W4u+p2kuMeO+NyiAkMsjVQqwGziVawidDPZKq46NjUkH65QLWcoWWvvFm\r\nuyZdQsOowcddvTo0mcutubkCdXhD6GiEaD2kGNnd66WWQKWXOhYATDj75+ks\r\nUOuUIQihe4Bk0WADTjZkzYemmA9JDH/0hGnFR+HqIlBbJVulN7fTchIGLOnJ\r\np3f84pGbyP2YtNCCnOaK6JPimOHziTG3z3Xsqkt516paC7zTFzPWg/oPbP59\r\nYiipTGmOeeBuCYcEwcy3oxNs3b9twrXNWNzGpUvAEYYgyQJe7b486uAb2zpR\r\n255xLmz5xlQxAJ2CYW6iTRfNQsJbCWuSB/Ara1P8eExe8+DCEn8phCUPco8D\r\nbAXwkD94BVTxZdTCBK32s8ddPW094q4t6f4=\r\n=AyLc\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"simenb","email":"sbekkhus91@gmail.com"},"directories":{},"maintainers":[{"name":"scotthovestadt","email":"scott.hovestadt@gmail.com"},{"name":"rubennorte","email":"rubennorte@gmail.com"},{"name":"simenb","email":"sbekkhus91@gmail.com"},{"name":"fb","email":"opensource+npm@fb.com"},{"name":"aaronabramov","email":"aaron@abramov.io"},{"name":"davidzilburg","email":"davidzilburg@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pretty-format_29.0.0_1661430808341_0.9411779135138714"},"_hasShrinkwrap":false},"29.0.1":{"name":"pretty-format","version":"29.0.1","repository":{"type":"git","url":"git+https://github.com/facebook/jest.git","directory":"packages/pretty-format"},"license":"MIT","description":"Stringify any JavaScript value.","main":"./build/index.js","types":"./build/index.d.ts","exports":{".":{"types":"./build/index.d.ts","default":"./build/index.js"},"./package.json":"./package.json"},"author":{"name":"James Kyle","email":"me@thejameskyle.com"},"dependencies":{"@jest/schemas":"^29.0.0","ansi-styles":"^5.0.0","react-is":"^18.0.0"},"devDependencies":{"@types/react":"^17.0.3","@types/react-is":"^17.0.0","@types/react-test-renderer":"17.0.2","expect":"^29.0.1","immutable":"^4.0.0","jest-util":"^29.0.1","react":"17.0.2","react-dom":"^17.0.1","react-test-renderer":"17.0.2"},"engines":{"node":"^14.15.0 || ^16.10.0 || >=18.0.0"},"publishConfig":{"access":"public"},"gitHead":"b959a3d3bdf324ed1c7358f76ab238a8b0b0cf93","bugs":{"url":"https://github.com/facebook/jest/issues"},"homepage":"https://github.com/facebook/jest#readme","_id":"pretty-format@29.0.1","_nodeVersion":"16.17.0","_npmVersion":"lerna/1.10.0/node@v16.17.0+x64 (darwin)","dist":{"integrity":"sha512-iTHy3QZMzuL484mSTYbQIM1AHhEQsH8mXWS2/vd2yFBYnG3EBqGiMONo28PlPgrW7P/8s/1ISv+y7WH306l8cw==","shasum":"2f8077114cdac92a59b464292972a106410c7ad0","tarball":"http://localhost:4545/npm/registry/pretty-format/pretty-format-29.0.1.tgz","fileCount":15,"unpackedSize":60594,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC1TTlGHYYe7BBsu3Ln8VTUyKSI7bc/f77JEkOCoLD1OQIhAKkbFTlgEL5nOcHD5J9ebuls0+Jl22nXwV/70SOCwfwb"}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjCMvyACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmqFDRAAnXbOvDD+Lmq6dFMiBlKDuWDAl6JmSqTCtnsxdAWINZWGT5Jq\r\nNFGDNcEKsV+tljoIPkbub5h5640I0CK1ktyg4L5xW9dPMA06FqBgzj9gBGmn\r\nLUpZtINegfpeXhfcPAhtU4Is5QX1A+mpXiX6HH9gZ0tV3FfHN7g70E25wfPZ\r\nb5ep+y7yv3XFRQ15G0T6NLqE1K44MKSKEAZzfcCiwcFwlH7G8Fl340ceNRl+\r\n/SB3m61MC9d+Cyn+qPIawWolwtsehfyrk2MLeivGdIKtrdqG44DDhP2llJan\r\nrQ3hORHSWztSN3IHaXnVbXfD6ALQ7CelfaQBPqHNETHUa8RJU/8PQK9Gc4hE\r\nCj6R2sSHUW6rqbAReKlUh2bzUV80PYefsIPDII42Fah9RpWGdVT6gKXx4xO4\r\n6SrAFEPPR7PgLUxAluReoRbuS2yoVJ8olDxK/+YC6mmgAZ2N67M+gnC2WWcQ\r\nDxF7KI8H3AKUiU7vDvDlALssD2ZJbK1+GHBUAYdhDlmgSTVdAK1Q4WEsfXlC\r\nqvLboYpFdNVaHeyce4fJTaFc8t4aJKshznNb5vYOAvy0QmNoU1Kz+5NgmMhv\r\nuv/imAftnUMb0BH97UBxTMW88rBjmEjUQIaE/Uyt5emFD3uueto6d30C7R13\r\n6BERhLmI+Jh8HAB9lzybCKSoje0pnu5wcSc=\r\n=A61B\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"simenb","email":"sbekkhus91@gmail.com"},"directories":{},"maintainers":[{"name":"scotthovestadt","email":"scott.hovestadt@gmail.com"},{"name":"rubennorte","email":"rubennorte@gmail.com"},{"name":"simenb","email":"sbekkhus91@gmail.com"},{"name":"fb","email":"opensource+npm@fb.com"},{"name":"aaronabramov","email":"aaron@abramov.io"},{"name":"davidzilburg","email":"davidzilburg@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pretty-format_29.0.1_1661520882041_0.8620373554141116"},"_hasShrinkwrap":false},"29.0.2":{"name":"pretty-format","version":"29.0.2","repository":{"type":"git","url":"git+https://github.com/facebook/jest.git","directory":"packages/pretty-format"},"license":"MIT","description":"Stringify any JavaScript value.","main":"./build/index.js","types":"./build/index.d.ts","exports":{".":{"types":"./build/index.d.ts","default":"./build/index.js"},"./package.json":"./package.json"},"author":{"name":"James Kyle","email":"me@thejameskyle.com"},"dependencies":{"@jest/schemas":"^29.0.0","ansi-styles":"^5.0.0","react-is":"^18.0.0"},"devDependencies":{"@types/react":"^17.0.3","@types/react-is":"^17.0.0","@types/react-test-renderer":"17.0.2","expect":"^29.0.2","immutable":"^4.0.0","jest-util":"^29.0.2","react":"17.0.2","react-dom":"^17.0.1","react-test-renderer":"17.0.2"},"engines":{"node":"^14.15.0 || ^16.10.0 || >=18.0.0"},"publishConfig":{"access":"public"},"gitHead":"616fcf56bb8481d29ba29cc34be32a92b1cf85e5","bugs":{"url":"https://github.com/facebook/jest/issues"},"homepage":"https://github.com/facebook/jest#readme","_id":"pretty-format@29.0.2","_nodeVersion":"16.17.0","_npmVersion":"lerna/1.10.0/node@v16.17.0+x64 (darwin)","dist":{"integrity":"sha512-wp3CdtUa3cSJVFn3Miu5a1+pxc1iPIQTenOAn+x5erXeN1+ryTcLesV5pbK/rlW5EKwp27x38MoYfNGaNXDDhg==","shasum":"7f7666a7bf05ba2bcacde61be81c6db64f6f3be6","tarball":"http://localhost:4545/npm/registry/pretty-format/pretty-format-29.0.2.tgz","fileCount":15,"unpackedSize":60594,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDQKuFagWGbZZIDyWq0HMwrVeOxjeoApgGtGJ+PipDIAAIhANpzcIPhOlKyuMjG6aV3AIKjjJ/Vz1m9kLuIsi2aXI9l"}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjEzDzACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmrwGBAAlfDvHpNt47v0zsEob+zUAj1xFg6Xn29fbCneUTJ6PNiLEHMa\r\n9/BEi+2+DW/QYE6Eah/FVRaau0ngbUGHfVNZh7vyjTAXy0AOMXGgAp/h1SNa\r\nQd/NymLP0ZQelkR1hd14OM5m5E8x/xmcLD0RsTqJFT4p9o27CmOt5RcO1oFa\r\ngxiwnn1Q3t2fmGa/cseiuFvJdv0EjZmHIw/LACxkd3auBfK1Qr3pCHoPl824\r\n9ZwBC3+08/n6AowNlkXs6dMzxjqMR/gIUcoIrkk34qR70jyk3wt6iqU20bYP\r\nc1RsdsF4s7uqrzs/uPXGi7wdEKaaWojMpGLuLKYodM9/H8IOiK4HF16FGucL\r\nmo//7h00sQCm8+JwSmlYTF0VSWBfFU4NfdeQk1iI05rsHD5ljpNVhMQWsvp7\r\npy9RFKyr/0ZKWGm9YnMXmW7amY6VFF92Lt/JJXCSKT88U8AhMA2J9TO0VlUA\r\nDXR3tdpBJJ4jskpI4WLRNL7c3m04qvs+ZaGnPyGFxafpoWBgnN3tC6XIAekF\r\nReT2Wqu4c/X3i3BsoquAY1WhoD+xViihTUZLpfvAd5UHwMnd6oVlV0d998nK\r\nxppDV0aMtmrDUCtIywKAOxuMIg1hwEHvD04e0vx8NT9Vged9CheMtsy0WZxR\r\naz5TdBoSZIFwRtWKxWT7BBAwwPtiw8pIyL0=\r\n=AW1E\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"simenb","email":"sbekkhus91@gmail.com"},"directories":{},"maintainers":[{"name":"scotthovestadt","email":"scott.hovestadt@gmail.com"},{"name":"rubennorte","email":"rubennorte@gmail.com"},{"name":"simenb","email":"sbekkhus91@gmail.com"},{"name":"fb","email":"opensource+npm@fb.com"},{"name":"aaronabramov","email":"aaron@abramov.io"},{"name":"davidzilburg","email":"davidzilburg@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pretty-format_29.0.2_1662202099646_0.6622745079603374"},"_hasShrinkwrap":false},"29.0.3":{"name":"pretty-format","version":"29.0.3","repository":{"type":"git","url":"git+https://github.com/facebook/jest.git","directory":"packages/pretty-format"},"license":"MIT","description":"Stringify any JavaScript value.","main":"./build/index.js","types":"./build/index.d.ts","exports":{".":{"types":"./build/index.d.ts","default":"./build/index.js"},"./package.json":"./package.json"},"author":{"name":"James Kyle","email":"me@thejameskyle.com"},"dependencies":{"@jest/schemas":"^29.0.0","ansi-styles":"^5.0.0","react-is":"^18.0.0"},"devDependencies":{"@types/react":"^17.0.3","@types/react-is":"^17.0.0","@types/react-test-renderer":"17.0.2","expect":"^29.0.3","immutable":"^4.0.0","jest-util":"^29.0.3","react":"17.0.2","react-dom":"^17.0.1","react-test-renderer":"17.0.2"},"engines":{"node":"^14.15.0 || ^16.10.0 || >=18.0.0"},"publishConfig":{"access":"public"},"gitHead":"77f865da39af5b3e1c114dc347e49257eb3dcfd1","bugs":{"url":"https://github.com/facebook/jest/issues"},"homepage":"https://github.com/facebook/jest#readme","_id":"pretty-format@29.0.3","_nodeVersion":"16.17.0","_npmVersion":"lerna/1.10.0/node@v16.17.0+x64 (darwin)","dist":{"integrity":"sha512-cHudsvQr1K5vNVLbvYF/nv3Qy/F/BcEKxGuIeMiVMRHxPOO1RxXooP8g/ZrwAp7Dx+KdMZoOc7NxLHhMrP2f9Q==","shasum":"23d5f8cabc9cbf209a77d49409d093d61166a811","tarball":"http://localhost:4545/npm/registry/pretty-format/pretty-format-29.0.3.tgz","fileCount":15,"unpackedSize":60594,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGpr7TfDZYhksSr8ouHKq6fcqvxhf/2IKvGRT/S9VYcFAiAF9awC/rvlKhYCoAG90NYC67yyLXMy14Qt2WubkAqXVw=="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjHKIiACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmpIMA/9HeGxv87iI6EixEsUpaRrCw5iqQtZvR1YztYQLwG7zd4Fb954\r\nBAGAwyPVwBoQ4LgAPJDFxAOa6ggjRbP3V+kbrXCU6HI2iAF1tsepHB1fhRG9\r\nmRl0EawF4bFq5iGR6neI6cV2nQgdHbyOkX9Ku9uQyhsVQjgAdEB0ql61QMmY\r\nj6krxnb/iHKBdAC7fUbG3JDbIe7tEucRd17sAnbD/zqhE6RhmuHEyceXCMk5\r\nEZnwdVKlS9YTOfLv2+dfkXKPSfGGKvpqFEr6Dg4IBuq2UHaaI3PPzbfpkbto\r\nlfTNzobhQyd0bjrLDDuUqJETSCKuoGNQBEP3PggC4dYZX0kEa9XTJRX7n1BQ\r\nkh86zN46p9okuBaHjaeCjZ2MfeVs2Ha4a/Oq2F9jIcYoOpe72q/StEpUuqRi\r\n4j98iV1MZzAMsq3JFOgXsS1sGZIiV+s3kx3hUhtD4QADFoaZ9F2SrlmR8E52\r\nwrc7fOsFVEW89daFJo7jI2zdulnBLyLtlPGJvIeISmjX0obkeTCR/hQtZZ52\r\nyFWIa/+4sD5PWDwtIATJA3EoZxi7fu3qeP4Wy9zk0qnOWbZiYdRxp2seCUVE\r\nEY/yL78vkNDYt12cvbyddPnTssMTLxyet1yQ8YZYPWsHV/QWfMCDbB6emtnC\r\ntsYr/xoBCE7y4S2AcXtKQ9QW79e2jotaX7I=\r\n=9du1\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"simenb","email":"sbekkhus91@gmail.com"},"directories":{},"maintainers":[{"name":"scotthovestadt","email":"scott.hovestadt@gmail.com"},{"name":"rubennorte","email":"rubennorte@gmail.com"},{"name":"simenb","email":"sbekkhus91@gmail.com"},{"name":"fb","email":"opensource+npm@fb.com"},{"name":"aaronabramov","email":"aaron@abramov.io"},{"name":"davidzilburg","email":"davidzilburg@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pretty-format_29.0.3_1662820898280_0.5999375072132109"},"_hasShrinkwrap":false},"29.1.0":{"name":"pretty-format","version":"29.1.0","repository":{"type":"git","url":"git+https://github.com/facebook/jest.git","directory":"packages/pretty-format"},"license":"MIT","description":"Stringify any JavaScript value.","main":"./build/index.js","types":"./build/index.d.ts","exports":{".":{"types":"./build/index.d.ts","default":"./build/index.js"},"./package.json":"./package.json"},"author":{"name":"James Kyle","email":"me@thejameskyle.com"},"dependencies":{"@jest/schemas":"^29.0.0","ansi-styles":"^5.0.0","react-is":"^18.0.0"},"devDependencies":{"@types/react":"^17.0.3","@types/react-is":"^17.0.0","@types/react-test-renderer":"17.0.2","immutable":"^4.0.0","jest-util":"^29.1.0","react":"17.0.2","react-dom":"^17.0.1","react-test-renderer":"17.0.2"},"engines":{"node":"^14.15.0 || ^16.10.0 || >=18.0.0"},"publishConfig":{"access":"public"},"gitHead":"51f10300daf90db003a1749ceaed1084c4f74811","bugs":{"url":"https://github.com/facebook/jest/issues"},"homepage":"https://github.com/facebook/jest#readme","_id":"pretty-format@29.1.0","_nodeVersion":"16.17.0","_npmVersion":"lerna/1.11.3/node@v16.17.0+x64 (darwin)","dist":{"integrity":"sha512-dZ21z0UjKVSiEkrPAt2nJnGfrtYMFBlNW4wTkJsIp9oB5A8SUQ8DuJ9EUgAvYyNfMeoGmKiDnpJvM489jkzdSQ==","shasum":"ea3de2feed5b8d19c537a12fe478ddc8b45da6b8","tarball":"http://localhost:4545/npm/registry/pretty-format/pretty-format-29.1.0.tgz","fileCount":15,"unpackedSize":60569,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGeUZDPE01zm3T7DAj4VRASd2pGyNReCHi4EKQsM15G9AiEAjGGiLyShBKotQUSjY5b3nyAC4smCBQ82iSG5srkLkUI="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjM/nCACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmqe1xAAmLd+YcRMkVk0+oG+MbEit646Re/oWiy9Ujdnj/gFg06huCJg\r\ncf8vMYHKFzkYwCFOMfJ5YjZcla8rWlQT+7Dbt4X6uLWwhBJRz9kpBT3M7dWh\r\nUViPzjJzmn8HOaziG4D2glZ1WMu8XcxtxFKai5yq/V5l1oIiqf42L5jTPgFf\r\n65zPyexOb0Uvv6IByQDN+p9nwUn1jsYAkwqAqirNKuJe9iztHlUPISG5zX9v\r\nnmnADpeYKzQwDFTnz0bwxt5IdJASk9YNcpDAeq0/i3YXOleqbT5WMOUWUiUq\r\n8Q5wtGC/I1pgfLTFCIilSpnWYoi3TGIz+xR2OLrg3QcDKBTr+wt3frNrKrBw\r\nLFxO6N6ZAGL1msxSyE+zmji1cs2ZTiJRgPaDLOVjoYrgoi6syfPNxEP1hoC2\r\n8d06MoQPlzP0bdj32QqpiEQomcFhrQTBJzoV16vsogomHPP73db61OjHPRQl\r\nCtH6A3TTIwHOrUumukInHRs1Dc97rohxm+y+j+EZM3ZY7uoiPSIAZZi4k3uu\r\n6haFfjhpMj5OvnJc0TGb1rr2C+ft5R6YriK2B2r/kTKNZmHbCXoPDMLJr9ye\r\nQmx4YDjeLe1VzTTD/OOhmn2wjHe3MNeK0ghKE8M7REH29+3tJmMnKevGT1uW\r\naBoK9qgiHzbKb4H6J3sYYzD9u5ZPrbkkNBs=\r\n=YZ5z\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"simenb","email":"sbekkhus91@gmail.com"},"directories":{},"maintainers":[{"name":"scotthovestadt","email":"scott.hovestadt@gmail.com"},{"name":"rubennorte","email":"rubennorte@gmail.com"},{"name":"simenb","email":"sbekkhus91@gmail.com"},{"name":"fb","email":"opensource+npm@fb.com"},{"name":"aaronabramov","email":"aaron@abramov.io"},{"name":"davidzilburg","email":"davidzilburg@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pretty-format_29.1.0_1664350658480_0.45739552930662986"},"_hasShrinkwrap":false},"29.1.2":{"name":"pretty-format","version":"29.1.2","repository":{"type":"git","url":"git+https://github.com/facebook/jest.git","directory":"packages/pretty-format"},"license":"MIT","description":"Stringify any JavaScript value.","main":"./build/index.js","types":"./build/index.d.ts","exports":{".":{"types":"./build/index.d.ts","default":"./build/index.js"},"./package.json":"./package.json"},"author":{"name":"James Kyle","email":"me@thejameskyle.com"},"dependencies":{"@jest/schemas":"^29.0.0","ansi-styles":"^5.0.0","react-is":"^18.0.0"},"devDependencies":{"@types/react":"^17.0.3","@types/react-is":"^17.0.0","@types/react-test-renderer":"17.0.2","immutable":"^4.0.0","jest-util":"^29.1.2","react":"17.0.2","react-dom":"^17.0.1","react-test-renderer":"17.0.2"},"engines":{"node":"^14.15.0 || ^16.10.0 || >=18.0.0"},"publishConfig":{"access":"public"},"gitHead":"3c31dd619e8c022cde53f40fa12ea2a67f4752ce","bugs":{"url":"https://github.com/facebook/jest/issues"},"homepage":"https://github.com/facebook/jest#readme","_id":"pretty-format@29.1.2","_nodeVersion":"16.17.0","_npmVersion":"lerna/1.11.3/node@v16.17.0+x64 (darwin)","dist":{"integrity":"sha512-CGJ6VVGXVRP2o2Dorl4mAwwvDWT25luIsYhkyVQW32E4nL+TgW939J7LlKT/npq5Cpq6j3s+sy+13yk7xYpBmg==","shasum":"b1f6b75be7d699be1a051f5da36e8ae9e76a8e6a","tarball":"http://localhost:4545/npm/registry/pretty-format/pretty-format-29.1.2.tgz","fileCount":15,"unpackedSize":60569,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICw9+QEOL9sEqz1DJ2vekgkai1OueolgcmNkxgMSon6sAiAWNt4+Ts+4AU/sL8HEAF2m1FZeMvnH+J9f5xYz0/Qh8A=="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjNplEACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmqO7w//fKqmrLhHw6L4KooqPZ1Y+l4TLXItZU93gCxu9Te4l2goG4i0\r\nazviqHKTbCqNLHZjIDmJmsZfn1NLEj4LX6M1eFpECQwASDFE3kgOqj9kCmU0\r\ntNianavUP1b24ysLkuyFLkhCN6cOHQMaOeKkgU8pKK/jHgYDkmE7dkyS3mF0\r\nWLU/IGYGV7yfC1LXqVWeWFawazm9isON26s3OyQHgHUVbkft1h7F1kTNG/aJ\r\nzHvt875ioMJIpv81bDl0l4f5pIOmvpswnashQz0gISBN/K+hkuzijPAojWtW\r\nQY1rPA36195L6Fdo2/uAH5g3mZ8Y/MC6nUGYM808kUR0Pn98/Wj/IwLoGk8E\r\n8609KDiX37S7iA+VKUWav5dDYBQx0KZowraUG6JYKjhEFuSJyWW1SE+icO8e\r\n0jrGtnQETPcCsXRSdZS/Yv6J8xB7tnKPbC7yA2Fcn/hUUL1/LARTUZSGPgdw\r\nvR9LChABJB6LYGbKcclvtOyOOP8XPg/Glqn8cZBxhb+UfmPBnRHanVLDoytj\r\nFxrPyEVinFsZU6tAtCgHvz1G20L2yF53nDVMDxfFw1xSFx+HQZ2W85lDqcE4\r\n7bfvJwcmzVoONVOVkbOIMSXvTzYqXA3N5PaIVwni4RPH904Z0vnCSjcc7tM9\r\njHEEK+osIssZd5tRsJrbQBlHZo1j7Y89CO4=\r\n=+4jQ\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"simenb","email":"sbekkhus91@gmail.com"},"directories":{},"maintainers":[{"name":"scotthovestadt","email":"scott.hovestadt@gmail.com"},{"name":"rubennorte","email":"rubennorte@gmail.com"},{"name":"simenb","email":"sbekkhus91@gmail.com"},{"name":"fb","email":"opensource+npm@fb.com"},{"name":"aaronabramov","email":"aaron@abramov.io"},{"name":"davidzilburg","email":"davidzilburg@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pretty-format_29.1.2_1664522564599_0.29613090444740164"},"_hasShrinkwrap":false},"29.2.0":{"name":"pretty-format","version":"29.2.0","repository":{"type":"git","url":"git+https://github.com/facebook/jest.git","directory":"packages/pretty-format"},"license":"MIT","description":"Stringify any JavaScript value.","main":"./build/index.js","types":"./build/index.d.ts","exports":{".":{"types":"./build/index.d.ts","default":"./build/index.js"},"./package.json":"./package.json"},"author":{"name":"James Kyle","email":"me@thejameskyle.com"},"dependencies":{"@jest/schemas":"^29.0.0","ansi-styles":"^5.0.0","react-is":"^18.0.0"},"devDependencies":{"@types/react":"^17.0.3","@types/react-is":"^17.0.0","@types/react-test-renderer":"17.0.2","immutable":"^4.0.0","jest-util":"^29.2.0","react":"17.0.2","react-dom":"^17.0.1","react-test-renderer":"17.0.2"},"engines":{"node":"^14.15.0 || ^16.10.0 || >=18.0.0"},"publishConfig":{"access":"public"},"gitHead":"ee5b37a4f4433afcfffb0356cea47739d8092287","bugs":{"url":"https://github.com/facebook/jest/issues"},"homepage":"https://github.com/facebook/jest#readme","_id":"pretty-format@29.2.0","_nodeVersion":"16.17.0","_npmVersion":"lerna/1.11.3/node@v16.17.0+x64 (darwin)","dist":{"integrity":"sha512-QCSUFdwOi924g24czhOH5eTkXxUCqlLGZBRCySlwDYHIXRJkdGyjJc9nZaqhlFBZws8dq5Dvk0lCilsmlfsPxw==","shasum":"1d4ea56fb46079b44efd9ed59c14f70f2950a61b","tarball":"http://localhost:4545/npm/registry/pretty-format/pretty-format-29.2.0.tgz","fileCount":15,"unpackedSize":60414,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCID/5BwZgcywyfMR4s4GT1qU2GqEBeiryh6WnLYRqhJBuAiEAvJXAh+b5NmkofSx//ana5wlmNiysSt7vJrYVrSGgHYs="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjSShKACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmr09g/9FskfmyoAVnxjV78e2Lua8mm8MYaWcYvW63+W6/806UK8dJw4\r\nzSwYf/TgIdTbsy/FFyiJwg2MLuZrQREXCJ/DYikDfu3oBrOdQS4qngC1qqYY\r\nOcykMHqXPOfwlSs9Yag1osK4od5a7tL8pp0nzUhdIA38VtYZd8v/G3rJ9yXv\r\nL1/04/bjkenK7r++SXTLD5SdDJI7s/aULIOUuxvfx2BQ7luS6PXDKtkj1ZGW\r\nZQL7rDqNgajH8GcQJtm3STXCCFXCi3+YUEhU5TjSPv7CkuG9s03TpMhvuZdZ\r\nUc8GIhU80Hxhb2/EMu+NsIJ2Jn8dMdPe7AaVcMgSO5Kn6dutaA/9rSXPJkd+\r\n1phKpp03Uf0ue+VbXKVwXHnTQzwku+aoGWVZwSlLngpwWPiycueZhPkAZNIi\r\nxEX+N4Jo+DfGphHIbASsJ59lI3p/BJL1EGj4sbsE8iUHqHfMYUKCTIPH9wmP\r\nrAasusAtHXdUVSGoV9fmsTr2Iq8TRZgPZ/J9Fi7gTKTqLbM8AjHErjp1JN05\r\nFNZ1qwQUvawu20Co30A/Pjm071hUU973lcVKOqtu1rW8iGzOuxeyzKcF92r6\r\n5F2jwoaAt0n7DfidDcg+mnK5ViHyVaVmybb6Ksr6w1N/mK0iEDaoadg8oQz2\r\n1Tf/ffpI3YJ6IGiBQHD2I2V2qxhVWAuOzgA=\r\n=5Y39\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"simenb","email":"sbekkhus91@gmail.com"},"directories":{},"maintainers":[{"name":"scotthovestadt","email":"scott.hovestadt@gmail.com"},{"name":"rubennorte","email":"rubennorte@gmail.com"},{"name":"simenb","email":"sbekkhus91@gmail.com"},{"name":"fb","email":"opensource+npm@fb.com"},{"name":"aaronabramov","email":"aaron@abramov.io"},{"name":"davidzilburg","email":"davidzilburg@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pretty-format_29.2.0_1665738826366_0.8868311397692656"},"_hasShrinkwrap":false},"29.2.1":{"name":"pretty-format","version":"29.2.1","repository":{"type":"git","url":"git+https://github.com/facebook/jest.git","directory":"packages/pretty-format"},"license":"MIT","description":"Stringify any JavaScript value.","main":"./build/index.js","types":"./build/index.d.ts","exports":{".":{"types":"./build/index.d.ts","default":"./build/index.js"},"./package.json":"./package.json"},"author":{"name":"James Kyle","email":"me@thejameskyle.com"},"dependencies":{"@jest/schemas":"^29.0.0","ansi-styles":"^5.0.0","react-is":"^18.0.0"},"devDependencies":{"@types/react":"^17.0.3","@types/react-is":"^17.0.0","@types/react-test-renderer":"17.0.2","immutable":"^4.0.0","jest-util":"^29.2.1","react":"17.0.2","react-dom":"^17.0.1","react-test-renderer":"17.0.2"},"engines":{"node":"^14.15.0 || ^16.10.0 || >=18.0.0"},"publishConfig":{"access":"public"},"gitHead":"4551c0fdd4d25b7206824957c7bcc6baf61e63bf","bugs":{"url":"https://github.com/facebook/jest/issues"},"homepage":"https://github.com/facebook/jest#readme","_id":"pretty-format@29.2.1","_nodeVersion":"16.17.0","_npmVersion":"lerna/1.11.3/node@v16.17.0+x64 (darwin)","dist":{"integrity":"sha512-Y41Sa4aLCtKAXvwuIpTvcFBkyeYp2gdFWzXGA+ZNES3VwURIB165XO/z7CjETwzCCS53MjW/rLMyyqEnTtaOfA==","shasum":"86e7748fe8bbc96a6a4e04fa99172630907a9611","tarball":"http://localhost:4545/npm/registry/pretty-format/pretty-format-29.2.1.tgz","fileCount":15,"unpackedSize":60414,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDfmT4RAEL+UPCz50UhQHdo+XGaeAqICNPa0tVZxvJTKQIhAKpIR6j47qO7y847+c2tC/d2n+CCHFjHdDDzwnD0kjDX"}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjTs2LACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmqJRA//Un8ngD1WtMysHR6hsVHNvHOrROX8qTWreEoefBlg57rAD7Fd\r\nPG6F5/XShoouwjq5Ywz3ptfBRCGj6JVGyyfjwB1gaJE2apMA+t1ambSCjyoX\r\nu93MiA3IAyxI7ke+wLGKO1iscbmehEESLhPooMqABhAEeHXTluVIr8qoheEc\r\nNyhNQQddYvzAus5Z4X1dKPenMu4HFeL4OvYy6rYSSTCjQzlvGy73dQvDfEWh\r\nejbCQigGVJrvcC7zNMtTrlJn6msmkTLzmIojZVk4aYz9UxrXehq1tU7bqsHw\r\nUwA9UbkytohNbJ5XT+ut0ALSP8wLEDuuCkkZvaWsh0V1TEHJQ6Ijzz/eNuJv\r\nlY5i6DaJUwQetGQzOxesFblAtbXBgbP1CAMVOky368ETJ+KoWqOpbefie9Lc\r\npDzdPmarJ+Gj/neH48s5VzV5iWPn+YFtwuFiMYz0t+n6HPnGOl5v4Vx1VW/B\r\nxmY356/A6BR6TQpXzoUykKfVbTKac2ICy+VwJhW3wlwpjE0wkuA6k7UTb8l9\r\nTTYJ2lp35pTNXe+qSHzrClejl6lM7Jju1PSWG36TqKJ49nOAb0n0IyXyQ9Nl\r\nvfam00rMesSbqcdOR/6gZ7DbHcBu+OSkUjnxyOO1iCBNE7rpgoxJexqnfGq4\r\nEUGWk1hXrGGGb2SBcwOtibczTxVB3fq2yrM=\r\n=qia1\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"simenb","email":"sbekkhus91@gmail.com"},"directories":{},"maintainers":[{"name":"scotthovestadt","email":"scott.hovestadt@gmail.com"},{"name":"rubennorte","email":"rubennorte@gmail.com"},{"name":"simenb","email":"sbekkhus91@gmail.com"},{"name":"fb","email":"opensource+npm@fb.com"},{"name":"aaronabramov","email":"aaron@abramov.io"},{"name":"davidzilburg","email":"davidzilburg@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pretty-format_29.2.1_1666108810954_0.4642202645094913"},"_hasShrinkwrap":false},"29.3.1":{"name":"pretty-format","version":"29.3.1","repository":{"type":"git","url":"git+https://github.com/facebook/jest.git","directory":"packages/pretty-format"},"license":"MIT","description":"Stringify any JavaScript value.","main":"./build/index.js","types":"./build/index.d.ts","exports":{".":{"types":"./build/index.d.ts","default":"./build/index.js"},"./package.json":"./package.json"},"author":{"name":"James Kyle","email":"me@thejameskyle.com"},"dependencies":{"@jest/schemas":"^29.0.0","ansi-styles":"^5.0.0","react-is":"^18.0.0"},"devDependencies":{"@types/react":"^17.0.3","@types/react-is":"^17.0.0","@types/react-test-renderer":"17.0.2","immutable":"^4.0.0","jest-util":"^29.3.1","react":"17.0.2","react-dom":"^17.0.1","react-test-renderer":"17.0.2"},"engines":{"node":"^14.15.0 || ^16.10.0 || >=18.0.0"},"publishConfig":{"access":"public"},"gitHead":"05deb8393c4ad71e19be2567b704dfd3a2ab5fc9","bugs":{"url":"https://github.com/facebook/jest/issues"},"homepage":"https://github.com/facebook/jest#readme","_id":"pretty-format@29.3.1","_nodeVersion":"16.17.0","_npmVersion":"lerna/1.11.3/node@v16.17.0+x64 (darwin)","dist":{"integrity":"sha512-FyLnmb1cYJV8biEIiRyzRFvs2lry7PPIvOqKVe1GCUEYg4YGmlx1qG9EJNMxArYm7piII4qb8UV1Pncq5dxmcg==","shasum":"1841cac822b02b4da8971dacb03e8a871b4722da","tarball":"http://localhost:4545/npm/registry/pretty-format/pretty-format-29.3.1.tgz","fileCount":15,"unpackedSize":60414,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCkO+FK0nfjWDKmfLtP/f4SjJKJaDvO36zQBfG43KHpaAIhAJRoqlicMcD2FowL2URdDoiAYx1ag29zfv0Aadb33XPt"}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjat6WACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmrdKhAAjwOtxpyWGJbrG60f+ldZKfY5wEk3Spj/iYUmCdkFrKoxF4N4\r\naXfPKUEbHNHexgiLd6QOWLXb26mh3eYpDwLJElYDn6b/+0WlHWgpgSYJivEl\r\n5obqEuxBjgmoSZb35aFRroupUQ9QNPh7e/1T/FN81h4obqkVvP+hQuHlx2bH\r\nb+Ry5fvZ82I0MYbVVR7eKGTfphgNzR+tErvy/07XbBFA+qUNnqgIxLSQbHjX\r\nToO+Uc6r9GjlO/1sn0Qf7PILF9tfhQewG0YeWmLtC6JD1D5wqvPeEGKLUNnC\r\noW/jdHFvnwQjTfqr49CnlVNUfEvOXbCNbg17UNmneW1p5t0P85RMuH8zXJQq\r\ntrUP+KwrHwjuPjEphZYYmHX4nCfpgo7QpXdlV/ih8Y6FKuM73rNFP27PQZGy\r\nq1STNCDIhZ5jJkP2JdoDGBJQ2kqAF7CimI0fZbOEpB/NPzKWKvLB9EisvTNi\r\nKqPZ/JquPLC3NDyFh1T7Jpd4KWPbEp5/5SudFYY+JovdqtXLjEA0wzW4aZGv\r\njDiaOZHepSI8T/NA8cH7Y5OxtDdc5DVkmJXklMizEUyok65a7r+e84A9I2Ee\r\nW4WZw6fPwpJPwY8vYdMZTOFAMl7w0I8QrHEjRrBN9CvOCQxmIm2XW7FiWWsf\r\nulXrkbO5qAhRb+Hyvn/0nC/brpnEfPyURcQ=\r\n=6v/l\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"simenb","email":"sbekkhus91@gmail.com"},"directories":{},"maintainers":[{"name":"scotthovestadt","email":"scott.hovestadt@gmail.com"},{"name":"rubennorte","email":"rubennorte@gmail.com"},{"name":"simenb","email":"sbekkhus91@gmail.com"},{"name":"fb","email":"opensource+npm@fb.com"},{"name":"aaronabramov","email":"aaron@abramov.io"},{"name":"davidzilburg","email":"davidzilburg@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pretty-format_29.3.1_1667948181790_0.6288508562159885"},"_hasShrinkwrap":false},"29.4.0":{"name":"pretty-format","version":"29.4.0","repository":{"type":"git","url":"git+https://github.com/facebook/jest.git","directory":"packages/pretty-format"},"license":"MIT","description":"Stringify any JavaScript value.","main":"./build/index.js","types":"./build/index.d.ts","exports":{".":{"types":"./build/index.d.ts","default":"./build/index.js"},"./package.json":"./package.json"},"author":{"name":"James Kyle","email":"me@thejameskyle.com"},"dependencies":{"@jest/schemas":"^29.4.0","ansi-styles":"^5.0.0","react-is":"^18.0.0"},"devDependencies":{"@types/react":"^17.0.3","@types/react-is":"^17.0.0","@types/react-test-renderer":"17.0.2","immutable":"^4.0.0","jest-util":"^29.4.0","react":"17.0.2","react-dom":"^17.0.1","react-test-renderer":"17.0.2"},"engines":{"node":"^14.15.0 || ^16.10.0 || >=18.0.0"},"publishConfig":{"access":"public"},"gitHead":"4bc0e8acaf990e6618a7bed1dca67760c20bb12a","bugs":{"url":"https://github.com/facebook/jest/issues"},"homepage":"https://github.com/facebook/jest#readme","_id":"pretty-format@29.4.0","_nodeVersion":"16.19.0","_npmVersion":"lerna/1.13.0/node@v16.19.0+arm64 (darwin)","dist":{"integrity":"sha512-J+EVUPXIBHCdWAbvGBwXs0mk3ljGppoh/076g1S8qYS8nVG4u/yrhMvyTFHYYYKWnDdgRLExx0vA7pzxVGdlNw==","shasum":"766f071bb1c53f1ef8000c105bbeb649e86eb993","tarball":"http://localhost:4545/npm/registry/pretty-format/pretty-format-29.4.0.tgz","fileCount":16,"unpackedSize":234033,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCRiTUhJwsy3tpqFi3LgmWHzZv2C9AoyIK/P6TT39fnCAIge/DOl/yxucDRI1M/hp35T9Uy4OpJ1LEyDoh65lURTiE="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjz7k1ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmrZ0g/8DL41OgXsYlv7pvoiPP5MjGzu3gNhM4O7RtX80NPcTeyFrz23\r\n5IxfTSmEJBpyMis0jSZeFFQt7b3NWrVXCtXbspdg8udQDvG9dmwd/1NGHG3L\r\nJYCLzPtiLQpUSBqULYEFA7HeBJUGSAmrmc70a7JiCxRWlD6yfA8HmlumM3pZ\r\nIbRv7j+kqnIpMU1ofGDEebIxOgtmUkFb1N16y/5zXn4K5ldSvPhrfs1wnWLb\r\nHo4dcTTJYiZaW3wnVVCni1aQ7iCLh+4ELL7LPkFVbC0JRR4iRIR4km222klA\r\nHa3QLw/RhIIWYK8FD476rlyGe/iD1nrLPjDkNIArWLmNUKjAoGpNbsOP2q8Q\r\nKf6k11Knn3dJWv/cJbhttNGCoQwl4TfcmQcMaEMt1jM/S743hKGnMQJ/tAqR\r\nyucydvcWc/2c6iTeVpDtQFk4fptR+vYMW5vXkuvp9c5VEOyMuBYb9mkUCOZS\r\nsdNgywTrpsy4iWHZdUpQ5pc7/meUfgm1ZkBXugot1owNpxw8WF97tFLYrOYU\r\nEhuQdkTNjX/cRtwEVCZkFCd07k0muvWiUAE0/rs1FZCDmX+rnHUwJvZsyteD\r\nAIsNe77z6ydmXhwuu7zueZPBsE+pYNSbfHNEuQbx0utYB1pE2IDb8KNHalNG\r\n1PBGr+zF1rDSpTX7S1FlpdXKD131ZlG85Fc=\r\n=gG8a\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"simenb","email":"sbekkhus91@gmail.com"},"directories":{},"maintainers":[{"name":"scotthovestadt","email":"scott.hovestadt@gmail.com"},{"name":"rubennorte","email":"rubennorte@gmail.com"},{"name":"simenb","email":"sbekkhus91@gmail.com"},{"name":"fb","email":"opensource+npm@fb.com"},{"name":"aaronabramov","email":"aaron@abramov.io"},{"name":"davidzilburg","email":"davidzilburg@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pretty-format_29.4.0_1674557749379_0.08312055675861663"},"_hasShrinkwrap":false},"29.4.1":{"name":"pretty-format","version":"29.4.1","repository":{"type":"git","url":"git+https://github.com/facebook/jest.git","directory":"packages/pretty-format"},"license":"MIT","description":"Stringify any JavaScript value.","main":"./build/index.js","types":"./build/index.d.ts","exports":{".":{"types":"./build/index.d.ts","default":"./build/index.js"},"./package.json":"./package.json"},"author":{"name":"James Kyle","email":"me@thejameskyle.com"},"dependencies":{"@jest/schemas":"^29.4.0","ansi-styles":"^5.0.0","react-is":"^18.0.0"},"devDependencies":{"@types/react":"^17.0.3","@types/react-is":"^17.0.0","@types/react-test-renderer":"17.0.2","immutable":"^4.0.0","jest-util":"^29.4.1","react":"17.0.2","react-dom":"^17.0.1","react-test-renderer":"17.0.2"},"engines":{"node":"^14.15.0 || ^16.10.0 || >=18.0.0"},"publishConfig":{"access":"public"},"gitHead":"bc84c8a15649aaaefdd624dc83824518c17467ed","bugs":{"url":"https://github.com/facebook/jest/issues"},"homepage":"https://github.com/facebook/jest#readme","_id":"pretty-format@29.4.1","_nodeVersion":"16.19.0","_npmVersion":"lerna/1.13.0/node@v16.19.0+arm64 (darwin)","dist":{"integrity":"sha512-dt/Z761JUVsrIKaY215o1xQJBGlSmTx/h4cSqXqjHLnU1+Kt+mavVE7UgqJJO5ukx5HjSswHfmXz4LjS2oIJfg==","shasum":"0da99b532559097b8254298da7c75a0785b1751c","tarball":"http://localhost:4545/npm/registry/pretty-format/pretty-format-29.4.1.tgz","fileCount":16,"unpackedSize":234033,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICGk/D9xCljn9amHoHufX6GP9/HmzEcuFeqq5gXP+puoAiEA8ce/zwfIBahvpHMqHUZp7EcRi1QRpuN8wJmJd3LMr5U="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJj0pdzACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmpoDA/8DenCrElpvbJfq+W8zxkR2pZ7adytnxh1jz1hiaWKbY87VvrP\r\nJ8M/0jP2zVkWEIS0i3dY8wb80Ef3zyq3NzWb2qoAQj+xR3TimbZ0uEvVy0aS\r\nqbjfXxXpx2UqQPqDP+LWHwnOI1X12SxXBArTMnPWvpnmGjg2/eYiqQqgjqvW\r\n4UFs1tsMfoldsDSC4nAnXaDBex8k8SoLGyzWHLwJ8cFE/mLN8xzum3ji0HXf\r\nx4IC831ywN86qYDNSisC59wfNA1mgjUFp98rxsNtghPX+ID4+B0KnAdp6ow7\r\nb/NJQPfgxCeE+PZvHZiaUk58DbVm17/NAmx/dgfsa7dxHT764DcXB2j8Ywo9\r\nxfkPbE1HcWwKqNSiKCU8c1DCt3yoVf7b4LAe4MMnYHdsWvnGGDQy/vpYuEAe\r\nW6TeIY7TA4oRW2OUcdpuHgDFrBOn1/16xahfSIAlGIFr5pKvoinst0nJCSuv\r\n9SOI66OHOr0b4Eg5CLCj6kZYqJ/SC3NtRMHqBKFNlt5r5dZyujiKEcOjDfmS\r\nDtbvQO2jF0LZieKDbsB1z1CEKjD9X0GGynOYAslpc3Ahw2pKIQuy43+9FmRu\r\nQptVzfnLaO1Ebhx+Gj0vKBMIEncj4r9DMD0FPZ4iZGKBL/oUYH7wRonwSg/o\r\nGAhTymFz/Q77f5sK6qqfXNaEgh8CEzTPCYE=\r\n=EI9d\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"simenb","email":"sbekkhus91@gmail.com"},"directories":{},"maintainers":[{"name":"scotthovestadt","email":"scott.hovestadt@gmail.com"},{"name":"rubennorte","email":"rubennorte@gmail.com"},{"name":"simenb","email":"sbekkhus91@gmail.com"},{"name":"fb","email":"opensource+npm@fb.com"},{"name":"aaronabramov","email":"aaron@abramov.io"},{"name":"davidzilburg","email":"davidzilburg@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pretty-format_29.4.1_1674745715008_0.8630518276533083"},"_hasShrinkwrap":false},"29.4.2":{"name":"pretty-format","version":"29.4.2","repository":{"type":"git","url":"git+https://github.com/facebook/jest.git","directory":"packages/pretty-format"},"license":"MIT","description":"Stringify any JavaScript value.","main":"./build/index.js","types":"./build/index.d.ts","exports":{".":{"types":"./build/index.d.ts","default":"./build/index.js"},"./package.json":"./package.json"},"author":{"name":"James Kyle","email":"me@thejameskyle.com"},"dependencies":{"@jest/schemas":"^29.4.2","ansi-styles":"^5.0.0","react-is":"^18.0.0"},"devDependencies":{"@types/react":"^17.0.3","@types/react-is":"^17.0.0","@types/react-test-renderer":"17.0.2","immutable":"^4.0.0","jest-util":"^29.4.2","react":"17.0.2","react-dom":"^17.0.1","react-test-renderer":"17.0.2"},"engines":{"node":"^14.15.0 || ^16.10.0 || >=18.0.0"},"publishConfig":{"access":"public"},"gitHead":"f0fc92e8443f09546c7ec0472bf9bce44fe5898f","bugs":{"url":"https://github.com/facebook/jest/issues"},"homepage":"https://github.com/facebook/jest#readme","_id":"pretty-format@29.4.2","_nodeVersion":"16.19.0","_npmVersion":"lerna/1.13.0/node@v16.19.0+arm64 (darwin)","dist":{"integrity":"sha512-qKlHR8yFVCbcEWba0H0TOC8dnLlO4vPlyEjRPw31FZ2Rupy9nLa8ZLbYny8gWEl8CkEhJqAE6IzdNELTBVcBEg==","shasum":"64bf5ccc0d718c03027d94ac957bdd32b3fb2401","tarball":"http://localhost:4545/npm/registry/pretty-format/pretty-format-29.4.2.tgz","fileCount":15,"unpackedSize":60414,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHoHEMbQvmdadwzyjjhvxG7K4oFOclVcPtDLGCPLROt9AiEAwrUo8bgaVzwdSNMSrs+JlAoVoITMQBTMnKFe5vZA3N8="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJj4lX2ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmqAaA/9F2cA13ioJ8skbe0hMPJ/EdhNHM32sdfP0ndDWClv+T0yEwCY\r\njEC6ZQ3i7WSkdToHx+TuuvFp88CGEOiUK12nYUpTFOMZJ73lktsPl/hBikxq\r\ncO9jqzqjo0f3UT6QmssyD9JiBjwv1KDkmqnFGy946kZaA0nYaElD8NaZJiHw\r\nPTFSnw2T3Cl/S9/HpA7sICfxvxtFVVrjtDASo4l/6sQQjwrdFPON0kbqeKQf\r\n/ggpQCX1COr1910j+mX51YiA7RZq1XwsTjcEBpNV9oxjAvNdLvXWkrr93LwI\r\nLyaUUL5YM5HrL3ymEbxP7rbM4NkYdw9+1Bb9OuIABZCSSbetLu70lEIBKPwT\r\nLK8x3wtgIXoOF/KYmgVJeQIETLkuzX/f7FPpvY8Lt+w2IFazS8zb68MZKtJO\r\neOtcxrxYAvbKZ4llBmK94QK76zlUH1MEERYHAyIATcVhYl4NfRegrTWOutQ7\r\ncOKJWcophtlq6NLm3QqrkqD5rd1aap1+gErIUjVxAZQTJXsQn2yP5zmOsETn\r\nYatNcd/mINme0zaSL+g7bli93P/f5FQVoVXcsm4vx5eAkDZSFK1JQinoukf2\r\n4J1kCoc/RDAe67boR0RqJR5xALN2cu0wJnw7DOz0K5G0BnVvrzNe65ci7SO1\r\nzv+JcypNjgx+iBF/z1uNtm1FgqVhtxs8aj0=\r\n=E+VC\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"simenb","email":"sbekkhus91@gmail.com"},"directories":{},"maintainers":[{"name":"scotthovestadt","email":"scott.hovestadt@gmail.com"},{"name":"rubennorte","email":"rubennorte@gmail.com"},{"name":"simenb","email":"sbekkhus91@gmail.com"},{"name":"fb","email":"opensource+npm@fb.com"},{"name":"aaronabramov","email":"aaron@abramov.io"},{"name":"davidzilburg","email":"davidzilburg@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pretty-format_29.4.2_1675777525724_0.5004565008979032"},"_hasShrinkwrap":false},"29.4.3":{"name":"pretty-format","version":"29.4.3","repository":{"type":"git","url":"git+https://github.com/facebook/jest.git","directory":"packages/pretty-format"},"license":"MIT","description":"Stringify any JavaScript value.","main":"./build/index.js","types":"./build/index.d.ts","exports":{".":{"types":"./build/index.d.ts","default":"./build/index.js"},"./package.json":"./package.json"},"author":{"name":"James Kyle","email":"me@thejameskyle.com"},"dependencies":{"@jest/schemas":"^29.4.3","ansi-styles":"^5.0.0","react-is":"^18.0.0"},"devDependencies":{"@types/react":"^17.0.3","@types/react-is":"^17.0.0","@types/react-test-renderer":"17.0.2","immutable":"^4.0.0","jest-util":"^29.4.3","react":"17.0.2","react-dom":"^17.0.1","react-test-renderer":"17.0.2"},"engines":{"node":"^14.15.0 || ^16.10.0 || >=18.0.0"},"publishConfig":{"access":"public"},"gitHead":"a49c88610e49a3242576160740a32a2fe11161e1","bugs":{"url":"https://github.com/facebook/jest/issues"},"homepage":"https://github.com/facebook/jest#readme","_id":"pretty-format@29.4.3","_nodeVersion":"18.14.0","_npmVersion":"lerna/1.13.0/node@v18.14.0+arm64 (darwin)","dist":{"integrity":"sha512-cvpcHTc42lcsvOOAzd3XuNWTcvk1Jmnzqeu+WsOuiPmxUJTnkbAcFNsRKvEpBEUFVUgy/GTZLulZDcDEi+CIlA==","shasum":"25500ada21a53c9e8423205cf0337056b201244c","tarball":"http://localhost:4545/npm/registry/pretty-format/pretty-format-29.4.3.tgz","fileCount":15,"unpackedSize":60245,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHpVpaerrGTa5yYIL0lNclV7SIH/0jWSgmBOwtQULrMAAiAirATxDMBhqcxOcJnKgpGZwVQrxeS0ekHdj7LgXJ6idQ=="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJj7MigACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmpP6xAAjahk7im5xIgTsboiEN+/T4+V7P8ua5fMSGgV9OaaP8sIuxtV\r\n+yGSzsc2GFBuFUzR8GwkBQ08/Xd+7I37UHhqKfOt1SRQD+WhLMJy1tOEJQYG\r\nlyT2BhdmEeCVEerL4TOD6MWX6PhryogKP+5oJRQc3RIqVLKHXkcBct2wRzb2\r\ndWc/ZKbMaYjiS9NydobXH1ZgloUGEBasV8F9aFtAtQQWvlX9Sp0zXIu0YNap\r\nuaOryUSECJcyplh4Pkg4S/68dH7rroBb+Um1whZ7cF9PmOmmkER0hbM0xDrq\r\nVE/D9oJPAjQXCMwz0FiKkgFLmZRzurPyfzZfRXh9iiJpI3LVbI+6AWgtb4rt\r\nUFnY2kRNWVuhkla+2RjhHyCZeNGIUy/E8yvG2PLGEBCMFRgB63r/y3wKcS8w\r\nZy313mL3H3MYQPUdk5M+8kseFfza1gnfHuiTPpBRmhNqR+ZMFRvcP9N8PqQT\r\nQDjZsRrrqR02IO+RcitKKg8pDOWaXlfOfx+3zDYM9xOkGO2PKrLJFjiCoG+1\r\nIA7EyRGq0sTNwxP86rHPypnpciPAwPXXE+F7RhMr0nAhQnDEDoiQkxEkmzTW\r\ndQwOD4zuTYP7yipmyCgRhas4WOUwZYb1/13c7UsFzGYcYJbuzFlqmAo0ujA8\r\ndPBbu/wA0uZ/e/uyqQtGxNgHbjOeMUGr2CY=\r\n=GzxA\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"simenb","email":"sbekkhus91@gmail.com"},"directories":{},"maintainers":[{"name":"scotthovestadt","email":"scott.hovestadt@gmail.com"},{"name":"rubennorte","email":"rubennorte@gmail.com"},{"name":"simenb","email":"sbekkhus91@gmail.com"},{"name":"fb","email":"opensource+npm@fb.com"},{"name":"aaronabramov","email":"aaron@abramov.io"},{"name":"davidzilburg","email":"davidzilburg@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pretty-format_29.4.3_1676462240384_0.7010023448990954"},"_hasShrinkwrap":false},"29.5.0":{"name":"pretty-format","version":"29.5.0","repository":{"type":"git","url":"git+https://github.com/facebook/jest.git","directory":"packages/pretty-format"},"license":"MIT","description":"Stringify any JavaScript value.","main":"./build/index.js","types":"./build/index.d.ts","exports":{".":{"types":"./build/index.d.ts","default":"./build/index.js"},"./package.json":"./package.json"},"author":{"name":"James Kyle","email":"me@thejameskyle.com"},"dependencies":{"@jest/schemas":"^29.4.3","ansi-styles":"^5.0.0","react-is":"^18.0.0"},"devDependencies":{"@types/react":"^17.0.3","@types/react-is":"^17.0.0","@types/react-test-renderer":"17.0.2","immutable":"^4.0.0","jest-util":"^29.5.0","react":"17.0.2","react-dom":"^17.0.1","react-test-renderer":"17.0.2"},"engines":{"node":"^14.15.0 || ^16.10.0 || >=18.0.0"},"publishConfig":{"access":"public"},"gitHead":"39f3beda6b396665bebffab94e8d7c45be30454c","bugs":{"url":"https://github.com/facebook/jest/issues"},"homepage":"https://github.com/facebook/jest#readme","_id":"pretty-format@29.5.0","_nodeVersion":"18.14.2","_npmVersion":"lerna/1.13.0/node@v18.14.2+arm64 (darwin)","dist":{"integrity":"sha512-V2mGkI31qdttvTFX7Mt4efOqHXqJWMu4/r66Xh3Z3BwZaPfPJgp6/gbwoujRpPUtfEF6AUUWx3Jim3GCw5g/Qw==","shasum":"283134e74f70e2e3e7229336de0e4fce94ccde5a","tarball":"http://localhost:4545/npm/registry/pretty-format/pretty-format-29.5.0.tgz","fileCount":15,"unpackedSize":60245,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDUvtXo4dhiUnRPLlRKZ0Y2xEqT3yoaLXQwUL4nZmzRmgIgJJXfRXxW0Z4mwFmgJy8BJWoJ73gEBEMPPogr7tQ60ls="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJkBeuoACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmpVVw//f5EPJ+limL6GY+Q048Ri55+yK0YGaXffb1htzPO2h7GcmwMT\r\nK6rTDQkgu0y/GviLYdqEkDgbr+gNlf5KxIFXg+g/VWDgJqAM/1XqwzUCSMhN\r\nIfRuSkIVSk/5REOMvLS9Am8beRqLbMeDEjJtndr+4+o6Ky46tb6LREcz+Q4s\r\n2Oqw1WQe6PnfyFQl+hzoRonLOIO600BFdXjvmpGPE3Gl48WFSspgVi22aGlv\r\nbOMIJvaCalTbwcArhZZGMAM+CfDCbSepYpENfU6kqvwBw4gD8UaKHGl46cCx\r\no/DtemTJKK5kD9NX2WjwLIevmaaYNUuO7fbevJjo7s0whqo0W/eMz6Bz4JX3\r\nkORZ2UtGFWNVBoK0nYnXkT/5kisANlBB1uC01riGO+0vBn11Z2XG60i72Wf5\r\nOJFS/JujSHy9CDuJfmX1IjcrucZhn/9SNmnLgZUMGiRdYW6QwyOIWn049jgG\r\n/oH5dmTFE47P78Eqc2j/RKtASK/iAaCXLcXrY3MTuIq0rs645MDgyimam4pD\r\nqqKPfNSuSQ0HEgupx3uxa2tJ0setqZuxHMicSDFBsYztL9nVMVC0ipmsyv2+\r\nldfmXFfgeVQ61jmoLs2cGsREaW1WzzQhfLSsbcwInLkXaSWZb5Gu42ajrK96\r\n9/gjEDE0AJalrNnB1Hmb+LZja+LgPtU5KNw=\r\n=6b/r\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"simenb","email":"sbekkhus91@gmail.com"},"directories":{},"maintainers":[{"name":"scotthovestadt","email":"scott.hovestadt@gmail.com"},{"name":"rubennorte","email":"rubennorte@gmail.com"},{"name":"simenb","email":"sbekkhus91@gmail.com"},{"name":"fb","email":"opensource+npm@fb.com"},{"name":"aaronabramov","email":"aaron@abramov.io"},{"name":"davidzilburg","email":"davidzilburg@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pretty-format_29.5.0_1678109608260_0.5383222058354675"},"_hasShrinkwrap":false},"29.6.0":{"name":"pretty-format","version":"29.6.0","repository":{"type":"git","url":"git+https://github.com/facebook/jest.git","directory":"packages/pretty-format"},"license":"MIT","description":"Stringify any JavaScript value.","main":"./build/index.js","types":"./build/index.d.ts","exports":{".":{"types":"./build/index.d.ts","default":"./build/index.js"},"./package.json":"./package.json"},"author":{"name":"James Kyle","email":"me@thejameskyle.com"},"dependencies":{"@jest/schemas":"^29.6.0","ansi-styles":"^5.0.0","react-is":"^18.0.0"},"devDependencies":{"@types/react":"^17.0.3","@types/react-is":"^18.0.0","@types/react-test-renderer":"17.0.2","immutable":"^4.0.0","jest-util":"^29.6.0","react":"17.0.2","react-dom":"^17.0.1","react-test-renderer":"17.0.2"},"engines":{"node":"^14.15.0 || ^16.10.0 || >=18.0.0"},"publishConfig":{"access":"public"},"gitHead":"c1e5b8a38ef54bb138409f89831942ebf6a7a67e","bugs":{"url":"https://github.com/facebook/jest/issues"},"homepage":"https://github.com/facebook/jest#readme","_id":"pretty-format@29.6.0","_nodeVersion":"18.16.1","_npmVersion":"lerna/1.13.0/node@v18.16.1+arm64 (darwin)","dist":{"integrity":"sha512-XH+D4n7Ey0iSR6PdAnBs99cWMZdGsdKrR33iUHQNr79w1szKTCIZDVdXuccAsHVwDBp0XeWPfNEoaxP9EZgRmQ==","shasum":"c90c8f145187fe73240662527a513599c16f3b97","tarball":"http://localhost:4545/npm/registry/pretty-format/pretty-format-29.6.0.tgz","fileCount":15,"unpackedSize":60734,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCUGX8EvczR7GZpLsEz8F0B3s+CCA4MRMCY/7epMmI2pgIgXDneyUpU8r2Qk/6uQY9pCSOkkSN94a501SglN/vmAN8="}]},"_npmUser":{"name":"simenb","email":"sbekkhus91@gmail.com"},"directories":{},"maintainers":[{"name":"scotthovestadt","email":"scott.hovestadt@gmail.com"},{"name":"rubennorte","email":"rubennorte@gmail.com"},{"name":"simenb","email":"sbekkhus91@gmail.com"},{"name":"fb","email":"opensource+npm@fb.com"},{"name":"aaronabramov","email":"aaron@abramov.io"},{"name":"davidzilburg","email":"davidzilburg@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pretty-format_29.6.0_1688484345028_0.8853895362115405"},"_hasShrinkwrap":false},"29.6.1":{"name":"pretty-format","version":"29.6.1","repository":{"type":"git","url":"git+https://github.com/facebook/jest.git","directory":"packages/pretty-format"},"license":"MIT","description":"Stringify any JavaScript value.","main":"./build/index.js","types":"./build/index.d.ts","exports":{".":{"types":"./build/index.d.ts","default":"./build/index.js"},"./package.json":"./package.json"},"author":{"name":"James Kyle","email":"me@thejameskyle.com"},"dependencies":{"@jest/schemas":"^29.6.0","ansi-styles":"^5.0.0","react-is":"^18.0.0"},"devDependencies":{"@types/react":"^17.0.3","@types/react-is":"^18.0.0","@types/react-test-renderer":"17.0.2","immutable":"^4.0.0","jest-util":"^29.6.1","react":"17.0.2","react-dom":"^17.0.1","react-test-renderer":"17.0.2"},"engines":{"node":"^14.15.0 || ^16.10.0 || >=18.0.0"},"publishConfig":{"access":"public"},"gitHead":"1f019afdcdfc54a6664908bb45f343db4e3d0848","bugs":{"url":"https://github.com/facebook/jest/issues"},"homepage":"https://github.com/facebook/jest#readme","_id":"pretty-format@29.6.1","_nodeVersion":"18.16.1","_npmVersion":"lerna/1.13.0/node@v18.16.1+arm64 (darwin)","dist":{"integrity":"sha512-7jRj+yXO0W7e4/tSJKoR7HRIHLPPjtNaUGG2xxKQnGvPNRkgWcQ0AZX6P4KBRJN4FcTBWb3sa7DVUJmocYuoog==","shasum":"ec838c288850b7c4f9090b867c2d4f4edbfb0f3e","tarball":"http://localhost:4545/npm/registry/pretty-format/pretty-format-29.6.1.tgz","fileCount":15,"unpackedSize":60734,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC97ZlP7i/68rYh8+Ml/tyJVd74LqZcFmmayUnsNoWOZAIgNyGyViedGsLN3ywSd+y2+K68GMfUHoboUX46ASK7plo="}]},"_npmUser":{"name":"simenb","email":"sbekkhus91@gmail.com"},"directories":{},"maintainers":[{"name":"scotthovestadt","email":"scott.hovestadt@gmail.com"},{"name":"rubennorte","email":"rubennorte@gmail.com"},{"name":"simenb","email":"sbekkhus91@gmail.com"},{"name":"fb","email":"opensource+npm@fb.com"},{"name":"aaronabramov","email":"aaron@abramov.io"},{"name":"davidzilburg","email":"davidzilburg@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pretty-format_29.6.1_1688653097488_0.9030095453365572"},"_hasShrinkwrap":false},"29.6.2":{"name":"pretty-format","version":"29.6.2","repository":{"type":"git","url":"git+https://github.com/facebook/jest.git","directory":"packages/pretty-format"},"license":"MIT","description":"Stringify any JavaScript value.","main":"./build/index.js","types":"./build/index.d.ts","exports":{".":{"types":"./build/index.d.ts","default":"./build/index.js"},"./package.json":"./package.json"},"author":{"name":"James Kyle","email":"me@thejameskyle.com"},"dependencies":{"@jest/schemas":"^29.6.0","ansi-styles":"^5.0.0","react-is":"^18.0.0"},"devDependencies":{"@types/react":"^17.0.3","@types/react-is":"^18.0.0","@types/react-test-renderer":"17.0.2","immutable":"^4.0.0","jest-util":"^29.6.2","react":"17.0.2","react-dom":"^17.0.1","react-test-renderer":"17.0.2"},"engines":{"node":"^14.15.0 || ^16.10.0 || >=18.0.0"},"publishConfig":{"access":"public"},"gitHead":"0fd5b1c37555f485c56a6ad2d6b010a72204f9f6","bugs":{"url":"https://github.com/facebook/jest/issues"},"homepage":"https://github.com/facebook/jest#readme","_id":"pretty-format@29.6.2","_nodeVersion":"18.16.1","_npmVersion":"lerna/1.13.0/node@v18.16.1+arm64 (darwin)","dist":{"integrity":"sha512-1q0oC8eRveTg5nnBEWMXAU2qpv65Gnuf2eCQzSjxpWFkPaPARwqZZDGuNE0zPAZfTCHzIk3A8dIjwlQKKLphyg==","shasum":"3d5829261a8a4d89d8b9769064b29c50ed486a47","tarball":"http://localhost:4545/npm/registry/pretty-format/pretty-format-29.6.2.tgz","fileCount":15,"unpackedSize":60734,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCIp6bqp7VFMD53a1jLOR0bpu0Hg4KCBGJiQIBjyXjrvwIhAJmRG9sdAkcns1+7eYZSXqrAwLOIwRYpzb5k8ms0cA5X"}]},"_npmUser":{"name":"simenb","email":"sbekkhus91@gmail.com"},"directories":{},"maintainers":[{"name":"scotthovestadt","email":"scott.hovestadt@gmail.com"},{"name":"rubennorte","email":"rubennorte@gmail.com"},{"name":"simenb","email":"sbekkhus91@gmail.com"},{"name":"fb","email":"opensource+npm@fb.com"},{"name":"aaronabramov","email":"aaron@abramov.io"},{"name":"davidzilburg","email":"davidzilburg@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pretty-format_29.6.2_1690449689309_0.3925216201279702"},"_hasShrinkwrap":false},"29.6.3":{"name":"pretty-format","version":"29.6.3","repository":{"type":"git","url":"git+https://github.com/jestjs/jest.git","directory":"packages/pretty-format"},"license":"MIT","description":"Stringify any JavaScript value.","main":"./build/index.js","types":"./build/index.d.ts","exports":{".":{"types":"./build/index.d.ts","default":"./build/index.js"},"./package.json":"./package.json"},"author":{"name":"James Kyle","email":"me@thejameskyle.com"},"dependencies":{"@jest/schemas":"^29.6.3","ansi-styles":"^5.0.0","react-is":"^18.0.0"},"devDependencies":{"@types/react":"^17.0.3","@types/react-is":"^18.0.0","@types/react-test-renderer":"17.0.2","immutable":"^4.0.0","jest-util":"^29.6.3","react":"17.0.2","react-dom":"^17.0.1","react-test-renderer":"17.0.2"},"engines":{"node":"^14.15.0 || ^16.10.0 || >=18.0.0"},"publishConfig":{"access":"public"},"gitHead":"fb7d95c8af6e0d65a8b65348433d8a0ea0725b5b","bugs":{"url":"https://github.com/jestjs/jest/issues"},"homepage":"https://github.com/jestjs/jest#readme","_id":"pretty-format@29.6.3","_nodeVersion":"18.17.1","_npmVersion":"lerna/1.13.0/node@v18.17.1+arm64 (darwin)","dist":{"integrity":"sha512-ZsBgjVhFAj5KeK+nHfF1305/By3lechHQSMWCTl8iHSbfOm2TN5nHEtFc/+W7fAyUeCs2n5iow72gld4gW0xDw==","shasum":"d432bb4f1ca6f9463410c3fb25a0ba88e594ace7","tarball":"http://localhost:4545/npm/registry/pretty-format/pretty-format-29.6.3.tgz","fileCount":15,"unpackedSize":60732,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICSaRITgQNTVZi6tTnSUWR4oBdcEKX7FNBdumgX97YWAAiAImppFVadPZvDaG6ubPThZ16F4UJxkNMkJIUTcQ/i/wg=="}]},"_npmUser":{"name":"simenb","email":"sbekkhus91@gmail.com"},"directories":{},"maintainers":[{"name":"scotthovestadt","email":"scott.hovestadt@gmail.com"},{"name":"rubennorte","email":"rubennorte@gmail.com"},{"name":"simenb","email":"sbekkhus91@gmail.com"},{"name":"fb","email":"opensource+npm@fb.com"},{"name":"aaronabramov","email":"aaron@abramov.io"},{"name":"davidzilburg","email":"davidzilburg@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pretty-format_29.6.3_1692621548439_0.36589474846404335"},"_hasShrinkwrap":false},"29.7.0":{"name":"pretty-format","version":"29.7.0","repository":{"type":"git","url":"git+https://github.com/jestjs/jest.git","directory":"packages/pretty-format"},"license":"MIT","description":"Stringify any JavaScript value.","main":"./build/index.js","types":"./build/index.d.ts","exports":{".":{"types":"./build/index.d.ts","default":"./build/index.js"},"./package.json":"./package.json"},"author":{"name":"James Kyle","email":"me@thejameskyle.com"},"dependencies":{"@jest/schemas":"^29.6.3","ansi-styles":"^5.0.0","react-is":"^18.0.0"},"devDependencies":{"@types/react":"^17.0.3","@types/react-is":"^18.0.0","@types/react-test-renderer":"17.0.2","immutable":"^4.0.0","jest-util":"^29.7.0","react":"17.0.2","react-dom":"^17.0.1","react-test-renderer":"17.0.2"},"engines":{"node":"^14.15.0 || ^16.10.0 || >=18.0.0"},"publishConfig":{"access":"public"},"gitHead":"4e56991693da7cd4c3730dc3579a1dd1403ee630","bugs":{"url":"https://github.com/jestjs/jest/issues"},"homepage":"https://github.com/jestjs/jest#readme","_id":"pretty-format@29.7.0","_nodeVersion":"18.17.1","_npmVersion":"lerna/1.13.0/node@v18.17.1+arm64 (darwin)","dist":{"integrity":"sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==","shasum":"ca42c758310f365bfa71a0bda0a807160b776812","tarball":"http://localhost:4545/npm/registry/pretty-format/pretty-format-29.7.0.tgz","fileCount":15,"unpackedSize":60702,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCfteTkv4JMTuP3BM7i8HYJ2que/v1ACZwrl7IIown/NQIhAK3WlT58LYT7BI2HuxDyZVcwwke/6KkIM1zEWrLYF9rH"}]},"_npmUser":{"name":"simenb","email":"sbekkhus91@gmail.com"},"directories":{},"maintainers":[{"name":"simenb","email":"sbekkhus91@gmail.com"},{"name":"cpojer","email":"christoph.pojer@gmail.com"},{"name":"aaronabramov","email":"aaron@abramov.io"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pretty-format_29.7.0_1694501021685_0.1467621672358317"},"_hasShrinkwrap":false},"30.0.0-alpha.1":{"name":"pretty-format","version":"30.0.0-alpha.1","repository":{"type":"git","url":"git+https://github.com/jestjs/jest.git","directory":"packages/pretty-format"},"license":"MIT","description":"Stringify any JavaScript value.","main":"./build/index.js","types":"./build/index.d.ts","exports":{".":{"types":"./build/index.d.ts","require":"./build/index.js","import":"./build/index.mjs","default":"./build/index.js"},"./package.json":"./package.json"},"author":{"name":"James Kyle","email":"me@thejameskyle.com"},"dependencies":{"@jest/schemas":"30.0.0-alpha.1","ansi-styles":"^5.0.0","react-is":"^18.0.0"},"devDependencies":{"@types/react":"^18.2.0","@types/react-is":"^18.0.0","@types/react-test-renderer":"^18.0.1","immutable":"^4.0.0","jest-util":"30.0.0-alpha.1","react":"18.2.0","react-dom":"18.2.0","react-test-renderer":"18.2.0"},"engines":{"node":"^16.10.0 || ^18.12.0 || >=20.0.0"},"publishConfig":{"access":"public"},"gitHead":"d005cb2505c041583e0c5636d006e08666a54b63","readme":"# pretty-format\n\nStringify any JavaScript value.\n\n- Serialize built-in JavaScript types.\n- Serialize application-specific data types with built-in or user-defined plugins.\n\n## Installation\n\n```sh\n$ yarn add pretty-format\n```\n\n## Usage\n\n```js\nconst {format: prettyFormat} = require('pretty-format'); // CommonJS\n```\n\n```js\nimport {format as prettyFormat} from 'pretty-format'; // ES2015 modules\n```\n\n```js\nconst val = {object: {}};\nval.circularReference = val;\nval[Symbol('foo')] = 'foo';\nval.map = new Map([['prop', 'value']]);\nval.array = [-0, Infinity, NaN];\n\nconsole.log(prettyFormat(val));\n/*\nObject {\n \"array\": Array [\n -0,\n Infinity,\n NaN,\n ],\n \"circularReference\": [Circular],\n \"map\": Map {\n \"prop\" => \"value\",\n },\n \"object\": Object {},\n Symbol(foo): \"foo\",\n}\n*/\n```\n\n## Usage with options\n\n```js\nfunction onClick() {}\n\nconsole.log(prettyFormat(onClick));\n/*\n[Function onClick]\n*/\n\nconst options = {\n printFunctionName: false,\n};\nconsole.log(prettyFormat(onClick, options));\n/*\n[Function]\n*/\n```\n\n\n| key | type | default | description |\n| :-------------------- | :--------------- | :---------- | :-------------------------------------------------------------------------------------- |\n| `callToJSON` | `boolean` | `true` | call `toJSON` method (if it exists) on objects |\n| `compareKeys` | `function\\|null` | `undefined` | compare function used when sorting object keys, `null` can be used to skip over sorting |\n| `escapeRegex` | `boolean` | `false` | escape special characters in regular expressions |\n| `escapeString` | `boolean` | `true` | escape special characters in strings |\n| `highlight` | `boolean` | `false` | highlight syntax with colors in terminal (some plugins) |\n| `indent` | `number` | `2` | spaces in each level of indentation |\n| `maxDepth` | `number` | `Infinity` | levels to print in arrays, objects, elements, and so on |\n| `maxWidth` | `number` | `Infinity` | number of elements to print in arrays, sets, and so on |\n| `min` | `boolean` | `false` | minimize added space: no indentation nor line breaks |\n| `plugins` | `array` | `[]` | plugins to serialize application-specific data types |\n| `printBasicPrototype` | `boolean` | `false` | print the prototype for plain objects and arrays |\n| `printFunctionName` | `boolean` | `true` | include or omit the name of a function |\n| `theme` | `object` | | colors to highlight syntax in terminal |\n\nProperty values of `theme` are from [ansi-styles colors](https://github.com/chalk/ansi-styles#colors)\n\n```js\nconst DEFAULT_THEME = {\n comment: 'gray',\n content: 'reset',\n prop: 'yellow',\n tag: 'cyan',\n value: 'green',\n};\n```\n\n## Usage with plugins\n\nThe `pretty-format` package provides some built-in plugins, including:\n\n- `ReactElement` for elements from `react`\n- `ReactTestComponent` for test objects from `react-test-renderer`\n\n```js\n// CommonJS\nconst React = require('react');\nconst renderer = require('react-test-renderer');\nconst {format: prettyFormat, plugins} = require('pretty-format');\n\nconst {ReactElement, ReactTestComponent} = plugins;\n```\n\n```js\n// ES2015 modules and destructuring assignment\nimport React from 'react';\nimport renderer from 'react-test-renderer';\nimport {plugins, format as prettyFormat} from 'pretty-format';\n\nconst {ReactElement, ReactTestComponent} = plugins;\n```\n\n```js\nconst onClick = () => {};\nconst element = React.createElement('button', {onClick}, 'Hello World');\n\nconst formatted1 = prettyFormat(element, {\n plugins: [ReactElement],\n printFunctionName: false,\n});\nconst formatted2 = prettyFormat(renderer.create(element).toJSON(), {\n plugins: [ReactTestComponent],\n printFunctionName: false,\n});\n/*\n\n*/\n```\n\n## Usage in Jest\n\nFor snapshot tests, Jest uses `pretty-format` with options that include some of its built-in plugins. For this purpose, plugins are also known as **snapshot serializers**.\n\nTo serialize application-specific data types, you can add modules to `devDependencies` of a project, and then:\n\nIn an **individual** test file, you can add a module as follows. It precedes any modules from Jest configuration.\n\n```js\nimport serializer from 'my-serializer-module';\nexpect.addSnapshotSerializer(serializer);\n\n// tests which have `expect(value).toMatchSnapshot()` assertions\n```\n\nFor **all** test files, you can specify modules in Jest configuration. They precede built-in plugins for React, HTML, and Immutable.js data types. For example, in a `package.json` file:\n\n```json\n{\n \"jest\": {\n \"snapshotSerializers\": [\"my-serializer-module\"]\n }\n}\n```\n\n## Writing plugins\n\nA plugin is a JavaScript object.\n\nIf `options` has a `plugins` array: for the first plugin whose `test(val)` method returns a truthy value, then `prettyFormat(val, options)` returns the result from either:\n\n- `serialize(val, …)` method of the **improved** interface (available in **version 21** or later)\n- `print(val, …)` method of the **original** interface (if plugin does not have `serialize` method)\n\n### test\n\nWrite `test` so it can receive `val` argument of any type. To serialize **objects** which have certain properties, then a guarded expression like `val != null && …` or more concise `val && …` prevents the following errors:\n\n- `TypeError: Cannot read property 'whatever' of null`\n- `TypeError: Cannot read property 'whatever' of undefined`\n\nFor example, `test` method of built-in `ReactElement` plugin:\n\n```js\nconst elementSymbol = Symbol.for('react.element');\nconst test = val => val && val.$$typeof === elementSymbol;\n```\n\nPay attention to efficiency in `test` because `pretty-format` calls it often.\n\n### serialize\n\nThe **improved** interface is available in **version 21** or later.\n\nWrite `serialize` to return a string, given the arguments:\n\n- `val` which “passed the test”\n- unchanging `config` object: derived from `options`\n- current `indentation` string: concatenate to `indent` from `config`\n- current `depth` number: compare to `maxDepth` from `config`\n- current `refs` array: find circular references in objects\n- `printer` callback function: serialize children\n\n### config\n\n\n| key | type | description |\n| :------------------ | :--------------- | :-------------------------------------------------------------------------------------- |\n| `callToJSON` | `boolean` | call `toJSON` method (if it exists) on objects |\n| `compareKeys` | `function\\|null` | compare function used when sorting object keys, `null` can be used to skip over sorting |\n| `colors` | `Object` | escape codes for colors to highlight syntax |\n| `escapeRegex` | `boolean` | escape special characters in regular expressions |\n| `escapeString` | `boolean` | escape special characters in strings |\n| `indent` | `string` | spaces in each level of indentation |\n| `maxDepth` | `number` | levels to print in arrays, objects, elements, and so on |\n| `min` | `boolean` | minimize added space: no indentation nor line breaks |\n| `plugins` | `array` | plugins to serialize application-specific data types |\n| `printFunctionName` | `boolean` | include or omit the name of a function |\n| `spacingInner` | `string` | spacing to separate items in a list |\n| `spacingOuter` | `string` | spacing to enclose a list of items |\n\nEach property of `colors` in `config` corresponds to a property of `theme` in `options`:\n\n- the key is the same (for example, `tag`)\n- the value in `colors` is a object with `open` and `close` properties whose values are escape codes from [ansi-styles](https://github.com/chalk/ansi-styles) for the color value in `theme` (for example, `'cyan'`)\n\nSome properties in `config` are derived from `min` in `options`:\n\n- `spacingInner` and `spacingOuter` are **newline** if `min` is `false`\n- `spacingInner` is **space** and `spacingOuter` is **empty string** if `min` is `true`\n\n### Example of serialize and test\n\nThis plugin is a pattern you can apply to serialize composite data types. Side note: `pretty-format` does not need a plugin to serialize arrays.\n\n```js\n// We reused more code when we factored out a function for child items\n// that is independent of depth, name, and enclosing punctuation (see below).\nconst SEPARATOR = ',';\nfunction serializeItems(items, config, indentation, depth, refs, printer) {\n if (items.length === 0) {\n return '';\n }\n const indentationItems = indentation + config.indent;\n return (\n config.spacingOuter +\n items\n .map(\n item =>\n indentationItems +\n printer(item, config, indentationItems, depth, refs), // callback\n )\n .join(SEPARATOR + config.spacingInner) +\n (config.min ? '' : SEPARATOR) + // following the last item\n config.spacingOuter +\n indentation\n );\n}\n\nconst plugin = {\n test(val) {\n return Array.isArray(val);\n },\n serialize(array, config, indentation, depth, refs, printer) {\n const name = array.constructor.name;\n return ++depth > config.maxDepth\n ? `[${name}]`\n : `${config.min ? '' : `${name} `}[${serializeItems(\n array,\n config,\n indentation,\n depth,\n refs,\n printer,\n )}]`;\n },\n};\n```\n\n```js\nconst val = {\n filter: 'completed',\n items: [\n {\n text: 'Write test',\n completed: true,\n },\n {\n text: 'Write serialize',\n completed: true,\n },\n ],\n};\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n plugins: [plugin],\n }),\n);\n/*\nObject {\n \"filter\": \"completed\",\n \"items\": Array [\n Object {\n \"completed\": true,\n \"text\": \"Write test\",\n },\n Object {\n \"completed\": true,\n \"text\": \"Write serialize\",\n },\n ],\n}\n*/\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n indent: 4,\n plugins: [plugin],\n }),\n);\n/*\nObject {\n \"filter\": \"completed\",\n \"items\": Array [\n Object {\n \"completed\": true,\n \"text\": \"Write test\",\n },\n Object {\n \"completed\": true,\n \"text\": \"Write serialize\",\n },\n ],\n}\n*/\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n maxDepth: 1,\n plugins: [plugin],\n }),\n);\n/*\nObject {\n \"filter\": \"completed\",\n \"items\": [Array],\n}\n*/\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n min: true,\n plugins: [plugin],\n }),\n);\n/*\n{\"filter\": \"completed\", \"items\": [{\"completed\": true, \"text\": \"Write test\"}, {\"completed\": true, \"text\": \"Write serialize\"}]}\n*/\n```\n\n### print\n\nThe **original** interface is adequate for plugins:\n\n- that **do not** depend on options other than `highlight` or `min`\n- that **do not** depend on `depth` or `refs` in recursive traversal, and\n- if values either\n - do **not** require indentation, or\n - do **not** occur as children of JavaScript data structures (for example, array)\n\nWrite `print` to return a string, given the arguments:\n\n- `val` which “passed the test”\n- current `printer(valChild)` callback function: serialize children\n- current `indenter(lines)` callback function: indent lines at the next level\n- unchanging `config` object: derived from `options`\n- unchanging `colors` object: derived from `options`\n\nThe 3 properties of `config` are `min` in `options` and:\n\n- `spacing` and `edgeSpacing` are **newline** if `min` is `false`\n- `spacing` is **space** and `edgeSpacing` is **empty string** if `min` is `true`\n\nEach property of `colors` corresponds to a property of `theme` in `options`:\n\n- the key is the same (for example, `tag`)\n- the value in `colors` is a object with `open` and `close` properties whose values are escape codes from [ansi-styles](https://github.com/chalk/ansi-styles) for the color value in `theme` (for example, `'cyan'`)\n\n### Example of print and test\n\nThis plugin prints functions with the **number of named arguments** excluding rest argument.\n\n```js\nconst plugin = {\n print(val) {\n return `[Function ${val.name || 'anonymous'} ${val.length}]`;\n },\n test(val) {\n return typeof val === 'function';\n },\n};\n```\n\n```js\nconst val = {\n onClick(event) {},\n render() {},\n};\n\nprettyFormat(val, {\n plugins: [plugin],\n});\n/*\nObject {\n \"onClick\": [Function onClick 1],\n \"render\": [Function render 0],\n}\n*/\n\nprettyFormat(val);\n/*\nObject {\n \"onClick\": [Function onClick],\n \"render\": [Function render],\n}\n*/\n```\n\nThis plugin **ignores** the `printFunctionName` option. That limitation of the original `print` interface is a reason to use the improved `serialize` interface, described above.\n\n```js\nprettyFormat(val, {\n plugins: [pluginOld],\n printFunctionName: false,\n});\n/*\nObject {\n \"onClick\": [Function onClick 1],\n \"render\": [Function render 0],\n}\n*/\n\nprettyFormat(val, {\n printFunctionName: false,\n});\n/*\nObject {\n \"onClick\": [Function],\n \"render\": [Function],\n}\n*/\n```\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/jestjs/jest/issues"},"homepage":"https://github.com/jestjs/jest#readme","_id":"pretty-format@30.0.0-alpha.1","_nodeVersion":"20.9.0","_npmVersion":"lerna/1.13.0/node@v20.9.0+arm64 (darwin)","dist":{"integrity":"sha512-V56m4hqT/PwVCxyuNDUVZlCiYgP5KhN2vRl0DLnILQ7O0BvS/t3wXaZ9UX+TZhYesdq7ROHMiMO9JySieoDBXQ==","shasum":"ce4eb0a89959c3bcfd5d590acf90666ba5a92f31","tarball":"http://localhost:4545/npm/registry/pretty-format/pretty-format-30.0.0-alpha.1.tgz","fileCount":6,"unpackedSize":60189,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHko+iYZZKh9AaLB6LLKflvJCu1suw1WIIzBHIzV//zLAiAEieUtPHU0E/WKhCEJjuzn19EJycYX71cfQfOWR0m9bg=="}]},"_npmUser":{"name":"simenb","email":"sbekkhus91@gmail.com"},"directories":{},"maintainers":[{"name":"simenb","email":"sbekkhus91@gmail.com"},{"name":"cpojer","email":"christoph.pojer@gmail.com"},{"name":"aaronabramov","email":"aaron@abramov.io"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pretty-format_30.0.0-alpha.1_1698672788870_0.7112117761424848"},"_hasShrinkwrap":false},"30.0.0-alpha.2":{"name":"pretty-format","version":"30.0.0-alpha.2","repository":{"type":"git","url":"git+https://github.com/jestjs/jest.git","directory":"packages/pretty-format"},"license":"MIT","description":"Stringify any JavaScript value.","main":"./build/index.js","types":"./build/index.d.ts","exports":{".":{"types":"./build/index.d.ts","require":"./build/index.js","import":"./build/index.mjs","default":"./build/index.js"},"./package.json":"./package.json"},"author":{"name":"James Kyle","email":"me@thejameskyle.com"},"dependencies":{"@jest/schemas":"30.0.0-alpha.2","ansi-styles":"^5.0.0","react-is":"^18.0.0"},"devDependencies":{"@types/react":"^18.2.0","@types/react-is":"^18.0.0","@types/react-test-renderer":"^18.0.1","immutable":"^4.0.0","jest-util":"30.0.0-alpha.2","react":"18.2.0","react-dom":"18.2.0","react-test-renderer":"18.2.0"},"engines":{"node":"^16.10.0 || ^18.12.0 || >=20.0.0"},"publishConfig":{"access":"public"},"gitHead":"c04d13d7abd22e47b0997f6027886aed225c9ce4","readme":"# pretty-format\n\nStringify any JavaScript value.\n\n- Serialize built-in JavaScript types.\n- Serialize application-specific data types with built-in or user-defined plugins.\n\n## Installation\n\n```sh\n$ yarn add pretty-format\n```\n\n## Usage\n\n```js\nconst {format: prettyFormat} = require('pretty-format'); // CommonJS\n```\n\n```js\nimport {format as prettyFormat} from 'pretty-format'; // ES2015 modules\n```\n\n```js\nconst val = {object: {}};\nval.circularReference = val;\nval[Symbol('foo')] = 'foo';\nval.map = new Map([['prop', 'value']]);\nval.array = [-0, Infinity, NaN];\n\nconsole.log(prettyFormat(val));\n/*\nObject {\n \"array\": Array [\n -0,\n Infinity,\n NaN,\n ],\n \"circularReference\": [Circular],\n \"map\": Map {\n \"prop\" => \"value\",\n },\n \"object\": Object {},\n Symbol(foo): \"foo\",\n}\n*/\n```\n\n## Usage with options\n\n```js\nfunction onClick() {}\n\nconsole.log(prettyFormat(onClick));\n/*\n[Function onClick]\n*/\n\nconst options = {\n printFunctionName: false,\n};\nconsole.log(prettyFormat(onClick, options));\n/*\n[Function]\n*/\n```\n\n\n| key | type | default | description |\n| :-------------------- | :--------------- | :---------- | :-------------------------------------------------------------------------------------- |\n| `callToJSON` | `boolean` | `true` | call `toJSON` method (if it exists) on objects |\n| `compareKeys` | `function\\|null` | `undefined` | compare function used when sorting object keys, `null` can be used to skip over sorting |\n| `escapeRegex` | `boolean` | `false` | escape special characters in regular expressions |\n| `escapeString` | `boolean` | `true` | escape special characters in strings |\n| `highlight` | `boolean` | `false` | highlight syntax with colors in terminal (some plugins) |\n| `indent` | `number` | `2` | spaces in each level of indentation |\n| `maxDepth` | `number` | `Infinity` | levels to print in arrays, objects, elements, and so on |\n| `maxWidth` | `number` | `Infinity` | number of elements to print in arrays, sets, and so on |\n| `min` | `boolean` | `false` | minimize added space: no indentation nor line breaks |\n| `plugins` | `array` | `[]` | plugins to serialize application-specific data types |\n| `printBasicPrototype` | `boolean` | `false` | print the prototype for plain objects and arrays |\n| `printFunctionName` | `boolean` | `true` | include or omit the name of a function |\n| `theme` | `object` | | colors to highlight syntax in terminal |\n\nProperty values of `theme` are from [ansi-styles colors](https://github.com/chalk/ansi-styles#colors)\n\n```js\nconst DEFAULT_THEME = {\n comment: 'gray',\n content: 'reset',\n prop: 'yellow',\n tag: 'cyan',\n value: 'green',\n};\n```\n\n## Usage with plugins\n\nThe `pretty-format` package provides some built-in plugins, including:\n\n- `ReactElement` for elements from `react`\n- `ReactTestComponent` for test objects from `react-test-renderer`\n\n```js\n// CommonJS\nconst React = require('react');\nconst renderer = require('react-test-renderer');\nconst {format: prettyFormat, plugins} = require('pretty-format');\n\nconst {ReactElement, ReactTestComponent} = plugins;\n```\n\n```js\n// ES2015 modules and destructuring assignment\nimport React from 'react';\nimport renderer from 'react-test-renderer';\nimport {plugins, format as prettyFormat} from 'pretty-format';\n\nconst {ReactElement, ReactTestComponent} = plugins;\n```\n\n```js\nconst onClick = () => {};\nconst element = React.createElement('button', {onClick}, 'Hello World');\n\nconst formatted1 = prettyFormat(element, {\n plugins: [ReactElement],\n printFunctionName: false,\n});\nconst formatted2 = prettyFormat(renderer.create(element).toJSON(), {\n plugins: [ReactTestComponent],\n printFunctionName: false,\n});\n/*\n\n*/\n```\n\n## Usage in Jest\n\nFor snapshot tests, Jest uses `pretty-format` with options that include some of its built-in plugins. For this purpose, plugins are also known as **snapshot serializers**.\n\nTo serialize application-specific data types, you can add modules to `devDependencies` of a project, and then:\n\nIn an **individual** test file, you can add a module as follows. It precedes any modules from Jest configuration.\n\n```js\nimport serializer from 'my-serializer-module';\nexpect.addSnapshotSerializer(serializer);\n\n// tests which have `expect(value).toMatchSnapshot()` assertions\n```\n\nFor **all** test files, you can specify modules in Jest configuration. They precede built-in plugins for React, HTML, and Immutable.js data types. For example, in a `package.json` file:\n\n```json\n{\n \"jest\": {\n \"snapshotSerializers\": [\"my-serializer-module\"]\n }\n}\n```\n\n## Writing plugins\n\nA plugin is a JavaScript object.\n\nIf `options` has a `plugins` array: for the first plugin whose `test(val)` method returns a truthy value, then `prettyFormat(val, options)` returns the result from either:\n\n- `serialize(val, …)` method of the **improved** interface (available in **version 21** or later)\n- `print(val, …)` method of the **original** interface (if plugin does not have `serialize` method)\n\n### test\n\nWrite `test` so it can receive `val` argument of any type. To serialize **objects** which have certain properties, then a guarded expression like `val != null && …` or more concise `val && …` prevents the following errors:\n\n- `TypeError: Cannot read property 'whatever' of null`\n- `TypeError: Cannot read property 'whatever' of undefined`\n\nFor example, `test` method of built-in `ReactElement` plugin:\n\n```js\nconst elementSymbol = Symbol.for('react.element');\nconst test = val => val && val.$$typeof === elementSymbol;\n```\n\nPay attention to efficiency in `test` because `pretty-format` calls it often.\n\n### serialize\n\nThe **improved** interface is available in **version 21** or later.\n\nWrite `serialize` to return a string, given the arguments:\n\n- `val` which “passed the test”\n- unchanging `config` object: derived from `options`\n- current `indentation` string: concatenate to `indent` from `config`\n- current `depth` number: compare to `maxDepth` from `config`\n- current `refs` array: find circular references in objects\n- `printer` callback function: serialize children\n\n### config\n\n\n| key | type | description |\n| :------------------ | :--------------- | :-------------------------------------------------------------------------------------- |\n| `callToJSON` | `boolean` | call `toJSON` method (if it exists) on objects |\n| `compareKeys` | `function\\|null` | compare function used when sorting object keys, `null` can be used to skip over sorting |\n| `colors` | `Object` | escape codes for colors to highlight syntax |\n| `escapeRegex` | `boolean` | escape special characters in regular expressions |\n| `escapeString` | `boolean` | escape special characters in strings |\n| `indent` | `string` | spaces in each level of indentation |\n| `maxDepth` | `number` | levels to print in arrays, objects, elements, and so on |\n| `min` | `boolean` | minimize added space: no indentation nor line breaks |\n| `plugins` | `array` | plugins to serialize application-specific data types |\n| `printFunctionName` | `boolean` | include or omit the name of a function |\n| `spacingInner` | `string` | spacing to separate items in a list |\n| `spacingOuter` | `string` | spacing to enclose a list of items |\n\nEach property of `colors` in `config` corresponds to a property of `theme` in `options`:\n\n- the key is the same (for example, `tag`)\n- the value in `colors` is a object with `open` and `close` properties whose values are escape codes from [ansi-styles](https://github.com/chalk/ansi-styles) for the color value in `theme` (for example, `'cyan'`)\n\nSome properties in `config` are derived from `min` in `options`:\n\n- `spacingInner` and `spacingOuter` are **newline** if `min` is `false`\n- `spacingInner` is **space** and `spacingOuter` is **empty string** if `min` is `true`\n\n### Example of serialize and test\n\nThis plugin is a pattern you can apply to serialize composite data types. Side note: `pretty-format` does not need a plugin to serialize arrays.\n\n```js\n// We reused more code when we factored out a function for child items\n// that is independent of depth, name, and enclosing punctuation (see below).\nconst SEPARATOR = ',';\nfunction serializeItems(items, config, indentation, depth, refs, printer) {\n if (items.length === 0) {\n return '';\n }\n const indentationItems = indentation + config.indent;\n return (\n config.spacingOuter +\n items\n .map(\n item =>\n indentationItems +\n printer(item, config, indentationItems, depth, refs), // callback\n )\n .join(SEPARATOR + config.spacingInner) +\n (config.min ? '' : SEPARATOR) + // following the last item\n config.spacingOuter +\n indentation\n );\n}\n\nconst plugin = {\n test(val) {\n return Array.isArray(val);\n },\n serialize(array, config, indentation, depth, refs, printer) {\n const name = array.constructor.name;\n return ++depth > config.maxDepth\n ? `[${name}]`\n : `${config.min ? '' : `${name} `}[${serializeItems(\n array,\n config,\n indentation,\n depth,\n refs,\n printer,\n )}]`;\n },\n};\n```\n\n```js\nconst val = {\n filter: 'completed',\n items: [\n {\n text: 'Write test',\n completed: true,\n },\n {\n text: 'Write serialize',\n completed: true,\n },\n ],\n};\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n plugins: [plugin],\n }),\n);\n/*\nObject {\n \"filter\": \"completed\",\n \"items\": Array [\n Object {\n \"completed\": true,\n \"text\": \"Write test\",\n },\n Object {\n \"completed\": true,\n \"text\": \"Write serialize\",\n },\n ],\n}\n*/\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n indent: 4,\n plugins: [plugin],\n }),\n);\n/*\nObject {\n \"filter\": \"completed\",\n \"items\": Array [\n Object {\n \"completed\": true,\n \"text\": \"Write test\",\n },\n Object {\n \"completed\": true,\n \"text\": \"Write serialize\",\n },\n ],\n}\n*/\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n maxDepth: 1,\n plugins: [plugin],\n }),\n);\n/*\nObject {\n \"filter\": \"completed\",\n \"items\": [Array],\n}\n*/\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n min: true,\n plugins: [plugin],\n }),\n);\n/*\n{\"filter\": \"completed\", \"items\": [{\"completed\": true, \"text\": \"Write test\"}, {\"completed\": true, \"text\": \"Write serialize\"}]}\n*/\n```\n\n### print\n\nThe **original** interface is adequate for plugins:\n\n- that **do not** depend on options other than `highlight` or `min`\n- that **do not** depend on `depth` or `refs` in recursive traversal, and\n- if values either\n - do **not** require indentation, or\n - do **not** occur as children of JavaScript data structures (for example, array)\n\nWrite `print` to return a string, given the arguments:\n\n- `val` which “passed the test”\n- current `printer(valChild)` callback function: serialize children\n- current `indenter(lines)` callback function: indent lines at the next level\n- unchanging `config` object: derived from `options`\n- unchanging `colors` object: derived from `options`\n\nThe 3 properties of `config` are `min` in `options` and:\n\n- `spacing` and `edgeSpacing` are **newline** if `min` is `false`\n- `spacing` is **space** and `edgeSpacing` is **empty string** if `min` is `true`\n\nEach property of `colors` corresponds to a property of `theme` in `options`:\n\n- the key is the same (for example, `tag`)\n- the value in `colors` is a object with `open` and `close` properties whose values are escape codes from [ansi-styles](https://github.com/chalk/ansi-styles) for the color value in `theme` (for example, `'cyan'`)\n\n### Example of print and test\n\nThis plugin prints functions with the **number of named arguments** excluding rest argument.\n\n```js\nconst plugin = {\n print(val) {\n return `[Function ${val.name || 'anonymous'} ${val.length}]`;\n },\n test(val) {\n return typeof val === 'function';\n },\n};\n```\n\n```js\nconst val = {\n onClick(event) {},\n render() {},\n};\n\nprettyFormat(val, {\n plugins: [plugin],\n});\n/*\nObject {\n \"onClick\": [Function onClick 1],\n \"render\": [Function render 0],\n}\n*/\n\nprettyFormat(val);\n/*\nObject {\n \"onClick\": [Function onClick],\n \"render\": [Function render],\n}\n*/\n```\n\nThis plugin **ignores** the `printFunctionName` option. That limitation of the original `print` interface is a reason to use the improved `serialize` interface, described above.\n\n```js\nprettyFormat(val, {\n plugins: [pluginOld],\n printFunctionName: false,\n});\n/*\nObject {\n \"onClick\": [Function onClick 1],\n \"render\": [Function render 0],\n}\n*/\n\nprettyFormat(val, {\n printFunctionName: false,\n});\n/*\nObject {\n \"onClick\": [Function],\n \"render\": [Function],\n}\n*/\n```\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/jestjs/jest/issues"},"homepage":"https://github.com/jestjs/jest#readme","_id":"pretty-format@30.0.0-alpha.2","_nodeVersion":"20.9.0","_npmVersion":"lerna/2.7.0/node@v20.9.0+arm64 (darwin)","dist":{"integrity":"sha512-9preHaHWIBEtQOkuN0vpCgfTo8X3vlWmDdCQHA1hSJ5vKNA1EGFr7iEQZDFLdqYe6DeJChdBqi+A+VFV98QGXQ==","shasum":"f69024bc3cc0398fa4d86a9b44c32028006e94ea","tarball":"http://localhost:4545/npm/registry/pretty-format/pretty-format-30.0.0-alpha.2.tgz","fileCount":6,"unpackedSize":60190,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC6m5A7+RlxrEoVJm0p6UjOJkzHz+qCvWQNfmwMYUt8+gIgBLMNC4Gs26NS5bcJnM5dKnJTDjDzJNSOwHcjkCJl42U="}]},"_npmUser":{"name":"simenb","email":"sbekkhus91@gmail.com"},"directories":{},"maintainers":[{"name":"simenb","email":"sbekkhus91@gmail.com"},{"name":"cpojer","email":"christoph.pojer@gmail.com"},{"name":"aaronabramov","email":"aaron@abramov.io"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pretty-format_30.0.0-alpha.2_1700126899059_0.350975848984892"},"_hasShrinkwrap":false},"30.0.0-alpha.3":{"name":"pretty-format","version":"30.0.0-alpha.3","repository":{"type":"git","url":"git+https://github.com/jestjs/jest.git","directory":"packages/pretty-format"},"license":"MIT","description":"Stringify any JavaScript value.","main":"./build/index.js","types":"./build/index.d.ts","exports":{".":{"types":"./build/index.d.ts","require":"./build/index.js","import":"./build/index.mjs","default":"./build/index.js"},"./package.json":"./package.json"},"author":{"name":"James Kyle","email":"me@thejameskyle.com"},"dependencies":{"@jest/schemas":"30.0.0-alpha.3","ansi-styles":"^5.0.0","react-is":"^18.0.0"},"devDependencies":{"@types/react":"^18.2.0","@types/react-is":"^18.0.0","@types/react-test-renderer":"^18.0.1","immutable":"^4.0.0","jest-util":"30.0.0-alpha.3","react":"18.2.0","react-dom":"18.2.0","react-test-renderer":"18.2.0"},"engines":{"node":"^16.10.0 || ^18.12.0 || >=20.0.0"},"publishConfig":{"access":"public"},"gitHead":"e267aff33d105399f2134bad7c8f82285104f3da","readme":"# pretty-format\n\nStringify any JavaScript value.\n\n- Serialize built-in JavaScript types.\n- Serialize application-specific data types with built-in or user-defined plugins.\n\n## Installation\n\n```sh\n$ yarn add pretty-format\n```\n\n## Usage\n\n```js\nconst {format: prettyFormat} = require('pretty-format'); // CommonJS\n```\n\n```js\nimport {format as prettyFormat} from 'pretty-format'; // ES2015 modules\n```\n\n```js\nconst val = {object: {}};\nval.circularReference = val;\nval[Symbol('foo')] = 'foo';\nval.map = new Map([['prop', 'value']]);\nval.array = [-0, Infinity, NaN];\n\nconsole.log(prettyFormat(val));\n/*\nObject {\n \"array\": Array [\n -0,\n Infinity,\n NaN,\n ],\n \"circularReference\": [Circular],\n \"map\": Map {\n \"prop\" => \"value\",\n },\n \"object\": Object {},\n Symbol(foo): \"foo\",\n}\n*/\n```\n\n## Usage with options\n\n```js\nfunction onClick() {}\n\nconsole.log(prettyFormat(onClick));\n/*\n[Function onClick]\n*/\n\nconst options = {\n printFunctionName: false,\n};\nconsole.log(prettyFormat(onClick, options));\n/*\n[Function]\n*/\n```\n\n\n| key | type | default | description |\n| :-------------------- | :--------------- | :---------- | :-------------------------------------------------------------------------------------- |\n| `callToJSON` | `boolean` | `true` | call `toJSON` method (if it exists) on objects |\n| `compareKeys` | `function\\|null` | `undefined` | compare function used when sorting object keys, `null` can be used to skip over sorting |\n| `escapeRegex` | `boolean` | `false` | escape special characters in regular expressions |\n| `escapeString` | `boolean` | `true` | escape special characters in strings |\n| `highlight` | `boolean` | `false` | highlight syntax with colors in terminal (some plugins) |\n| `indent` | `number` | `2` | spaces in each level of indentation |\n| `maxDepth` | `number` | `Infinity` | levels to print in arrays, objects, elements, and so on |\n| `maxWidth` | `number` | `Infinity` | number of elements to print in arrays, sets, and so on |\n| `min` | `boolean` | `false` | minimize added space: no indentation nor line breaks |\n| `plugins` | `array` | `[]` | plugins to serialize application-specific data types |\n| `printBasicPrototype` | `boolean` | `false` | print the prototype for plain objects and arrays |\n| `printFunctionName` | `boolean` | `true` | include or omit the name of a function |\n| `theme` | `object` | | colors to highlight syntax in terminal |\n\nProperty values of `theme` are from [ansi-styles colors](https://github.com/chalk/ansi-styles#colors)\n\n```js\nconst DEFAULT_THEME = {\n comment: 'gray',\n content: 'reset',\n prop: 'yellow',\n tag: 'cyan',\n value: 'green',\n};\n```\n\n## Usage with plugins\n\nThe `pretty-format` package provides some built-in plugins, including:\n\n- `ReactElement` for elements from `react`\n- `ReactTestComponent` for test objects from `react-test-renderer`\n\n```js\n// CommonJS\nconst React = require('react');\nconst renderer = require('react-test-renderer');\nconst {format: prettyFormat, plugins} = require('pretty-format');\n\nconst {ReactElement, ReactTestComponent} = plugins;\n```\n\n```js\n// ES2015 modules and destructuring assignment\nimport React from 'react';\nimport renderer from 'react-test-renderer';\nimport {plugins, format as prettyFormat} from 'pretty-format';\n\nconst {ReactElement, ReactTestComponent} = plugins;\n```\n\n```js\nconst onClick = () => {};\nconst element = React.createElement('button', {onClick}, 'Hello World');\n\nconst formatted1 = prettyFormat(element, {\n plugins: [ReactElement],\n printFunctionName: false,\n});\nconst formatted2 = prettyFormat(renderer.create(element).toJSON(), {\n plugins: [ReactTestComponent],\n printFunctionName: false,\n});\n/*\n\n*/\n```\n\n## Usage in Jest\n\nFor snapshot tests, Jest uses `pretty-format` with options that include some of its built-in plugins. For this purpose, plugins are also known as **snapshot serializers**.\n\nTo serialize application-specific data types, you can add modules to `devDependencies` of a project, and then:\n\nIn an **individual** test file, you can add a module as follows. It precedes any modules from Jest configuration.\n\n```js\nimport serializer from 'my-serializer-module';\nexpect.addSnapshotSerializer(serializer);\n\n// tests which have `expect(value).toMatchSnapshot()` assertions\n```\n\nFor **all** test files, you can specify modules in Jest configuration. They precede built-in plugins for React, HTML, and Immutable.js data types. For example, in a `package.json` file:\n\n```json\n{\n \"jest\": {\n \"snapshotSerializers\": [\"my-serializer-module\"]\n }\n}\n```\n\n## Writing plugins\n\nA plugin is a JavaScript object.\n\nIf `options` has a `plugins` array: for the first plugin whose `test(val)` method returns a truthy value, then `prettyFormat(val, options)` returns the result from either:\n\n- `serialize(val, …)` method of the **improved** interface (available in **version 21** or later)\n- `print(val, …)` method of the **original** interface (if plugin does not have `serialize` method)\n\n### test\n\nWrite `test` so it can receive `val` argument of any type. To serialize **objects** which have certain properties, then a guarded expression like `val != null && …` or more concise `val && …` prevents the following errors:\n\n- `TypeError: Cannot read property 'whatever' of null`\n- `TypeError: Cannot read property 'whatever' of undefined`\n\nFor example, `test` method of built-in `ReactElement` plugin:\n\n```js\nconst elementSymbol = Symbol.for('react.element');\nconst test = val => val && val.$$typeof === elementSymbol;\n```\n\nPay attention to efficiency in `test` because `pretty-format` calls it often.\n\n### serialize\n\nThe **improved** interface is available in **version 21** or later.\n\nWrite `serialize` to return a string, given the arguments:\n\n- `val` which “passed the test”\n- unchanging `config` object: derived from `options`\n- current `indentation` string: concatenate to `indent` from `config`\n- current `depth` number: compare to `maxDepth` from `config`\n- current `refs` array: find circular references in objects\n- `printer` callback function: serialize children\n\n### config\n\n\n| key | type | description |\n| :------------------ | :--------------- | :-------------------------------------------------------------------------------------- |\n| `callToJSON` | `boolean` | call `toJSON` method (if it exists) on objects |\n| `compareKeys` | `function\\|null` | compare function used when sorting object keys, `null` can be used to skip over sorting |\n| `colors` | `Object` | escape codes for colors to highlight syntax |\n| `escapeRegex` | `boolean` | escape special characters in regular expressions |\n| `escapeString` | `boolean` | escape special characters in strings |\n| `indent` | `string` | spaces in each level of indentation |\n| `maxDepth` | `number` | levels to print in arrays, objects, elements, and so on |\n| `min` | `boolean` | minimize added space: no indentation nor line breaks |\n| `plugins` | `array` | plugins to serialize application-specific data types |\n| `printFunctionName` | `boolean` | include or omit the name of a function |\n| `spacingInner` | `string` | spacing to separate items in a list |\n| `spacingOuter` | `string` | spacing to enclose a list of items |\n\nEach property of `colors` in `config` corresponds to a property of `theme` in `options`:\n\n- the key is the same (for example, `tag`)\n- the value in `colors` is a object with `open` and `close` properties whose values are escape codes from [ansi-styles](https://github.com/chalk/ansi-styles) for the color value in `theme` (for example, `'cyan'`)\n\nSome properties in `config` are derived from `min` in `options`:\n\n- `spacingInner` and `spacingOuter` are **newline** if `min` is `false`\n- `spacingInner` is **space** and `spacingOuter` is **empty string** if `min` is `true`\n\n### Example of serialize and test\n\nThis plugin is a pattern you can apply to serialize composite data types. Side note: `pretty-format` does not need a plugin to serialize arrays.\n\n```js\n// We reused more code when we factored out a function for child items\n// that is independent of depth, name, and enclosing punctuation (see below).\nconst SEPARATOR = ',';\nfunction serializeItems(items, config, indentation, depth, refs, printer) {\n if (items.length === 0) {\n return '';\n }\n const indentationItems = indentation + config.indent;\n return (\n config.spacingOuter +\n items\n .map(\n item =>\n indentationItems +\n printer(item, config, indentationItems, depth, refs), // callback\n )\n .join(SEPARATOR + config.spacingInner) +\n (config.min ? '' : SEPARATOR) + // following the last item\n config.spacingOuter +\n indentation\n );\n}\n\nconst plugin = {\n test(val) {\n return Array.isArray(val);\n },\n serialize(array, config, indentation, depth, refs, printer) {\n const name = array.constructor.name;\n return ++depth > config.maxDepth\n ? `[${name}]`\n : `${config.min ? '' : `${name} `}[${serializeItems(\n array,\n config,\n indentation,\n depth,\n refs,\n printer,\n )}]`;\n },\n};\n```\n\n```js\nconst val = {\n filter: 'completed',\n items: [\n {\n text: 'Write test',\n completed: true,\n },\n {\n text: 'Write serialize',\n completed: true,\n },\n ],\n};\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n plugins: [plugin],\n }),\n);\n/*\nObject {\n \"filter\": \"completed\",\n \"items\": Array [\n Object {\n \"completed\": true,\n \"text\": \"Write test\",\n },\n Object {\n \"completed\": true,\n \"text\": \"Write serialize\",\n },\n ],\n}\n*/\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n indent: 4,\n plugins: [plugin],\n }),\n);\n/*\nObject {\n \"filter\": \"completed\",\n \"items\": Array [\n Object {\n \"completed\": true,\n \"text\": \"Write test\",\n },\n Object {\n \"completed\": true,\n \"text\": \"Write serialize\",\n },\n ],\n}\n*/\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n maxDepth: 1,\n plugins: [plugin],\n }),\n);\n/*\nObject {\n \"filter\": \"completed\",\n \"items\": [Array],\n}\n*/\n```\n\n```js\nconsole.log(\n prettyFormat(val, {\n min: true,\n plugins: [plugin],\n }),\n);\n/*\n{\"filter\": \"completed\", \"items\": [{\"completed\": true, \"text\": \"Write test\"}, {\"completed\": true, \"text\": \"Write serialize\"}]}\n*/\n```\n\n### print\n\nThe **original** interface is adequate for plugins:\n\n- that **do not** depend on options other than `highlight` or `min`\n- that **do not** depend on `depth` or `refs` in recursive traversal, and\n- if values either\n - do **not** require indentation, or\n - do **not** occur as children of JavaScript data structures (for example, array)\n\nWrite `print` to return a string, given the arguments:\n\n- `val` which “passed the test”\n- current `printer(valChild)` callback function: serialize children\n- current `indenter(lines)` callback function: indent lines at the next level\n- unchanging `config` object: derived from `options`\n- unchanging `colors` object: derived from `options`\n\nThe 3 properties of `config` are `min` in `options` and:\n\n- `spacing` and `edgeSpacing` are **newline** if `min` is `false`\n- `spacing` is **space** and `edgeSpacing` is **empty string** if `min` is `true`\n\nEach property of `colors` corresponds to a property of `theme` in `options`:\n\n- the key is the same (for example, `tag`)\n- the value in `colors` is a object with `open` and `close` properties whose values are escape codes from [ansi-styles](https://github.com/chalk/ansi-styles) for the color value in `theme` (for example, `'cyan'`)\n\n### Example of print and test\n\nThis plugin prints functions with the **number of named arguments** excluding rest argument.\n\n```js\nconst plugin = {\n print(val) {\n return `[Function ${val.name || 'anonymous'} ${val.length}]`;\n },\n test(val) {\n return typeof val === 'function';\n },\n};\n```\n\n```js\nconst val = {\n onClick(event) {},\n render() {},\n};\n\nprettyFormat(val, {\n plugins: [plugin],\n});\n/*\nObject {\n \"onClick\": [Function onClick 1],\n \"render\": [Function render 0],\n}\n*/\n\nprettyFormat(val);\n/*\nObject {\n \"onClick\": [Function onClick],\n \"render\": [Function render],\n}\n*/\n```\n\nThis plugin **ignores** the `printFunctionName` option. That limitation of the original `print` interface is a reason to use the improved `serialize` interface, described above.\n\n```js\nprettyFormat(val, {\n plugins: [pluginOld],\n printFunctionName: false,\n});\n/*\nObject {\n \"onClick\": [Function onClick 1],\n \"render\": [Function render 0],\n}\n*/\n\nprettyFormat(val, {\n printFunctionName: false,\n});\n/*\nObject {\n \"onClick\": [Function],\n \"render\": [Function],\n}\n*/\n```\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/jestjs/jest/issues"},"homepage":"https://github.com/jestjs/jest#readme","_id":"pretty-format@30.0.0-alpha.3","_nodeVersion":"20.11.1","_npmVersion":"lerna/3.2.1/node@v20.11.1+arm64 (darwin)","dist":{"integrity":"sha512-b1mhTF/vbYJaXOdRY0nFMwzHHpWCs0QNYJA5ImcOpQ99QZqCHqU8C+lbGoWwC3X9QEjAYJ+N5+Vmc/MXbXCZDA==","shasum":"c0e7dfd029f81681a59ea8c82e5dcec823c42951","tarball":"http://localhost:4545/npm/registry/pretty-format/pretty-format-30.0.0-alpha.3.tgz","fileCount":6,"unpackedSize":60184,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC80j+EWUUuijHvZkkUtUbYm4dRduCSbK0DqebTGG9AiAIhAIqKHHGTqdbYKnVXOu5oS1w/ago+SG/ILF2KMg4j2kWz"}]},"_npmUser":{"name":"simenb","email":"sbekkhus91@gmail.com"},"directories":{},"maintainers":[{"name":"simenb","email":"sbekkhus91@gmail.com"},{"name":"cpojer","email":"christoph.pojer@gmail.com"},{"name":"aaronabramov","email":"aaron@abramov.io"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pretty-format_30.0.0-alpha.3_1708427337839_0.24680493026514982"},"_hasShrinkwrap":false}},"readme":"","maintainers":[{"email":"sbekkhus91@gmail.com","name":"simenb"},{"email":"christoph.pojer@gmail.com","name":"cpojer"},{"email":"aaron@abramov.io","name":"aaronabramov"},{"email":"operations@openjsf.org","name":"openjs-operations"}],"time":{"modified":"2024-02-26T15:59:07.828Z","created":"2015-03-08T04:52:08.223Z","1.0.0":"2015-03-08T04:52:08.223Z","1.1.0":"2015-03-15T23:34:23.843Z","1.1.1":"2015-03-16T17:00:42.800Z","1.2.0":"2015-03-16T17:39:03.466Z","2.0.0":"2016-06-01T22:02:28.012Z","2.1.0":"2016-06-01T23:52:20.958Z","3.0.0":"2016-06-13T20:33:54.044Z","3.1.0":"2016-06-14T04:31:59.244Z","3.2.0":"2016-06-15T03:23:45.115Z","3.3.0":"2016-06-15T06:31:28.366Z","3.3.1":"2016-06-21T17:41:02.344Z","3.3.2":"2016-06-22T21:26:05.428Z","3.4.0":"2016-07-02T20:42:16.060Z","3.4.1":"2016-07-04T17:49:21.976Z","3.4.2":"2016-07-06T01:44:16.253Z","3.4.3":"2016-07-06T06:28:01.288Z","3.5.0":"2016-07-08T08:29:23.317Z","3.5.1":"2016-08-01T17:06:25.371Z","3.5.2":"2016-08-04T02:53:37.087Z","3.5.3":"2016-08-11T00:23:51.193Z","3.6.0":"2016-08-17T20:20:08.951Z","3.7.0":"2016-09-01T15:16:07.274Z","3.8.0":"2016-09-11T01:43:26.665Z","4.0.0":"2016-09-11T02:02:31.572Z","4.1.0":"2016-09-20T11:22:51.213Z","4.2.0":"2016-09-21T04:23:39.611Z","4.2.1":"2016-09-21T06:36:48.110Z","4.2.2":"2016-11-01T23:01:44.066Z","4.2.3":"2016-11-10T18:14:42.939Z","4.3.0":"2016-11-18T07:08:21.917Z","4.3.1":"2016-11-18T14:39:30.721Z","18.0.0":"2016-12-15T11:24:39.904Z","18.1.0":"2016-12-29T01:47:37.936Z","18.5.0-alpha.7da3df39":"2017-02-17T16:57:58.225Z","19.0.0":"2017-02-21T09:30:33.083Z","19.1.0-alpha.eed82034":"2017-03-17T00:41:24.175Z","19.2.0-alpha.993e64af":"2017-05-04T15:37:41.927Z","19.3.0-alpha.85402254":"2017-05-05T11:48:22.883Z","20.0.0":"2017-05-06T12:32:36.938Z","20.0.1":"2017-05-11T10:50:08.654Z","20.0.2":"2017-05-17T10:50:23.917Z","20.0.3":"2017-05-17T10:57:13.531Z","20.1.0-alpha.1":"2017-06-28T10:16:21.675Z","20.1.0-alpha.2":"2017-06-29T16:36:48.331Z","20.1.0-alpha.3":"2017-06-30T14:20:54.944Z","20.1.0-beta.1":"2017-07-13T10:33:43.286Z","20.1.0-chi.1":"2017-07-14T10:25:05.727Z","20.1.0-delta.1":"2017-07-18T08:46:55.252Z","20.1.0-delta.2":"2017-07-19T12:56:44.830Z","20.1.0-delta.3":"2017-07-25T22:12:26.282Z","20.1.0-delta.4":"2017-07-27T17:19:08.800Z","20.1.0-delta.5":"2017-08-01T16:33:37.018Z","20.1.0-echo.1":"2017-08-08T16:49:56.294Z","21.0.0-alpha.1":"2017-08-11T10:14:06.327Z","21.0.0-alpha.2":"2017-08-21T22:06:49.160Z","21.0.0-beta.1":"2017-08-24T21:26:51.250Z","21.0.0":"2017-09-04T15:01:55.963Z","21.0.2":"2017-09-08T14:19:28.371Z","21.1.0":"2017-09-14T01:50:14.649Z","21.2.0":"2017-09-26T20:22:19.365Z","21.2.1":"2017-09-27T22:15:03.745Z","21.3.0-alpha.1e3ee68e":"2017-09-28T14:20:41.836Z","21.3.0-alpha.eff7a1cf":"2017-10-01T16:46:50.733Z","21.3.0-beta.1":"2017-10-04T10:48:39.647Z","21.3.0-beta.2":"2017-10-13T09:54:06.677Z","21.3.0-beta.3":"2017-10-25T19:34:06.251Z","21.3.0-beta.4":"2017-10-26T13:26:59.176Z","21.3.0-beta.5":"2017-11-02T13:17:32.386Z","21.3.0-beta.6":"2017-11-03T16:21:36.255Z","21.3.0-beta.7":"2017-11-06T09:39:50.075Z","21.3.0-beta.8":"2017-11-07T17:43:44.016Z","21.3.0-beta.9":"2017-11-22T13:17:33.949Z","21.3.0-beta.10":"2017-11-25T12:39:25.671Z","21.3.0-beta.11":"2017-11-29T14:31:21.873Z","21.3.0-beta.12":"2017-12-05T18:48:35.102Z","21.3.0-beta.13":"2017-12-06T14:37:08.966Z","21.3.0-beta.14":"2017-12-12T10:52:36.520Z","21.3.0-beta.15":"2017-12-15T13:27:40.801Z","22.0.0":"2017-12-18T11:03:25.836Z","22.0.1":"2017-12-18T20:29:25.187Z","22.0.2":"2017-12-19T13:53:04.651Z","22.0.3":"2017-12-19T14:58:56.170Z","22.0.5":"2018-01-09T15:09:54.203Z","22.0.6":"2018-01-11T09:46:46.730Z","22.1.0":"2018-01-15T11:57:17.363Z","22.4.0":"2018-02-20T12:03:31.362Z","22.4.3":"2018-03-21T16:08:10.760Z","23.0.0-alpha.2":"2018-03-26T10:40:47.317Z","23.0.0-alpha.4":"2018-03-26T12:31:41.960Z","23.0.0-alpha.5":"2018-04-10T19:18:20.898Z","23.0.0-alpha.5r":"2018-04-11T05:52:49.951Z","23.0.0-alpha.6r":"2018-04-12T07:01:35.462Z","23.0.0-alpha.7":"2018-04-17T18:55:20.032Z","23.0.0-beta.0":"2018-04-20T10:10:47.213Z","23.0.0-beta.1":"2018-04-21T15:44:24.721Z","23.0.0-beta.2":"2018-04-26T21:17:37.807Z","23.0.0-alpha.3r":"2018-04-30T13:10:13.056Z","23.0.0-beta.3r":"2018-04-30T13:14:55.844Z","23.0.0-charlie.0":"2018-05-02T10:56:23.810Z","23.0.0-charlie.1":"2018-05-03T12:10:15.961Z","23.0.0-charlie.2":"2018-05-15T09:51:27.346Z","23.0.0-charlie.3":"2018-05-22T14:59:01.270Z","23.0.0-charlie.4":"2018-05-23T10:42:26.200Z","23.0.0":"2018-05-24T17:26:26.517Z","23.0.1":"2018-05-27T15:30:57.217Z","23.2.0":"2018-06-25T14:05:16.960Z","23.5.0":"2018-08-10T13:51:42.861Z","23.6.0":"2018-09-10T12:42:53.440Z","24.0.0-alpha.0":"2018-10-19T12:12:46.155Z","24.0.0-alpha.1":"2018-10-22T15:35:49.372Z","24.0.0-alpha.2":"2018-10-25T10:51:19.959Z","24.0.0-alpha.4":"2018-10-26T16:33:15.401Z","24.0.0-alpha.5":"2018-11-09T13:12:45.857Z","24.0.0-alpha.6":"2018-11-09T17:49:42.827Z","24.0.0-alpha.7":"2018-12-11T16:07:56.656Z","24.0.0-alpha.8":"2018-12-13T19:47:52.691Z","24.0.0-alpha.9":"2018-12-19T14:25:58.481Z","24.0.0-alpha.10":"2019-01-09T17:04:31.057Z","24.0.0-alpha.11":"2019-01-10T18:35:07.255Z","24.0.0-alpha.12":"2019-01-11T15:01:19.314Z","24.0.0-alpha.13":"2019-01-23T15:15:29.108Z","24.0.0-alpha.15":"2019-01-24T17:52:32.939Z","24.0.0-alpha.16":"2019-01-25T13:42:04.038Z","24.0.0":"2019-01-25T15:04:58.929Z","24.2.0-alpha.0":"2019-03-05T14:46:42.860Z","24.3.0":"2019-03-07T12:59:39.649Z","24.3.1":"2019-03-07T23:12:20.542Z","24.4.0":"2019-03-11T14:57:49.478Z","24.5.0":"2019-03-12T16:36:27.199Z","24.6.0":"2019-04-01T22:26:22.948Z","24.7.0":"2019-04-03T03:55:18.087Z","24.8.0":"2019-05-05T02:02:21.602Z","24.9.0":"2019-08-16T05:55:55.008Z","25.0.0":"2019-08-22T03:24:00.871Z","25.1.0":"2020-01-22T00:59:53.413Z","25.2.0-alpha.86":"2020-03-25T17:16:27.944Z","25.2.0":"2020-03-25T17:58:03.550Z","25.2.1-alpha.1":"2020-03-26T07:54:21.171Z","25.2.1-alpha.2":"2020-03-26T08:10:30.666Z","25.2.1":"2020-03-26T09:01:11.603Z","25.2.3":"2020-03-26T20:24:46.402Z","25.2.5":"2020-04-02T10:23:04.741Z","25.2.6":"2020-04-02T10:29:16.387Z","25.3.0":"2020-04-08T13:21:05.759Z","25.4.0":"2020-04-19T21:50:24.892Z","25.5.0":"2020-04-28T19:45:21.166Z","26.0.0-alpha.0":"2020-05-02T12:13:00.417Z","26.0.0-alpha.1":"2020-05-03T18:48:01.476Z","26.0.0-alpha.2":"2020-05-04T16:05:26.950Z","26.0.0":"2020-05-04T17:53:05.220Z","26.0.1-alpha.0":"2020-05-04T22:15:57.138Z","26.0.1":"2020-05-05T10:40:44.935Z","26.1.0":"2020-06-23T15:15:10.868Z","26.2.0":"2020-07-30T10:11:42.234Z","26.3.0":"2020-08-10T11:31:48.319Z","26.4.0":"2020-08-12T21:00:17.956Z","26.4.2":"2020-08-22T12:09:56.668Z","26.5.0":"2020-10-05T09:28:15.009Z","26.5.2":"2020-10-06T10:52:44.666Z","26.6.0":"2020-10-19T11:58:37.794Z","26.6.1":"2020-10-23T09:06:02.003Z","26.6.2":"2020-11-02T12:51:22.883Z","27.0.0-next.0":"2020-12-05T17:25:14.316Z","27.0.0-next.1":"2020-12-07T12:43:21.571Z","27.0.0-next.3":"2021-02-18T22:09:48.656Z","27.0.0-next.5":"2021-03-15T13:03:17.263Z","27.0.0-next.6":"2021-03-25T19:39:57.254Z","27.0.0-next.7":"2021-04-02T13:47:54.131Z","27.0.0-next.8":"2021-04-12T22:42:29.294Z","27.0.0-next.9":"2021-05-04T06:25:02.043Z","27.0.0-next.10":"2021-05-20T14:11:16.610Z","27.0.0-next.11":"2021-05-20T22:28:42.411Z","27.0.0":"2021-05-25T08:15:04.353Z","27.0.1":"2021-05-25T10:06:29.809Z","27.0.2":"2021-05-29T12:07:12.776Z","27.0.6":"2021-06-28T17:05:35.991Z","27.1.0":"2021-08-27T09:59:36.659Z","27.1.1":"2021-09-08T10:12:11.097Z","27.2.0":"2021-09-13T08:06:34.660Z","27.2.2":"2021-09-25T13:35:07.145Z","27.2.3":"2021-09-28T10:11:21.050Z","27.2.4":"2021-09-29T14:04:47.132Z","27.2.5":"2021-10-08T13:39:19.739Z","27.3.0":"2021-10-17T18:34:46.048Z","27.3.1":"2021-10-19T06:57:31.811Z","27.4.0":"2021-11-29T13:37:00.044Z","27.4.1":"2021-11-30T08:37:06.945Z","27.4.2":"2021-11-30T11:53:38.624Z","27.4.6":"2022-01-04T23:03:31.715Z","27.5.0":"2022-02-05T09:59:18.349Z","27.5.1":"2022-02-08T10:52:12.132Z","28.0.0-alpha.0":"2022-02-10T18:17:27.390Z","28.0.0-alpha.1":"2022-02-15T21:26:54.273Z","28.0.0-alpha.2":"2022-02-16T18:12:00.300Z","28.0.0-alpha.3":"2022-02-17T15:42:21.247Z","28.0.0-alpha.4":"2022-02-22T12:13:54.534Z","28.0.0-alpha.5":"2022-02-24T20:57:18.080Z","28.0.0-alpha.6":"2022-03-01T08:32:23.240Z","28.0.0-alpha.7":"2022-03-06T10:02:39.841Z","28.0.0-alpha.8":"2022-04-05T14:59:39.196Z","28.0.0-alpha.9":"2022-04-19T10:59:14.192Z","28.0.0":"2022-04-25T12:08:06.808Z","28.0.1":"2022-04-26T10:02:32.450Z","28.0.2":"2022-04-27T07:44:01.836Z","28.1.0":"2022-05-06T10:48:53.457Z","28.1.1":"2022-06-07T06:09:35.564Z","28.1.3":"2022-07-13T14:12:27.126Z","29.0.0-alpha.0":"2022-07-17T22:07:06.929Z","29.0.0-alpha.1":"2022-08-04T08:23:28.748Z","29.0.0-alpha.3":"2022-08-07T13:41:36.470Z","29.0.0-alpha.4":"2022-08-08T13:05:34.955Z","29.0.0-alpha.6":"2022-08-19T13:57:48.480Z","29.0.0":"2022-08-25T12:33:28.516Z","29.0.1":"2022-08-26T13:34:42.288Z","29.0.2":"2022-09-03T10:48:19.835Z","29.0.3":"2022-09-10T14:41:38.462Z","29.1.0":"2022-09-28T07:37:38.636Z","29.1.2":"2022-09-30T07:22:44.847Z","29.2.0":"2022-10-14T09:13:46.533Z","29.2.1":"2022-10-18T16:00:11.894Z","29.3.1":"2022-11-08T22:56:21.978Z","29.4.0":"2023-01-24T10:55:49.590Z","29.4.1":"2023-01-26T15:08:35.218Z","29.4.2":"2023-02-07T13:45:25.957Z","29.4.3":"2023-02-15T11:57:20.559Z","29.5.0":"2023-03-06T13:33:28.482Z","29.6.0":"2023-07-04T15:25:45.277Z","29.6.1":"2023-07-06T14:18:17.695Z","29.6.2":"2023-07-27T09:21:29.464Z","29.6.3":"2023-08-21T12:39:08.602Z","29.7.0":"2023-09-12T06:43:41.906Z","30.0.0-alpha.1":"2023-10-30T13:33:09.075Z","30.0.0-alpha.2":"2023-11-16T09:28:19.237Z","30.0.0-alpha.3":"2024-02-20T11:08:58.033Z"},"repository":{"type":"git","url":"git+https://github.com/jestjs/jest.git","directory":"packages/pretty-format"},"author":{"name":"James Kyle","email":"me@thejameskyle.com"},"license":"MIT","readmeFilename":"","users":{"chocolateboy":true,"robmcguinness":true,"capaj":true,"samhagman":true,"tribou":true,"program247365":true,"alexxnica":true,"vaju":true,"styfle":true,"ryanlittle":true,"willwolffmyren":true},"homepage":"https://github.com/jestjs/jest#readme","bugs":{"url":"https://github.com/jestjs/jest/issues"}}