diff --git a/cli/tools/registry/diagnostics.rs b/cli/tools/registry/diagnostics.rs
index 78cc6f5552..ff86e68fbe 100644
--- a/cli/tools/registry/diagnostics.rs
+++ b/cli/tools/registry/diagnostics.rs
@@ -14,6 +14,8 @@ use deno_ast::diagnostics::DiagnosticSnippetHighlightStyle;
use deno_ast::diagnostics::DiagnosticSourcePos;
use deno_ast::diagnostics::DiagnosticSourceRange;
use deno_ast::swc::common::util::take::Take;
+use deno_ast::SourcePos;
+use deno_ast::SourceRanged;
use deno_ast::SourceTextInfo;
use deno_core::anyhow::anyhow;
use deno_core::error::AnyError;
@@ -31,7 +33,10 @@ impl PublishDiagnosticsCollector {
pub fn print_and_error(&self) -> Result<(), AnyError> {
let mut errors = 0;
let mut has_slow_types_errors = false;
- let diagnostics = self.diagnostics.lock().unwrap().take();
+ let mut diagnostics = self.diagnostics.lock().unwrap().take();
+
+ diagnostics.sort_by_cached_key(|d| d.sorting_key());
+
for diagnostic in diagnostics {
eprint!("{}", diagnostic.display());
if matches!(diagnostic.level(), DiagnosticLevel::Error) {
@@ -92,6 +97,38 @@ pub enum PublishDiagnostic {
text_info: SourceTextInfo,
referrer: deno_graph::Range,
},
+ UnsupportedJsxTsx {
+ specifier: Url,
+ },
+}
+
+impl PublishDiagnostic {
+ fn sorting_key(&self) -> (String, String, Option) {
+ let loc = self.location();
+
+ let (specifier, source_pos) = match loc {
+ DiagnosticLocation::Module { specifier } => (specifier.to_string(), None),
+ DiagnosticLocation::Path { path } => (path.display().to_string(), None),
+ DiagnosticLocation::ModulePosition {
+ specifier,
+ source_pos,
+ text_info,
+ } => (
+ specifier.to_string(),
+ Some(match source_pos {
+ DiagnosticSourcePos::SourcePos(s) => s,
+ DiagnosticSourcePos::ByteIndex(index) => {
+ text_info.range().start() + index
+ }
+ DiagnosticSourcePos::LineAndCol { line, column } => {
+ text_info.line_start(line) + column
+ }
+ }),
+ ),
+ };
+
+ (self.code().to_string(), specifier, source_pos)
+ }
}
impl Diagnostic for PublishDiagnostic {
@@ -107,6 +144,7 @@ impl Diagnostic for PublishDiagnostic {
DuplicatePath { .. } => DiagnosticLevel::Error,
UnsupportedFileType { .. } => DiagnosticLevel::Warning,
InvalidExternalImport { .. } => DiagnosticLevel::Error,
+ UnsupportedJsxTsx { .. } => DiagnosticLevel::Warning,
}
}
@@ -119,6 +157,7 @@ impl Diagnostic for PublishDiagnostic {
DuplicatePath { .. } => Cow::Borrowed("case-insensitive-duplicate-path"),
UnsupportedFileType { .. } => Cow::Borrowed("unsupported-file-type"),
InvalidExternalImport { .. } => Cow::Borrowed("invalid-external-import"),
+ UnsupportedJsxTsx { .. } => Cow::Borrowed("unsupported-jsx-tsx"),
}
}
@@ -135,6 +174,7 @@ impl Diagnostic for PublishDiagnostic {
Cow::Owned(format!("unsupported file type '{kind}'"))
}
InvalidExternalImport { kind, .. } => Cow::Owned(format!("invalid import to a {kind} specifier")),
+ UnsupportedJsxTsx { .. } => Cow::Borrowed("JSX and TSX files are currently not supported"),
}
}
@@ -174,6 +214,9 @@ impl Diagnostic for PublishDiagnostic {
column: referrer.start.character,
},
},
+ UnsupportedJsxTsx { specifier } => DiagnosticLocation::Module {
+ specifier: Cow::Borrowed(specifier),
+ },
}
}
@@ -221,6 +264,7 @@ impl Diagnostic for PublishDiagnostic {
description: Some("the specifier".into()),
},
}),
+ PublishDiagnostic::UnsupportedJsxTsx { .. } => None,
}
}
@@ -237,7 +281,8 @@ impl Diagnostic for PublishDiagnostic {
PublishDiagnostic::UnsupportedFileType { .. } => Some(
Cow::Borrowed("remove the file, or add it to 'publish.exclude' in the config file"),
),
- PublishDiagnostic::InvalidExternalImport { .. } => Some(Cow::Borrowed("replace this import with one from jsr or npm, or vendor the dependency into your package"))
+ PublishDiagnostic::InvalidExternalImport { .. } => Some(Cow::Borrowed("replace this import with one from jsr or npm, or vendor the dependency into your package")),
+ PublishDiagnostic::UnsupportedJsxTsx { .. } => None,
}
}
@@ -272,6 +317,9 @@ impl Diagnostic for PublishDiagnostic {
Cow::Borrowed("this specifier is not allowed to be imported on jsr"),
Cow::Borrowed("jsr only supports importing `jsr:`, `npm:`, and `data:` specifiers"),
]),
+ PublishDiagnostic::UnsupportedJsxTsx { .. } => Cow::Owned(vec![
+ Cow::Borrowed("follow https://github.com/jsr-io/jsr/issues/24 for updates"),
+ ])
}
}
@@ -293,6 +341,7 @@ impl Diagnostic for PublishDiagnostic {
PublishDiagnostic::InvalidExternalImport { .. } => {
Some(Cow::Borrowed("https://jsr.io/go/invalid-external-import"))
}
+ PublishDiagnostic::UnsupportedJsxTsx { .. } => None,
}
}
}
diff --git a/cli/tools/registry/tar.rs b/cli/tools/registry/tar.rs
index 2dd160a0ad..d24d8abaa0 100644
--- a/cli/tools/registry/tar.rs
+++ b/cli/tools/registry/tar.rs
@@ -154,6 +154,14 @@ pub fn create_gzipped_tarball(
source_parser,
diagnostics_collector,
)?;
+
+ let media_type = MediaType::from_specifier(&specifier);
+ if matches!(media_type, MediaType::Jsx | MediaType::Tsx) {
+ diagnostics_collector.push(PublishDiagnostic::UnsupportedJsxTsx {
+ specifier: specifier.clone(),
+ });
+ }
+
files.push(PublishableTarballFile {
path_str: path_str.clone(),
specifier: specifier.clone(),
diff --git a/tests/integration/publish_tests.rs b/tests/integration/publish_tests.rs
index fafc018f97..745736d656 100644
--- a/tests/integration/publish_tests.rs
+++ b/tests/integration/publish_tests.rs
@@ -257,6 +257,14 @@ itest!(jsr_jsonc {
http_server: true,
});
+itest!(unsupported_jsx_tsx {
+ args: "publish --token 'sadfasdf'",
+ cwd: Some("publish/unsupported_jsx_tsx"),
+ output: "publish/unsupported_jsx_tsx/mod.out",
+ envs: env_vars_for_jsr_npm_tests(),
+ http_server: true,
+});
+
#[test]
fn ignores_gitignore() {
let context = publish_context_builder().build();
diff --git a/tests/testdata/npm/registry/preact-render-to-string/preact-render-to-string-6.4.0.tgz b/tests/testdata/npm/registry/preact-render-to-string/preact-render-to-string-6.4.0.tgz
new file mode 100644
index 0000000000..040429ffdf
Binary files /dev/null and b/tests/testdata/npm/registry/preact-render-to-string/preact-render-to-string-6.4.0.tgz differ
diff --git a/tests/testdata/npm/registry/preact-render-to-string/registry.json b/tests/testdata/npm/registry/preact-render-to-string/registry.json
new file mode 100644
index 0000000000..5a7bbbc4d0
--- /dev/null
+++ b/tests/testdata/npm/registry/preact-render-to-string/registry.json
@@ -0,0 +1 @@
+{"_id":"preact-render-to-string","_rev":"121-a8123a0a5973986b3a4018df394a061a","name":"preact-render-to-string","description":"Render JSX to an HTML string, with support for Preact components.","dist-tags":{"latest":"6.4.0","next":"5.0.6","experimental":"6.0.0-experimental.0"},"versions":{"1.0.0":{"name":"preact-render-to-string","version":"1.0.0","description":"Render JSX to an HTML string, with support for Preact components.","main":"dist/index.js","scripts":{"build":"babel src -s -d dist","test":"eslint {src,test} && mocha --compilers js:babel/register test/**/*.js","prepublish":"npm run build","release":"npm run build && git commit -am $npm_package_version && git tag $npm_package_version && git push && git push --tags && npm publish"},"keywords":["preact","photon","electron"],"author":{"name":"Jason Miller","email":"jason@developit.ca"},"license":"ISC","devDependencies":{"babel":"^5.8.23","babel-eslint":"^4.1.3","chai":"^3.3.0","eslint":"^1.7.1","mocha":"^2.3.3","sinon":"^1.17.1","sinon-chai":"^2.8.0"},"gitHead":"5e13ddcf1f35a5fbbc617cb15913d64c37dda179","_id":"preact-render-to-string@1.0.0","_shasum":"0526ef3f022975168b93ab04399f66acdecbed5b","_from":".","_npmVersion":"2.11.3","_nodeVersion":"0.12.7","_npmUser":{"name":"developit","email":"jason@developit.ca"},"maintainers":[{"name":"developit","email":"jason@developit.ca"}],"dist":{"shasum":"0526ef3f022975168b93ab04399f66acdecbed5b","tarball":"http://localhost:4545/npm/registry/preact-render-to-string/preact-render-to-string-1.0.0.tgz","integrity":"sha512-bvTVPexy/bsxN5l4v6USqu8saf2IsTL7wGPUpnPWIbDLXu8W/Wo5uQGJZF2JXImEqMbAQJymzbW+T3A9Mx45Qw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDv0BcQOM9/bY7Z3wrfM0G2Xqeker2SrlaCJuZXkUw4UAIgBVGOYz2eiJj/ACM3AO+LnHxwWx8Dk4bJiOEvbSq4AhU="}]},"directories":{}},"1.1.0":{"name":"preact-render-to-string","version":"1.1.0","description":"Render JSX to an HTML string, with support for Preact components.","main":"dist/index.js","scripts":{"build":"babel src -s -d dist","test":"eslint {src,test} && mocha --compilers js:babel/register test/**/*.js","prepublish":"npm run build","release":"npm run build && git commit -am $npm_package_version && git tag $npm_package_version && git push && git push --tags && npm publish"},"keywords":["preact","render","universal","isomorphic"],"author":{"name":"Jason Miller","email":"jason@developit.ca"},"license":"ISC","devDependencies":{"babel":"^5.8.23","babel-eslint":"^4.1.3","chai":"^3.3.0","eslint":"^1.7.1","mocha":"^2.3.3","sinon":"^1.17.1","sinon-chai":"^2.8.0"},"gitHead":"a62705fd066ff0aca3c7870cd909361507731474","_id":"preact-render-to-string@1.1.0","_shasum":"5079e3cf905e32e3bd2a308b565249bac23ce305","_from":".","_npmVersion":"2.11.3","_nodeVersion":"0.12.7","_npmUser":{"name":"developit","email":"jason@developit.ca"},"maintainers":[{"name":"developit","email":"jason@developit.ca"}],"dist":{"shasum":"5079e3cf905e32e3bd2a308b565249bac23ce305","tarball":"http://localhost:4545/npm/registry/preact-render-to-string/preact-render-to-string-1.1.0.tgz","integrity":"sha512-5MgUdfsEHDrigJNz3zefcZ0FWlZ0FtwdvMsOwhLhMzHbkN+EMouRBpDopCL4xlquhiq3xAyW7qd87x8dXe+sGA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEog/CZ0v7NIlfkfKUA5T8JzCbqHpJ2EdpRFTgsildOzAiBAfBQVBMeADwd6M8KVtBZwU4o7+r97Ybn/+Ztdxs/9tw=="}]},"directories":{}},"1.1.1":{"name":"preact-render-to-string","version":"1.1.1","description":"Render JSX to an HTML string, with support for Preact components.","main":"dist/index.js","scripts":{"build":"babel src -s -d dist","test":"eslint {src,test} && mocha --compilers js:babel/register test/**/*.js","prepublish":"npm run build","release":"npm run build && git commit -am $npm_package_version && git tag $npm_package_version && git push && git push --tags && npm publish"},"keywords":["preact","render","universal","isomorphic"],"author":{"name":"Jason Miller","email":"jason@developit.ca"},"license":"MIT","devDependencies":{"babel":"^5.8.23","babel-eslint":"^4.1.3","chai":"^3.3.0","eslint":"^1.7.1","mocha":"^2.3.3","sinon":"^1.17.1","sinon-chai":"^2.8.0"},"gitHead":"34ac3812263a899ae47d658c5a0f0d346293e229","_id":"preact-render-to-string@1.1.1","_shasum":"7cd24809afcd1b1590bd30fe23f353ab5428a2d5","_from":".","_npmVersion":"2.11.3","_nodeVersion":"0.12.7","_npmUser":{"name":"developit","email":"jason@developit.ca"},"maintainers":[{"name":"developit","email":"jason@developit.ca"}],"dist":{"shasum":"7cd24809afcd1b1590bd30fe23f353ab5428a2d5","tarball":"http://localhost:4545/npm/registry/preact-render-to-string/preact-render-to-string-1.1.1.tgz","integrity":"sha512-/ln2hwTSeWJ8ESf5vAsFIl22HSPb2wJZlZ24zxe5FjiHJwdcuow+L6KPwJjKv2wB2I2K1BDKb2hHAph7Gez4+A==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBhcQFq3tRGXWvleYtqaEot6GztB5QP8b+nOjHUk3EeeAiBmNZcg6F/mA6T/380Sg8cfhkFgDcVTmxAqJpCGcIu/EA=="}]},"directories":{}},"1.1.3":{"name":"preact-render-to-string","version":"1.1.3","description":"Render JSX to an HTML string, with support for Preact components.","main":"dist/index.js","scripts":{"build":"babel src -s -d dist","test":"eslint {src,test} && mocha --compilers js:babel/register test/**/*.js","prepublish":"npm run build","release":"npm run build && git commit -am $npm_package_version && git tag $npm_package_version && git push && git push --tags && npm publish"},"keywords":["preact","render","universal","isomorphic"],"author":{"name":"Jason Miller","email":"jason@developit.ca"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/developit/preact-render-to-string.git"},"bugs":{"url":"https://github.com/developit/preact-render-to-string/issues"},"homepage":"https://github.com/developit/preact-render-to-string","devDependencies":{"babel":"^5.8.23","babel-eslint":"^4.1.3","chai":"^3.3.0","eslint":"^1.7.1","mocha":"^2.3.3","preact":"^1.5.0","sinon":"^1.17.1","sinon-chai":"^2.8.0"},"gitHead":"47f326608bec89a0c5bf01e742e287f346121b29","_id":"preact-render-to-string@1.1.3","_shasum":"09832db0d64c99d4a05f62d709c5e0c725fb7958","_from":".","_npmVersion":"2.11.3","_nodeVersion":"0.12.7","_npmUser":{"name":"developit","email":"jason@developit.ca"},"maintainers":[{"name":"developit","email":"jason@developit.ca"}],"dist":{"shasum":"09832db0d64c99d4a05f62d709c5e0c725fb7958","tarball":"http://localhost:4545/npm/registry/preact-render-to-string/preact-render-to-string-1.1.3.tgz","integrity":"sha512-oI/23MMcwv5sFoDtbIahvs4gfmfRCvcRuk7Sh6zyFLNMZjkvXlQjb0srP5HqY9ezY0DdJp077SFgUhKbsI9Tfw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCX44KcPEJF30HPoI+m+tqrA+jX67sHN1D6auMb6vixhQIhAKRe5HPCOw+EDmS2y0yDJIJV8G69X98/HIaQHzCwQn/q"}]},"directories":{}},"1.2.0":{"name":"preact-render-to-string","version":"1.2.0","description":"Render JSX to an HTML string, with support for Preact components.","main":"dist/index.js","scripts":{"build":"babel src -s -d dist","test":"eslint {src,test} && mocha --compilers js:babel/register test/**/*.js","prepublish":"npm run build","release":"npm run build && git commit -am $npm_package_version && git tag $npm_package_version && git push && git push --tags && npm publish"},"keywords":["preact","render","universal","isomorphic"],"author":{"name":"Jason Miller","email":"jason@developit.ca"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/developit/preact-render-to-string.git"},"bugs":{"url":"https://github.com/developit/preact-render-to-string/issues"},"homepage":"https://github.com/developit/preact-render-to-string","devDependencies":{"babel":"^5.8.23","babel-eslint":"^4.1.3","chai":"^3.3.0","eslint":"^1.7.1","mocha":"^2.3.3","preact":"^1.5.0","sinon":"^1.17.1","sinon-chai":"^2.8.0"},"gitHead":"54426e28356c732734ca2ebee6486ba81aacfedf","_id":"preact-render-to-string@1.2.0","_shasum":"cace996f1a9aa98a44bdb5a69ed07e88a36820f6","_from":".","_npmVersion":"2.11.3","_nodeVersion":"0.12.7","_npmUser":{"name":"developit","email":"jason@developit.ca"},"maintainers":[{"name":"developit","email":"jason@developit.ca"}],"dist":{"shasum":"cace996f1a9aa98a44bdb5a69ed07e88a36820f6","tarball":"http://localhost:4545/npm/registry/preact-render-to-string/preact-render-to-string-1.2.0.tgz","integrity":"sha512-1as7zJvREC0z098YW8FUYmEF2nEdWe5cDpS+eXzAv/7yRmnFZqiyBM8+QL+9UYqYW4Ku8FcdhNi0taNxRMzwsQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIE1c19L9tmZBq/GLdeftpXjZ+tzN8Fca6mOsgkO51j+NAiEAhMpQkYD7sreDiLHD3FhXLv0y5fQUBn2BRQMHcZhv5Kg="}]},"directories":{}},"1.3.0":{"name":"preact-render-to-string","version":"1.3.0","description":"Render JSX to an HTML string, with support for Preact components.","main":"dist/index.js","scripts":{"build":"babel src -s -d dist","test":"eslint {src,test} && mocha --compilers js:babel/register test/**/*.js","prepublish":"npm run build","release":"npm run build && git commit -am $npm_package_version && git tag $npm_package_version && git push && git push --tags && npm publish"},"keywords":["preact","render","universal","isomorphic"],"author":{"name":"Jason Miller","email":"jason@developit.ca"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/developit/preact-render-to-string.git"},"bugs":{"url":"https://github.com/developit/preact-render-to-string/issues"},"homepage":"https://github.com/developit/preact-render-to-string","devDependencies":{"babel":"^5.8.23","babel-eslint":"^4.1.3","chai":"^3.3.0","eslint":"^1.7.1","mocha":"^2.3.3","preact":"^1.5.0","sinon":"^1.17.1","sinon-chai":"^2.8.0"},"gitHead":"4eabc1f4dd4490eee1968a8e3651abfa0d2b1e43","_id":"preact-render-to-string@1.3.0","_shasum":"7686eb671eb0be5f71c97b5454198543ed2cb21c","_from":".","_npmVersion":"2.14.7","_nodeVersion":"4.2.2","_npmUser":{"name":"developit","email":"jason@developit.ca"},"maintainers":[{"name":"developit","email":"jason@developit.ca"}],"dist":{"shasum":"7686eb671eb0be5f71c97b5454198543ed2cb21c","tarball":"http://localhost:4545/npm/registry/preact-render-to-string/preact-render-to-string-1.3.0.tgz","integrity":"sha512-DIJx3uVLlfPFwD18f5+TpY9SoEqtmiCZogfH4+o5k92I6OeQnfo9krdMXnDAYWEhszeL09OdqdpVTk3VcSFqJQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCEPeRb1WYJLXRnyBdjxlLJDN6gkPdEL8Glc/Z0LmWE4AIhAMPNJGDQuxyl4VUMaJl9qDrbyKeJhGbagFOwsgtmDD54"}]},"directories":{}},"1.4.0":{"name":"preact-render-to-string","version":"1.4.0","description":"Render JSX to an HTML string, with support for Preact components.","main":"dist/index.js","scripts":{"build":"babel src -s -d dist","test":"eslint {src,test} && mocha --compilers js:babel/register test/**/*.js","prepublish":"npm run build","release":"npm run build && git commit -am $npm_package_version && git tag $npm_package_version && git push && git push --tags && npm publish"},"keywords":["preact","render","universal","isomorphic"],"author":{"name":"Jason Miller","email":"jason@developit.ca"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/developit/preact-render-to-string.git"},"bugs":{"url":"https://github.com/developit/preact-render-to-string/issues"},"homepage":"https://github.com/developit/preact-render-to-string","devDependencies":{"babel":"^5.8.23","babel-eslint":"^4.1.3","chai":"^3.3.0","eslint":"^1.7.1","mocha":"^2.3.3","preact":"^1.5.0","sinon":"^1.17.1","sinon-chai":"^2.8.0"},"gitHead":"bd43a74ad7178f2d0e6fae8b6b12370eb26c53fd","_id":"preact-render-to-string@1.4.0","_shasum":"b3d7f15741aed112914e99cc68dbbdb303623c8e","_from":".","_npmVersion":"2.14.7","_nodeVersion":"4.2.2","_npmUser":{"name":"developit","email":"jason@developit.ca"},"maintainers":[{"name":"developit","email":"jason@developit.ca"}],"dist":{"shasum":"b3d7f15741aed112914e99cc68dbbdb303623c8e","tarball":"http://localhost:4545/npm/registry/preact-render-to-string/preact-render-to-string-1.4.0.tgz","integrity":"sha512-hSHv6CSb4wnEyByqYhrdGmxwYJk81a4N5qnJPnWWn+OwO0wfIkMtGpBuoQ74saMwthvjqHCWr63RBCJxtoRdow==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGbeYuOkmt6hbB0SubIMMo0+Vu8K6BaHCRqjJfFxyy58AiEAtS/QCqMMoL2YAZ8OLQBSQfGqaMHLgWOG8jqJ5xQa++M="}]},"directories":{}},"1.4.1":{"name":"preact-render-to-string","version":"1.4.1","description":"Render JSX to an HTML string, with support for Preact components.","main":"dist/index.js","scripts":{"build":"babel src -s -d dist","test":"eslint {src,test} && mocha --compilers js:babel/register test/**/*.js","prepublish":"npm run build","release":"npm run build && git commit -am $npm_package_version && git tag $npm_package_version && git push && git push --tags && npm publish"},"keywords":["preact","render","universal","isomorphic"],"author":{"name":"Jason Miller","email":"jason@developit.ca"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/developit/preact-render-to-string.git"},"bugs":{"url":"https://github.com/developit/preact-render-to-string/issues"},"homepage":"https://github.com/developit/preact-render-to-string","devDependencies":{"babel":"^5.8.23","babel-eslint":"^4.1.3","chai":"^3.3.0","eslint":"^1.7.1","mocha":"^2.3.3","preact":"^1.5.0","sinon":"^1.17.1","sinon-chai":"^2.8.0"},"gitHead":"c12691e24912d4c05ec58956dbedbf5e0b9aeb73","_id":"preact-render-to-string@1.4.1","_shasum":"ba097fa202b12edda941af579f0aec873bdc6246","_from":".","_npmVersion":"2.14.7","_nodeVersion":"4.2.2","_npmUser":{"name":"developit","email":"jason@developit.ca"},"maintainers":[{"name":"developit","email":"jason@developit.ca"}],"dist":{"shasum":"ba097fa202b12edda941af579f0aec873bdc6246","tarball":"http://localhost:4545/npm/registry/preact-render-to-string/preact-render-to-string-1.4.1.tgz","integrity":"sha512-WRqGY5I0kV9+8nkUtDpNXzkeQ3PgyRA42kwiHjCizY0TBql2rRUU9Ytz0HB99eBzvdU8aJzAG0eWfBBeob0T0g==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDEFZuvlXNc3nSmlraXG+ncQFkp3SQoAzQEiM4nb+k7rQIhAO87QbOMW9TJWMXpncWUuhUMmnQBI2WZPgL4lKUG9Xpf"}]},"directories":{}},"1.4.2":{"name":"preact-render-to-string","amdName":"preactRenderToString","version":"1.4.2","description":"Render JSX to an HTML string, with support for Preact components.","main":"dist/index.js","scripts":{"build":"babel src -s -d dist --module-id $npm_package_amdName","test":"eslint {src,test} && mocha --compilers js:babel/register test/**/*.js","prepublish":"npm run build","release":"npm run build && git commit -am $npm_package_version && git tag $npm_package_version && git push && git push --tags && npm publish"},"keywords":["preact","render","universal","isomorphic"],"author":{"name":"Jason Miller","email":"jason@developit.ca"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/developit/preact-render-to-string.git"},"bugs":{"url":"https://github.com/developit/preact-render-to-string/issues"},"homepage":"https://github.com/developit/preact-render-to-string","devDependencies":{"babel":"^5.8.23","babel-eslint":"^4.1.3","chai":"^3.3.0","eslint":"^1.7.1","mocha":"^2.3.3","preact":"^1.5.0","sinon":"^1.17.1","sinon-chai":"^2.8.0"},"gitHead":"aa664a1ab0e2ff79e3c55eb9e3b1503b9708adb3","_id":"preact-render-to-string@1.4.2","_shasum":"87f93a55f9e51fccaa2e3fc0c79dbaec4a186720","_from":".","_npmVersion":"2.14.7","_nodeVersion":"4.2.2","_npmUser":{"name":"developit","email":"jason@developit.ca"},"maintainers":[{"name":"developit","email":"jason@developit.ca"}],"dist":{"shasum":"87f93a55f9e51fccaa2e3fc0c79dbaec4a186720","tarball":"http://localhost:4545/npm/registry/preact-render-to-string/preact-render-to-string-1.4.2.tgz","integrity":"sha512-eZzBDp5Hqdx6S0zFeEwh4mybMvcTYtR6+QJGKSE7rnryRavKhjYVO0buAVRjZiPAKcnhKl4G6RlzPA2NqKrlUg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIB00owOIA4MXfXVmc6WoAZgWvLCaNtFtmNlFiuYu0grjAiEAqtwvJ0W3lCx0DU+h6r/xod6v9uvv2uTikxAXO+ttv6w="}]},"directories":{}},"2.0.0":{"name":"preact-render-to-string","amdName":"preactRenderToString","version":"2.0.0","description":"Render JSX to an HTML string, with support for Preact components.","main":"dist/index.js","scripts":{"build":"babel src -s -d dist --module-id $npm_package_amdName","test":"eslint {src,test} && mocha --compilers js:babel/register test/**/*.js","prepublish":"npm run build","release":"npm run build && git commit -am $npm_package_version && git tag $npm_package_version && git push && git push --tags && npm publish"},"keywords":["preact","render","universal","isomorphic"],"author":{"name":"Jason Miller","email":"jason@developit.ca"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/developit/preact-render-to-string.git"},"bugs":{"url":"https://github.com/developit/preact-render-to-string/issues"},"homepage":"https://github.com/developit/preact-render-to-string","peerDependencies":{"preact":"*"},"devDependencies":{"babel":"^5.8.23","babel-eslint":"^4.1.3","chai":"^3.3.0","eslint":"^1.7.1","mocha":"^2.3.3","preact":"^3.3.0","sinon":"^1.17.1","sinon-chai":"^2.8.0"},"gitHead":"4d32684cb4a73842af91c5290ff6395292f4c838","_id":"preact-render-to-string@2.0.0","_shasum":"d5c9332e168efd37ba8b003b16f9d18f6a90d27b","_from":".","_npmVersion":"2.14.7","_nodeVersion":"4.2.2","_npmUser":{"name":"developit","email":"jason@developit.ca"},"maintainers":[{"name":"developit","email":"jason@developit.ca"}],"dist":{"shasum":"d5c9332e168efd37ba8b003b16f9d18f6a90d27b","tarball":"http://localhost:4545/npm/registry/preact-render-to-string/preact-render-to-string-2.0.0.tgz","integrity":"sha512-EjSvuZVBbga0p6aa6+Zp2wV1EJsF6hyeKhjkO7vm49Y61rp/RFtcERgjIkUfaP+10PvaS6hhEKY5KQo8CinvWQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDJj69fVjFnZE6GK0Wp66IKo29x4/K25PlBQSywVnaBLgIgaolKYdUT0vZ4aDd36/aBkOTGT2RUC9skZfvi3Bw2yxw="}]},"_npmOperationalInternal":{"host":"packages-9-west.internal.npmjs.com","tmp":"tmp/preact-render-to-string-2.0.0.tgz_1455394660354_0.6050198404118419"},"directories":{}},"2.0.1":{"name":"preact-render-to-string","amdName":"preactRenderToString","version":"2.0.1","description":"Render JSX to an HTML string, with support for Preact components.","main":"dist/index.js","scripts":{"build":"babel src -s -d dist --module-id $npm_package_amdName","test":"eslint {src,test} && mocha --compilers js:babel/register test/**/*.js","prepublish":"npm run build","release":"npm run build && git commit -am $npm_package_version && git tag $npm_package_version && git push && git push --tags && npm publish"},"keywords":["preact","render","universal","isomorphic"],"author":{"name":"Jason Miller","email":"jason@developit.ca"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/developit/preact-render-to-string.git"},"bugs":{"url":"https://github.com/developit/preact-render-to-string/issues"},"homepage":"https://github.com/developit/preact-render-to-string","peerDependencies":{"preact":"*"},"devDependencies":{"babel":"^5.8.23","babel-eslint":"^4.1.3","chai":"^3.3.0","eslint":"^1.7.1","mocha":"^2.3.3","preact":"^3.3.0","sinon":"^1.17.1","sinon-chai":"^2.8.0"},"gitHead":"6dca5942ec45726dc9e34ff07e8667b65a002e37","_id":"preact-render-to-string@2.0.1","_shasum":"6af48c711126b21e79b29cc8ad6f48fa3d1ee440","_from":".","_npmVersion":"2.14.7","_nodeVersion":"4.2.2","_npmUser":{"name":"developit","email":"jason@developit.ca"},"maintainers":[{"name":"developit","email":"jason@developit.ca"}],"dist":{"shasum":"6af48c711126b21e79b29cc8ad6f48fa3d1ee440","tarball":"http://localhost:4545/npm/registry/preact-render-to-string/preact-render-to-string-2.0.1.tgz","integrity":"sha512-lyzzUlvx0Z3UYh6/+C+YNtDTC8Ur5wLHvJCNnMHDJgoM0UdLCKBN4rC1WJRdFkJkJc1P80+shJb/puOdYZucsg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBL7NRx961+PR5dtoQPtxfK8eBivjw/w4oWND4mCVZXmAiAITAg+ttYF47oaAsAyn54MtW/m4fYPoVo0QsZXL9n3Xg=="}]},"_npmOperationalInternal":{"host":"packages-9-west.internal.npmjs.com","tmp":"tmp/preact-render-to-string-2.0.1.tgz_1456448417972_0.5634643277153373"},"directories":{}},"2.1.0":{"name":"preact-render-to-string","amdName":"preactRenderToString","version":"2.1.0","description":"Render JSX to an HTML string, with support for Preact components.","main":"dist/index.js","scripts":{"build":"babel src -s -d dist --module-id $npm_package_amdName","test":"eslint {src,test} && mocha --compilers js:babel/register test/**/*.js","prepublish":"npm run build","release":"npm run build && git commit -am $npm_package_version && git tag $npm_package_version && git push && git push --tags && npm publish"},"keywords":["preact","render","universal","isomorphic"],"author":{"name":"Jason Miller","email":"jason@developit.ca"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/developit/preact-render-to-string.git"},"bugs":{"url":"https://github.com/developit/preact-render-to-string/issues"},"homepage":"https://github.com/developit/preact-render-to-string","peerDependencies":{"preact":"*"},"devDependencies":{"babel":"^5.8.23","babel-eslint":"^4.1.3","chai":"^3.3.0","eslint":"^1.7.1","mocha":"^2.3.3","preact":"^4.1.3","sinon":"^1.17.1","sinon-chai":"^2.8.0"},"gitHead":"3c1b2bd12d4c8f33fa01e3c6b4d600ecf275ac3d","_id":"preact-render-to-string@2.1.0","_shasum":"a65b1f8e1e73c5a4a3bf04aeac9d345b588d3779","_from":".","_npmVersion":"2.14.7","_nodeVersion":"4.2.2","_npmUser":{"name":"developit","email":"jason@developit.ca"},"maintainers":[{"name":"developit","email":"jason@developit.ca"}],"dist":{"shasum":"a65b1f8e1e73c5a4a3bf04aeac9d345b588d3779","tarball":"http://localhost:4545/npm/registry/preact-render-to-string/preact-render-to-string-2.1.0.tgz","integrity":"sha512-8BSgGV70KLTZQ7IQtHKnNPDpABtYJ6lAQnMQFdzl2tcEFJ/yy7sjZwVsNPMUttq1g7QNxYzR5xZmcYt4iiADDg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDSs/w8T34Nymk/NsdCOGJBSLk2oZVolvX8bWK4jBgHpQIhAI0K3ozGpLmf+zAnT+hcjDxgOLrn3TQPIojcH2gRf+AF"}]},"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/preact-render-to-string-2.1.0.tgz_1457663513026_0.5987188837025315"},"directories":{}},"2.2.0":{"name":"preact-render-to-string","amdName":"preactRenderToString","version":"2.2.0","description":"Render JSX to an HTML string, with support for Preact components.","main":"dist/index.js","scripts":{"build":"babel src -s -d dist --module-id $npm_package_amdName","test":"eslint {src,test} && mocha --compilers js:babel/register test/**/*.js","prepublish":"npm run build","release":"npm run build && git commit -am $npm_package_version && git tag $npm_package_version && git push && git push --tags && npm publish"},"keywords":["preact","render","universal","isomorphic"],"author":{"name":"Jason Miller","email":"jason@developit.ca"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/developit/preact-render-to-string.git"},"bugs":{"url":"https://github.com/developit/preact-render-to-string/issues"},"homepage":"https://github.com/developit/preact-render-to-string","peerDependencies":{"preact":"*"},"devDependencies":{"babel":"^5.8.23","babel-eslint":"^4.1.3","chai":"^3.3.0","eslint":"^1.7.1","mocha":"^2.3.3","preact":"^4.1.3","sinon":"^1.17.1","sinon-chai":"^2.8.0"},"gitHead":"c51aff18849f13a772ad64edfd94b10e1c94f031","_id":"preact-render-to-string@2.2.0","_shasum":"0e6e4afba560f718a8fa0920c9ff81d23e4426af","_from":".","_npmVersion":"2.14.7","_nodeVersion":"4.2.2","_npmUser":{"name":"developit","email":"jason@developit.ca"},"maintainers":[{"name":"developit","email":"jason@developit.ca"}],"dist":{"shasum":"0e6e4afba560f718a8fa0920c9ff81d23e4426af","tarball":"http://localhost:4545/npm/registry/preact-render-to-string/preact-render-to-string-2.2.0.tgz","integrity":"sha512-X+Ybx+epd298tKUPhzVf24jrsKDG9A8DWfEufE3ui/OLBmlSu6AloN7Q+p+iiWgHkxDs6mfdPQOyduDChXTH9A==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD1B4iVQAtuTXLEpN0nNlu/x0nlTPmYsQNQZmh7g6RSOQIhAJA+QQ7QP07J2U7Da6j2KmpHs+mLx+EFD/+U5FQ/FbWx"}]},"_npmOperationalInternal":{"host":"packages-13-west.internal.npmjs.com","tmp":"tmp/preact-render-to-string-2.2.0.tgz_1458412932388_0.9493610071949661"},"directories":{}},"2.3.0":{"name":"preact-render-to-string","amdName":"preactRenderToString","version":"2.3.0","description":"Render JSX to an HTML string, with support for Preact components.","main":"dist/index.js","scripts":{"build":"babel src -s -d dist --module-id $npm_package_amdName","test":"eslint {src,test} && mocha --compilers js:babel/register test/**/*.js","prepublish":"npm run build","release":"npm run build && git commit -am $npm_package_version && git tag $npm_package_version && git push && git push --tags && npm publish"},"keywords":["preact","render","universal","isomorphic"],"author":{"name":"Jason Miller","email":"jason@developit.ca"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/developit/preact-render-to-string.git"},"bugs":{"url":"https://github.com/developit/preact-render-to-string/issues"},"homepage":"https://github.com/developit/preact-render-to-string","peerDependencies":{"preact":"*"},"devDependencies":{"babel":"^5.8.23","babel-eslint":"^4.1.3","chai":"^3.3.0","eslint":"^1.7.1","mocha":"^2.3.3","preact":"^4.1.3","sinon":"^1.17.1","sinon-chai":"^2.8.0"},"gitHead":"f73b484d5997c4f9d164bfae808182aa12e7f879","_id":"preact-render-to-string@2.3.0","_shasum":"b55ca3ff8b426d6394d1e50439d768ef58a5fa09","_from":".","_npmVersion":"2.14.7","_nodeVersion":"4.2.2","_npmUser":{"name":"developit","email":"jason@developit.ca"},"maintainers":[{"name":"developit","email":"jason@developit.ca"}],"dist":{"shasum":"b55ca3ff8b426d6394d1e50439d768ef58a5fa09","tarball":"http://localhost:4545/npm/registry/preact-render-to-string/preact-render-to-string-2.3.0.tgz","integrity":"sha512-hmmn3IF8USBaiH5NLHWdV79FQu35YKJxOtTDQd/MstZQz9fu9lD4mpYToAvkFlm2tf72Zl4lPD6FIpzx3swXoQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDOOKA3Y9geXJxImJukkuOLf7NOQb1C3QGqtxncHateFgIhAJJq/MxuVb82XQCz0I2R3JpXptn6o56KdNxCTYdc+08E"}]},"_npmOperationalInternal":{"host":"packages-16-east.internal.npmjs.com","tmp":"tmp/preact-render-to-string-2.3.0.tgz_1460593334191_0.8769135847687721"},"directories":{}},"2.4.0":{"name":"preact-render-to-string","amdName":"preactRenderToString","version":"2.4.0","description":"Render JSX to an HTML string, with support for Preact components.","main":"dist/index.js","scripts":{"build":"babel src -s -d dist --module-id $npm_package_amdName","test":"eslint {src,test} && mocha --compilers js:babel/register test/**/*.js","prepublish":"npm run build","release":"npm run build && git commit -am $npm_package_version && git tag $npm_package_version && git push && git push --tags && npm publish"},"keywords":["preact","render","universal","isomorphic"],"author":{"name":"Jason Miller","email":"jason@developit.ca"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/developit/preact-render-to-string.git"},"bugs":{"url":"https://github.com/developit/preact-render-to-string/issues"},"homepage":"https://github.com/developit/preact-render-to-string","peerDependencies":{"preact":"*"},"devDependencies":{"babel":"^5.8.23","babel-eslint":"^4.1.3","chai":"^3.3.0","eslint":"^1.7.1","mocha":"^2.3.3","preact":"^4.1.3","sinon":"^1.17.1","sinon-chai":"^2.8.0"},"gitHead":"e9a99174baee5f25b28ea9b200bb1b010441e28d","_id":"preact-render-to-string@2.4.0","_shasum":"9ce128f8a1a3c4e85c98e9d44d72daa1bd96e1a9","_from":".","_npmVersion":"3.6.0","_nodeVersion":"5.7.1","_npmUser":{"name":"developit","email":"jason@developit.ca"},"maintainers":[{"name":"developit","email":"jason@developit.ca"}],"dist":{"shasum":"9ce128f8a1a3c4e85c98e9d44d72daa1bd96e1a9","tarball":"http://localhost:4545/npm/registry/preact-render-to-string/preact-render-to-string-2.4.0.tgz","integrity":"sha512-p3AZI9nSs4MRochy3VAgTS3zE02A8X70dfuoXg0vXyXH5JIrRwpNzr2O1X5kAdlrbPHHV0oZ+5YI74rMnLu2Jg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDNtz9hDtUufSulYHZ/D8S+zu9PgnnOwUq9QVqSvO0QfQIhAPMtldC953XR+cQRShvquvc444S7GxWTtGEqY6SSVyDD"}]},"_npmOperationalInternal":{"host":"packages-16-east.internal.npmjs.com","tmp":"tmp/preact-render-to-string-2.4.0.tgz_1460598593680_0.63714793859981"},"directories":{}},"2.5.0":{"name":"preact-render-to-string","amdName":"preactRenderToString","version":"2.5.0","description":"Render JSX to an HTML string, with support for Preact components.","main":"dist/index.js","scripts":{"build":"babel src -s -d dist --module-id $npm_package_amdName","test":"eslint {src,test} && mocha --compilers js:babel/register test/**/*.js","prepublish":"npm run build","release":"npm run build && git commit -am $npm_package_version && git tag $npm_package_version && git push && git push --tags && npm publish"},"keywords":["preact","render","universal","isomorphic"],"author":{"name":"Jason Miller","email":"jason@developit.ca"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/developit/preact-render-to-string.git"},"bugs":{"url":"https://github.com/developit/preact-render-to-string/issues"},"homepage":"https://github.com/developit/preact-render-to-string","peerDependencies":{"preact":"*"},"devDependencies":{"babel":"^5.8.23","babel-eslint":"^4.1.3","chai":"^3.3.0","eslint":"^1.7.1","mocha":"^2.3.3","preact":"^4.1.3","sinon":"^1.17.1","sinon-chai":"^2.8.0"},"gitHead":"32db7c9866a717ec8b005f2130e2b99f821d5944","_id":"preact-render-to-string@2.5.0","_shasum":"4462e05be8039fd973d5bd85eceae7c218a1af85","_from":".","_npmVersion":"3.8.8","_nodeVersion":"5.7.1","_npmUser":{"name":"developit","email":"jason@developit.ca"},"maintainers":[{"name":"developit","email":"jason@developit.ca"}],"dist":{"shasum":"4462e05be8039fd973d5bd85eceae7c218a1af85","tarball":"http://localhost:4545/npm/registry/preact-render-to-string/preact-render-to-string-2.5.0.tgz","integrity":"sha512-8n1fTrFO/9HjPEgg36RPKixwkKV6+qkqKQPqKoEwTEpqvYsMMvlObcSn97hOGsjIAUflpdsZXyJNqp21Z2/hDg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCA3KjsF4TfHk4i1w/5uoY1uMWXwCVZDEebJJ5EjbGBgwIhALtsPh3+r4M8Q3JJgMu1HyyebkvcwBbl7MnA69MM7+dq"}]},"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/preact-render-to-string-2.5.0.tgz_1462386180183_0.1501770585309714"},"directories":{}},"2.6.0":{"name":"preact-render-to-string","amdName":"preactRenderToString","version":"2.6.0","description":"Render JSX to an HTML string, with support for Preact components.","main":"dist/index.js","scripts":{"build":"babel src -s -d dist --module-id $npm_package_amdName","test":"eslint {src,test} && mocha --compilers js:babel/register test/**/*.js","prepublish":"npm run build","release":"npm run build && git commit -am $npm_package_version && git tag $npm_package_version && git push && git push --tags && npm publish"},"keywords":["preact","render","universal","isomorphic"],"author":{"name":"Jason Miller","email":"jason@developit.ca"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/developit/preact-render-to-string.git"},"bugs":{"url":"https://github.com/developit/preact-render-to-string/issues"},"homepage":"https://github.com/developit/preact-render-to-string","peerDependencies":{"preact":"*"},"devDependencies":{"babel":"^5.8.23","babel-eslint":"^4.1.3","chai":"^3.3.0","eslint":"^1.7.1","mocha":"^2.3.3","preact":"^4.1.3","sinon":"^1.17.1","sinon-chai":"^2.8.0"},"gitHead":"083124da595f13b87cfc603378b4c67633f01776","_id":"preact-render-to-string@2.6.0","_shasum":"d8fc1274513567976484a26d2b248d0fbc298a44","_from":".","_npmVersion":"3.8.8","_nodeVersion":"5.7.1","_npmUser":{"name":"developit","email":"jason@developit.ca"},"maintainers":[{"name":"developit","email":"jason@developit.ca"}],"dist":{"shasum":"d8fc1274513567976484a26d2b248d0fbc298a44","tarball":"http://localhost:4545/npm/registry/preact-render-to-string/preact-render-to-string-2.6.0.tgz","integrity":"sha512-j38Tgm9phsL2nxNN1SpMyexMcgq6UcV+LDU0yvC4Chid1sP9os1hnS/XaMsBinWsisYh60hGSRJIBqGlK2wHUw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGLcjlj6gNgzQJ1IbLsZwOuAHy9U6zHA3i1SS1bYBDrMAiEAupCGvEZf0XXE2WjJiFdsz9JlZqP96JF2kss+MTnrgGE="}]},"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/preact-render-to-string-2.6.0.tgz_1463776428409_0.04915579198859632"},"directories":{}},"2.6.1":{"name":"preact-render-to-string","amdName":"preactRenderToString","version":"2.6.1","description":"Render JSX to an HTML string, with support for Preact components.","main":"dist/index.js","scripts":{"build":"babel src -s -d dist --module-id $npm_package_amdName","test":"eslint {src,test} && mocha --compilers js:babel/register test/**/*.js","prepublish":"npm run build","release":"npm run build && git commit -am $npm_package_version && git tag $npm_package_version && git push && git push --tags && npm publish"},"keywords":["preact","render","universal","isomorphic"],"author":{"name":"Jason Miller","email":"jason@developit.ca"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/developit/preact-render-to-string.git"},"bugs":{"url":"https://github.com/developit/preact-render-to-string/issues"},"homepage":"https://github.com/developit/preact-render-to-string","peerDependencies":{"preact":"*"},"devDependencies":{"babel":"^5.8.23","babel-eslint":"^4.1.3","chai":"^3.3.0","eslint":"^1.7.1","mocha":"^2.3.3","preact":"^4.1.3","sinon":"^1.17.1","sinon-chai":"^2.8.0"},"gitHead":"97b440e3f9593dadb92c46c1994f9a259477886f","_id":"preact-render-to-string@2.6.1","_shasum":"0091b9207e462dea5833d3c7bcb4cb5586105592","_from":".","_npmVersion":"3.8.8","_nodeVersion":"5.7.1","_npmUser":{"name":"developit","email":"jason@developit.ca"},"maintainers":[{"name":"developit","email":"jason@developit.ca"}],"dist":{"shasum":"0091b9207e462dea5833d3c7bcb4cb5586105592","tarball":"http://localhost:4545/npm/registry/preact-render-to-string/preact-render-to-string-2.6.1.tgz","integrity":"sha512-wjN824WG/xwR7aoY23GZhoISICYg9kqsPIfLzaOBpa8EeUM1UFpYRINcBl+adU9n/Pi+3uLl6xqFNutX8vdjaw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFlsD5l/4g3MMlzc1X7iU0sFE+gRVAu4ro+HC2ZV7iFhAiEAnSMqOmZK/YFcKpegLAxlvjTaOg//gndsLzIFhW45QZ4="}]},"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/preact-render-to-string-2.6.1.tgz_1467260698250_0.20439230068586767"},"directories":{}},"2.7.0":{"name":"preact-render-to-string","amdName":"preactRenderToString","version":"2.7.0","description":"Render JSX to an HTML string, with support for Preact components.","main":"dist/index.js","jsnext:main":"src/index.js","scripts":{"build":"rollup -c rollup.config.js -m ${npm_package_main}.map -f umd -n $npm_package_amdName $npm_package_jsnext_main -o $npm_package_main","test":"eslint {src,test} && mocha --compilers js:babel-register test/**/*.js","prepublish":"npm run build","release":"npm run build && git commit -am $npm_package_version && git tag $npm_package_version && git push && git push --tags && npm publish"},"keywords":["preact","render","universal","isomorphic"],"author":{"name":"Jason Miller","email":"jason@developit.ca"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/developit/preact-render-to-string.git"},"bugs":{"url":"https://github.com/developit/preact-render-to-string/issues"},"homepage":"https://github.com/developit/preact-render-to-string","peerDependencies":{"preact":"*"},"devDependencies":{"babel-cli":"^6.11.4","babel-core":"^6.11.4","babel-eslint":"^6.1.2","babel-plugin-transform-class-properties":"^6.10.2","babel-plugin-transform-react-jsx":"^6.8.0","babel-preset-es2015":"^6.9.0","babel-preset-es2015-minimal":"^2.0.0","babel-preset-es2015-minimal-rollup":"^2.0.0","babel-preset-stage-0":"^6.5.0","babel-register":"^6.9.0","chai":"^3.3.0","eslint":"^3.1.1","mocha":"^2.3.3","preact":"^5.5.0","rollup":"^0.34.1","rollup-plugin-babel":"^2.6.1","rollup-plugin-memory":"^1.0.0","sinon":"^1.17.1","sinon-chai":"^2.8.0"},"gitHead":"f427452b99a08a70204fab8024a1bf4f9a1697f0","_id":"preact-render-to-string@2.7.0","_shasum":"a2a0301c5248c2a189375691a338088295f2757c","_from":".","_npmVersion":"3.8.8","_nodeVersion":"5.7.1","_npmUser":{"name":"developit","email":"jason@developit.ca"},"maintainers":[{"name":"developit","email":"jason@developit.ca"}],"dist":{"shasum":"a2a0301c5248c2a189375691a338088295f2757c","tarball":"http://localhost:4545/npm/registry/preact-render-to-string/preact-render-to-string-2.7.0.tgz","integrity":"sha512-9aImKZleAt3UMfReskm0rJItDetK2vP0v/Qq0hkH38QdgOH2xsF0l8k/QR1Mx7OS5jgohYDMc5MG8ATCaTc2PA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDanR6U1tauaOn41hPxoDLix1xwnLPN1DGi6SLJTswhDQIgNAL0UdXCYpXA/Ymz/vDkLv4hl4w0sGxJDiO/6WlFKYA="}]},"_npmOperationalInternal":{"host":"packages-16-east.internal.npmjs.com","tmp":"tmp/preact-render-to-string-2.7.0.tgz_1469205118038_0.5595315762329847"},"directories":{}},"2.8.0":{"name":"preact-render-to-string","amdName":"preactRenderToString","version":"2.8.0","description":"Render JSX to an HTML string, with support for Preact components.","main":"dist/index.js","jsnext:main":"src/index.js","scripts":{"build":"rollup -c rollup.config.js -m ${npm_package_main}.map -f umd -n $npm_package_amdName $npm_package_jsnext_main -o $npm_package_main","test":"eslint {src,test} && mocha --compilers js:babel-register test/**/*.js","prepublish":"npm run build","release":"npm run build && git commit -am $npm_package_version && git tag $npm_package_version && git push && git push --tags && npm publish"},"keywords":["preact","render","universal","isomorphic"],"author":{"name":"Jason Miller","email":"jason@developit.ca"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/developit/preact-render-to-string.git"},"bugs":{"url":"https://github.com/developit/preact-render-to-string/issues"},"homepage":"https://github.com/developit/preact-render-to-string","peerDependencies":{"preact":"*"},"devDependencies":{"babel-cli":"^6.11.4","babel-core":"^6.11.4","babel-eslint":"^6.1.2","babel-plugin-transform-class-properties":"^6.10.2","babel-plugin-transform-react-jsx":"^6.8.0","babel-preset-es2015":"^6.9.0","babel-preset-es2015-minimal":"^2.0.0","babel-preset-es2015-minimal-rollup":"^2.0.0","babel-preset-stage-0":"^6.5.0","babel-register":"^6.9.0","chai":"^3.3.0","eslint":"^3.1.1","mocha":"^2.3.3","preact":"^5.5.0","rollup":"^0.34.1","rollup-plugin-babel":"^2.6.1","rollup-plugin-memory":"^1.0.0","sinon":"^1.17.1","sinon-chai":"^2.8.0"},"gitHead":"e56ff70f55a77e1988b7d94c2f9688e25e5c84bc","_id":"preact-render-to-string@2.8.0","_shasum":"71651925f9f5564c88a4402007879e43fcfda58f","_from":".","_npmVersion":"3.8.8","_nodeVersion":"5.7.1","_npmUser":{"name":"developit","email":"jason@developit.ca"},"maintainers":[{"name":"developit","email":"jason@developit.ca"}],"dist":{"shasum":"71651925f9f5564c88a4402007879e43fcfda58f","tarball":"http://localhost:4545/npm/registry/preact-render-to-string/preact-render-to-string-2.8.0.tgz","integrity":"sha512-rm+W5lfTvJuyXkmiDdSGisttQmZyZqODaLUMsQfNJKxfG2FW/ZDVXPKkjJmUJ0fVf9AibByOaN7FlWtj0wyU8A==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAiKuTsfLoSl+YRvM4kgTqmfXt/RSdLIul2V2cpGOHCDAiEAkIV3/UGwwInaq0YPnRNeID9aPgjNPjYYY+nG6dokoGM="}]},"_npmOperationalInternal":{"host":"packages-16-east.internal.npmjs.com","tmp":"tmp/preact-render-to-string-2.8.0.tgz_1469825166707_0.4573037042282522"},"directories":{}},"3.0.0":{"name":"preact-render-to-string","amdName":"preactRenderToString","version":"3.0.0","description":"Render JSX to an HTML string, with support for Preact components.","main":"dist/index.js","jsnext:main":"src/index.js","scripts":{"build":"rollup -c rollup.config.js -m ${npm_package_main}.map -f umd -n $npm_package_amdName $npm_package_jsnext_main -o $npm_package_main","test":"eslint {src,test} && mocha --compilers js:babel-register test/**/*.js","prepublish":"npm run build","release":"npm run build && git commit -am $npm_package_version && git tag $npm_package_version && git push && git push --tags && npm publish"},"keywords":["preact","render","universal","isomorphic"],"author":{"name":"Jason Miller","email":"jason@developit.ca"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/developit/preact-render-to-string.git"},"bugs":{"url":"https://github.com/developit/preact-render-to-string/issues"},"homepage":"https://github.com/developit/preact-render-to-string","peerDependencies":{"preact":"*"},"devDependencies":{"babel-cli":"^6.11.4","babel-core":"^6.11.4","babel-eslint":"^6.1.2","babel-plugin-transform-class-properties":"^6.10.2","babel-plugin-transform-react-jsx":"^6.8.0","babel-preset-es2015":"^6.9.0","babel-preset-es2015-minimal":"^2.0.0","babel-preset-es2015-minimal-rollup":"^2.0.0","babel-preset-stage-0":"^6.5.0","babel-register":"^6.9.0","chai":"^3.5.0","eslint":"^3.1.1","mocha":"^3.0.0","preact":"^5.5.0","rollup":"^0.34.2","rollup-plugin-babel":"^2.6.1","rollup-plugin-memory":"^1.0.0","sinon":"^1.17.5","sinon-chai":"^2.8.0"},"dependencies":{"pretty-format":"^3.5.1"},"gitHead":"9c238b7d3c9fc452e321b1b362e7f14fc89a6b59","_id":"preact-render-to-string@3.0.0","_shasum":"55934fa46d9eebdacf5bc3239b302157e6b6977a","_from":".","_npmVersion":"3.10.3","_nodeVersion":"6.3.0","_npmUser":{"name":"developit","email":"jason@developit.ca"},"maintainers":[{"name":"developit","email":"jason@developit.ca"}],"dist":{"shasum":"55934fa46d9eebdacf5bc3239b302157e6b6977a","tarball":"http://localhost:4545/npm/registry/preact-render-to-string/preact-render-to-string-3.0.0.tgz","integrity":"sha512-ohXeLlGQ8C3F0jBVfQEPoTuEt6nXVfVta2+nuJ+ScYfqK+dGaxzvY2Mobr8p0sWLrjZ0gK6xfunT3JFbz/fjuQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDVA+gjlHfJLkg/asXjRa/ercdZUxEiIom0oAkhmgplIAiEApiWlnEUX9xOmyNVZR1wHEcxFtdnkcLZNjaLdp4jg4bI="}]},"_npmOperationalInternal":{"host":"packages-16-east.internal.npmjs.com","tmp":"tmp/preact-render-to-string-3.0.0.tgz_1470179644966_0.06930288602598011"},"directories":{}},"3.0.1":{"name":"preact-render-to-string","amdName":"preactRenderToString","version":"3.0.1","description":"Render JSX to an HTML string, with support for Preact components.","main":"dist/index.js","jsnext:main":"src/index.js","scripts":{"build":"npm run -s transpile && npm run -s transpile:jsx","transpile":"rollup -c rollup.config.js -m ${npm_package_main}.map -f umd -n $npm_package_amdName $npm_package_jsnext_main -o $npm_package_main","transpile:jsx":"ENTRY=jsx rollup -c rollup.config.js -m dist/jsx.js.map -f umd -n $npm_package_amdName src/jsx.js -o dist/jsx.js","test":"eslint {src,test} && mocha --compilers js:babel-register test/**/*.js","prepublish":"npm run build","release":"npm run build && git commit -am $npm_package_version && git tag $npm_package_version && git push && git push --tags && npm publish"},"keywords":["preact","render","universal","isomorphic"],"author":{"name":"Jason Miller","email":"jason@developit.ca"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/developit/preact-render-to-string.git"},"bugs":{"url":"https://github.com/developit/preact-render-to-string/issues"},"homepage":"https://github.com/developit/preact-render-to-string","peerDependencies":{"preact":"*"},"devDependencies":{"babel-cli":"^6.11.4","babel-core":"^6.11.4","babel-eslint":"^6.1.2","babel-plugin-transform-class-properties":"^6.10.2","babel-plugin-transform-react-jsx":"^6.8.0","babel-preset-es2015":"^6.9.0","babel-preset-es2015-minimal":"^2.0.0","babel-preset-es2015-minimal-rollup":"^2.0.0","babel-preset-stage-0":"^6.5.0","babel-register":"^6.9.0","chai":"^3.5.0","eslint":"^3.2.2","mocha":"^3.0.0","preact":"^5.5.0","rollup":"^0.34.3","rollup-plugin-babel":"^2.6.1","rollup-plugin-commonjs":"^3.3.1","rollup-plugin-memory":"^1.0.0","rollup-plugin-node-resolve":"^2.0.0","sinon":"^1.17.5","sinon-chai":"^2.8.0"},"dependencies":{"pretty-format":"^3.5.1"},"gitHead":"06361339c59b7f89c5d8541c3e3a21d74235d056","_id":"preact-render-to-string@3.0.1","_shasum":"a53361a0055d57b7a9b59413c8ff181be4fc4eaa","_from":".","_npmVersion":"3.10.3","_nodeVersion":"6.3.0","_npmUser":{"name":"developit","email":"jason@developit.ca"},"maintainers":[{"name":"developit","email":"jason@developit.ca"}],"dist":{"shasum":"a53361a0055d57b7a9b59413c8ff181be4fc4eaa","tarball":"http://localhost:4545/npm/registry/preact-render-to-string/preact-render-to-string-3.0.1.tgz","integrity":"sha512-8ZjyQXJsfecUNV10lDSzapjHnr0+ww+Zwdff8pP3oETMUYuJHQp5v1S2nj9VdPjnL1C8APVX3wzcJVyjradCVw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFSOaioPJpXyXA3xcZgxLndyLNdF/PSXRQ6xNfoI5VabAiEA6FXPNX4huwt0E2hQVUNkU+09EvYzIdxd70mhka66u54="}]},"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/preact-render-to-string-3.0.1.tgz_1470184274802_0.8222252330742776"},"directories":{}},"3.0.2":{"name":"preact-render-to-string","amdName":"preactRenderToString","version":"3.0.2","description":"Render JSX to an HTML string, with support for Preact components.","main":"dist/index.js","jsnext:main":"src/index.js","scripts":{"build":"npm run -s transpile && npm run -s transpile:jsx","transpile":"rollup -c rollup.config.js -m ${npm_package_main}.map -f umd -n $npm_package_amdName $npm_package_jsnext_main -o $npm_package_main","transpile:jsx":"ENTRY=jsx rollup -c rollup.config.js -m dist/jsx.js.map -f umd -n $npm_package_amdName src/jsx.js -o dist/jsx.js","test":"eslint {src,test} && mocha --compilers js:babel-register test/**/*.js","prepublish":"npm run build","release":"npm run build && git commit -am $npm_package_version && git tag $npm_package_version && git push && git push --tags && npm publish"},"keywords":["preact","render","universal","isomorphic"],"author":{"name":"Jason Miller","email":"jason@developit.ca"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/developit/preact-render-to-string.git"},"bugs":{"url":"https://github.com/developit/preact-render-to-string/issues"},"homepage":"https://github.com/developit/preact-render-to-string","peerDependencies":{"preact":"*"},"devDependencies":{"babel-cli":"^6.11.4","babel-core":"^6.11.4","babel-eslint":"^6.1.2","babel-plugin-transform-class-properties":"^6.10.2","babel-plugin-transform-react-jsx":"^6.8.0","babel-preset-es2015":"^6.9.0","babel-preset-es2015-minimal":"^2.0.0","babel-preset-es2015-minimal-rollup":"^2.0.0","babel-preset-stage-0":"^6.5.0","babel-register":"^6.9.0","chai":"^3.5.0","eslint":"^3.2.2","mocha":"^3.0.0","preact":"^5.5.0","rollup":"^0.34.3","rollup-plugin-babel":"^2.6.1","rollup-plugin-commonjs":"^3.3.1","rollup-plugin-memory":"^1.0.0","rollup-plugin-node-resolve":"^2.0.0","sinon":"^1.17.5","sinon-chai":"^2.8.0"},"dependencies":{"pretty-format":"^3.5.1"},"gitHead":"047a7302df82ae9b7e5baf05c025c2dc6e8b6c3a","_id":"preact-render-to-string@3.0.2","_shasum":"dbadb25ba1941acf7e74f0a036312ed6522de191","_from":".","_npmVersion":"3.10.3","_nodeVersion":"6.3.0","_npmUser":{"name":"developit","email":"jason@developit.ca"},"maintainers":[{"name":"developit","email":"jason@developit.ca"}],"dist":{"shasum":"dbadb25ba1941acf7e74f0a036312ed6522de191","tarball":"http://localhost:4545/npm/registry/preact-render-to-string/preact-render-to-string-3.0.2.tgz","integrity":"sha512-eiWyGwZdTkHWYPTfSV0dgSP694fjz4wMYjXiV9tdejLMdJnpK4P3nne+QGneKGi+uv8eGrg3Yqgih/VBPT/evw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDlSOrSJx9pK2ZKe69up7mZCj2i42bI6iBgqOyRrrOYZAIhAMbD2c8f4HpQ7+l8qd5bL8/Xl3y1UYWD/DVtw/CIKQFE"}]},"_npmOperationalInternal":{"host":"packages-16-east.internal.npmjs.com","tmp":"tmp/preact-render-to-string-3.0.2.tgz_1470185019691_0.22728682914748788"},"directories":{}},"3.0.3":{"name":"preact-render-to-string","amdName":"preactRenderToString","version":"3.0.3","description":"Render JSX to an HTML string, with support for Preact components.","main":"dist/index.js","jsnext:main":"src/index.js","scripts":{"build":"npm run -s transpile && npm run -s transpile:jsx","transpile":"rollup -c rollup.config.js -m ${npm_package_main}.map -f umd -n $npm_package_amdName $npm_package_jsnext_main -o $npm_package_main","transpile:jsx":"ENTRY=jsx rollup -c rollup.config.js -m dist/jsx.js.map -f umd -n $npm_package_amdName src/jsx.js -o dist/jsx.js","test":"eslint {src,test} && mocha --compilers js:babel-register test/**/*.js","prepublish":"npm run build","release":"npm run build && git commit -am $npm_package_version && git tag $npm_package_version && git push && git push --tags && npm publish"},"keywords":["preact","render","universal","isomorphic"],"author":{"name":"Jason Miller","email":"jason@developit.ca"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/developit/preact-render-to-string.git"},"bugs":{"url":"https://github.com/developit/preact-render-to-string/issues"},"homepage":"https://github.com/developit/preact-render-to-string","peerDependencies":{"preact":"*"},"devDependencies":{"babel-cli":"^6.11.4","babel-core":"^6.11.4","babel-eslint":"^6.1.2","babel-plugin-transform-class-properties":"^6.10.2","babel-plugin-transform-react-jsx":"^6.8.0","babel-preset-es2015":"^6.9.0","babel-preset-es2015-minimal":"^2.0.0","babel-preset-es2015-minimal-rollup":"^2.0.0","babel-preset-stage-0":"^6.5.0","babel-register":"^6.9.0","chai":"^3.5.0","eslint":"^3.2.2","mocha":"^3.0.0","preact":"^5.5.0","rollup":"^0.34.3","rollup-plugin-babel":"^2.6.1","rollup-plugin-commonjs":"^3.3.1","rollup-plugin-memory":"^1.0.0","rollup-plugin-node-resolve":"^2.0.0","sinon":"^1.17.5","sinon-chai":"^2.8.0"},"dependencies":{"pretty-format":"^3.5.1"},"gitHead":"488bcbc3cf7bc9ce58b43412ee3bae9a8f0ba531","_id":"preact-render-to-string@3.0.3","_shasum":"de6bd3daa56b25a461d1ec5dcb448c1b4346b677","_from":".","_npmVersion":"3.10.3","_nodeVersion":"6.3.0","_npmUser":{"name":"developit","email":"jason@developit.ca"},"maintainers":[{"name":"developit","email":"jason@developit.ca"}],"dist":{"shasum":"de6bd3daa56b25a461d1ec5dcb448c1b4346b677","tarball":"http://localhost:4545/npm/registry/preact-render-to-string/preact-render-to-string-3.0.3.tgz","integrity":"sha512-d3h2odP7caW9BOEGCaJQp/oK45qrmAE/T/DTarf61vbNaJlSh/gEVuZW5POxnbvI++W+7D5U3dFh3tM3PpTJsw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDJNy/v2jgq0EarzjmnV5m584+CyFQ+i/APsKLtTMsaHQIgcCUoveUswmzWwqK+aDXb0IJHTVoDI8AjgtQTOUkGuhU="}]},"_npmOperationalInternal":{"host":"packages-16-east.internal.npmjs.com","tmp":"tmp/preact-render-to-string-3.0.3.tgz_1470186134586_0.15303457411937416"},"directories":{}},"3.0.4":{"name":"preact-render-to-string","amdName":"preactRenderToString","version":"3.0.4","description":"Render JSX to an HTML string, with support for Preact components.","main":"dist/index.js","jsnext:main":"src/index.js","scripts":{"build":"npm run -s transpile && npm run -s transpile:jsx","transpile":"rollup -c rollup.config.js -m ${npm_package_main}.map -f umd -n $npm_package_amdName $npm_package_jsnext_main -o $npm_package_main","transpile:jsx":"ENTRY=jsx rollup -c rollup.config.js -m dist/jsx.js.map -f umd -n $npm_package_amdName src/jsx.js -o dist/jsx.js","test":"eslint {src,test} && mocha --compilers js:babel-register test/**/*.js","prepublish":"npm run build","release":"npm run build && git commit -am $npm_package_version && git tag $npm_package_version && git push && git push --tags && npm publish"},"keywords":["preact","render","universal","isomorphic"],"author":{"name":"Jason Miller","email":"jason@developit.ca"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/developit/preact-render-to-string.git"},"bugs":{"url":"https://github.com/developit/preact-render-to-string/issues"},"homepage":"https://github.com/developit/preact-render-to-string","peerDependencies":{"preact":"*"},"devDependencies":{"babel-cli":"^6.11.4","babel-core":"^6.11.4","babel-eslint":"^6.1.2","babel-plugin-transform-class-properties":"^6.10.2","babel-plugin-transform-react-jsx":"^6.8.0","babel-preset-es2015":"^6.9.0","babel-preset-es2015-minimal":"^2.0.0","babel-preset-es2015-minimal-rollup":"^2.0.0","babel-preset-stage-0":"^6.5.0","babel-register":"^6.9.0","chai":"^3.5.0","eslint":"^3.2.2","mocha":"^3.0.0","preact":"^5.5.0","rollup":"^0.34.3","rollup-plugin-babel":"^2.6.1","rollup-plugin-commonjs":"^3.3.1","rollup-plugin-memory":"^1.0.0","rollup-plugin-node-resolve":"^2.0.0","sinon":"^1.17.5","sinon-chai":"^2.8.0"},"dependencies":{"pretty-format":"^3.5.1"},"gitHead":"b661daa52c9fc5ad3cb270fc0558746a09517ff5","_id":"preact-render-to-string@3.0.4","_shasum":"d1fb8ef0cc1ee341ab5f34c0190241fe91a85297","_from":".","_npmVersion":"3.10.3","_nodeVersion":"6.3.0","_npmUser":{"name":"developit","email":"jason@developit.ca"},"maintainers":[{"name":"developit","email":"jason@developit.ca"}],"dist":{"shasum":"d1fb8ef0cc1ee341ab5f34c0190241fe91a85297","tarball":"http://localhost:4545/npm/registry/preact-render-to-string/preact-render-to-string-3.0.4.tgz","integrity":"sha512-z+i1GYp4cK+UUpXF4UT7KsqjnFoGKse/mzCr7rkSrNzsfp0HJoS6evHH0YgREUsR1qbgVHtAaF7jCR0IU3PaWg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDrP39kGjuAuPFUN/MueN3buL97IXjCEFKGtCgv1AMHLAiEAgRpYB06GUgTanUOwHMO9MBL5A8cKJGVpYgCrVTrcGEo="}]},"_npmOperationalInternal":{"host":"packages-16-east.internal.npmjs.com","tmp":"tmp/preact-render-to-string-3.0.4.tgz_1470187728871_0.19358531315810978"},"directories":{}},"3.0.5":{"name":"preact-render-to-string","amdName":"preactRenderToString","version":"3.0.5","description":"Render JSX to an HTML string, with support for Preact components.","main":"dist/index.js","jsnext:main":"src/index.js","scripts":{"build":"npm run -s transpile && npm run -s transpile:jsx","transpile":"rollup -c rollup.config.js -m ${npm_package_main}.map -f umd -n $npm_package_amdName $npm_package_jsnext_main -o $npm_package_main","transpile:jsx":"ENTRY=jsx rollup -c rollup.config.js -m dist/jsx.js.map -f umd -n $npm_package_amdName src/jsx.js -o dist/jsx.js","test":"eslint {src,test} && mocha --compilers js:babel-register test/**/*.js","prepublish":"npm run build","release":"npm run build && git commit -am $npm_package_version && git tag $npm_package_version && git push && git push --tags && npm publish"},"keywords":["preact","render","universal","isomorphic"],"author":{"name":"Jason Miller","email":"jason@developit.ca"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/developit/preact-render-to-string.git"},"bugs":{"url":"https://github.com/developit/preact-render-to-string/issues"},"homepage":"https://github.com/developit/preact-render-to-string","peerDependencies":{"preact":"*"},"devDependencies":{"babel-cli":"^6.11.4","babel-core":"^6.11.4","babel-eslint":"^6.1.2","babel-plugin-transform-class-properties":"^6.10.2","babel-plugin-transform-react-jsx":"^6.8.0","babel-preset-es2015":"^6.9.0","babel-preset-es2015-minimal":"^2.0.0","babel-preset-es2015-minimal-rollup":"^2.0.0","babel-preset-stage-0":"^6.5.0","babel-register":"^6.9.0","chai":"^3.5.0","eslint":"^3.2.2","mocha":"^3.0.0","preact":"^5.5.0","rollup":"^0.34.3","rollup-plugin-babel":"^2.6.1","rollup-plugin-commonjs":"^3.3.1","rollup-plugin-memory":"^1.0.0","rollup-plugin-node-resolve":"^2.0.0","sinon":"^1.17.5","sinon-chai":"^2.8.0"},"dependencies":{"pretty-format":"^3.5.1"},"gitHead":"6996c913de89435bb2611a8b9d65ccfa9f3646b8","_id":"preact-render-to-string@3.0.5","_shasum":"120f472a58e5abef37868464c67615be440ed30b","_from":".","_npmVersion":"3.10.3","_nodeVersion":"6.3.1","_npmUser":{"name":"developit","email":"jason@developit.ca"},"maintainers":[{"name":"developit","email":"jason@developit.ca"}],"dist":{"shasum":"120f472a58e5abef37868464c67615be440ed30b","tarball":"http://localhost:4545/npm/registry/preact-render-to-string/preact-render-to-string-3.0.5.tgz","integrity":"sha512-vCK55jehckwkkZhMqMaAdOasGpv6hNRwpkf8189BWx77PJaFwjKY+2AQjzgpDeUw+U/x18JmZ4z4+CAuPmsYzA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIB203B1EQskZGTdLUa3pM4qn7OE9N19BN5Ugf/P3gFHiAiABBxiVkopH3+VDLIBWxIrgJqHE8gc+GFKvdq5DDKpa1g=="}]},"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/preact-render-to-string-3.0.5.tgz_1470264923015_0.09949428541585803"},"directories":{}},"3.0.6":{"name":"preact-render-to-string","amdName":"preactRenderToString","version":"3.0.6","description":"Render JSX to an HTML string, with support for Preact components.","main":"dist/index.js","jsnext:main":"src/index.js","scripts":{"build":"npm run -s transpile && npm run -s transpile:jsx","transpile":"rollup -c rollup.config.js -m ${npm_package_main}.map -f umd -n $npm_package_amdName $npm_package_jsnext_main -o $npm_package_main","transpile:jsx":"ENTRY=jsx rollup -c rollup.config.js -m dist/jsx.js.map -f umd -n $npm_package_amdName src/jsx.js -o dist/jsx.js","test":"eslint {src,test} && mocha --compilers js:babel-register test/**/*.js","prepublish":"npm run build","release":"npm run build && git commit -am $npm_package_version && git tag $npm_package_version && git push && git push --tags && npm publish"},"keywords":["preact","render","universal","isomorphic"],"author":{"name":"Jason Miller","email":"jason@developit.ca"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/developit/preact-render-to-string.git"},"bugs":{"url":"https://github.com/developit/preact-render-to-string/issues"},"homepage":"https://github.com/developit/preact-render-to-string","peerDependencies":{"preact":"*"},"devDependencies":{"babel-cli":"^6.11.4","babel-core":"^6.11.4","babel-eslint":"^6.1.2","babel-plugin-transform-class-properties":"^6.10.2","babel-plugin-transform-react-jsx":"^6.8.0","babel-preset-es2015":"^6.9.0","babel-preset-es2015-minimal":"^2.0.0","babel-preset-es2015-minimal-rollup":"^2.0.0","babel-preset-stage-0":"^6.5.0","babel-register":"^6.9.0","chai":"^3.5.0","eslint":"^3.2.2","mocha":"^3.0.0","preact":"^5.5.0","rollup":"^0.34.3","rollup-plugin-babel":"^2.6.1","rollup-plugin-commonjs":"^3.3.1","rollup-plugin-memory":"^1.0.0","rollup-plugin-node-resolve":"^2.0.0","sinon":"^1.17.5","sinon-chai":"^2.8.0"},"dependencies":{"pretty-format":"^3.5.1"},"gitHead":"7c38a65b1a233aaeaf9d2c3172e7684552da5a88","_id":"preact-render-to-string@3.0.6","_shasum":"3652de0c35d625e27d0d081651f5e3989ce9a472","_from":".","_npmVersion":"3.10.3","_nodeVersion":"6.3.1","_npmUser":{"name":"developit","email":"jason@developit.ca"},"maintainers":[{"name":"developit","email":"jason@developit.ca"}],"dist":{"shasum":"3652de0c35d625e27d0d081651f5e3989ce9a472","tarball":"http://localhost:4545/npm/registry/preact-render-to-string/preact-render-to-string-3.0.6.tgz","integrity":"sha512-y36/L2IaAeIhV32+hi4S+GGxnXzYigogmnFDrHqoN+yLMRNoBeBP1UyrIrh4LL1YrJCDWiSjB6CAW7otv3zZUA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD81noTFr+Ndo8xv2UbSLESO4VPXcScpnv8fOh4tgeAygIhAJcy8VoBH9AUO2ZNWDY/lqZwdU3PDF5JzYivDzsT78SY"}]},"_npmOperationalInternal":{"host":"packages-16-east.internal.npmjs.com","tmp":"tmp/preact-render-to-string-3.0.6.tgz_1470769055278_0.6115790456533432"},"directories":{}},"3.0.7":{"name":"preact-render-to-string","amdName":"preactRenderToString","version":"3.0.7","description":"Render JSX to an HTML string, with support for Preact components.","main":"dist/index.js","jsnext:main":"src/index.js","scripts":{"build":"npm run -s transpile && npm run -s transpile:jsx","transpile":"rollup -c rollup.config.js -m ${npm_package_main}.map -f umd -n $npm_package_amdName $npm_package_jsnext_main -o $npm_package_main","transpile:jsx":"ENTRY=jsx rollup -c rollup.config.js -m dist/jsx.js.map -f umd -n $npm_package_amdName src/jsx.js -o dist/jsx.js","test":"eslint {src,test} && mocha --compilers js:babel-register test/**/*.js","prepublish":"npm run build","release":"npm run build && git commit -am $npm_package_version && git tag $npm_package_version && git push && git push --tags && npm publish"},"keywords":["preact","render","universal","isomorphic"],"author":{"name":"Jason Miller","email":"jason@developit.ca"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/developit/preact-render-to-string.git"},"bugs":{"url":"https://github.com/developit/preact-render-to-string/issues"},"homepage":"https://github.com/developit/preact-render-to-string","peerDependencies":{"preact":"*"},"devDependencies":{"babel-cli":"^6.11.4","babel-core":"^6.11.4","babel-eslint":"^6.1.2","babel-plugin-transform-class-properties":"^6.10.2","babel-plugin-transform-react-jsx":"^6.8.0","babel-preset-es2015":"^6.9.0","babel-preset-es2015-minimal":"^2.0.0","babel-preset-es2015-minimal-rollup":"^2.0.0","babel-preset-stage-0":"^6.5.0","babel-register":"^6.9.0","chai":"^3.5.0","eslint":"^3.2.2","mocha":"^3.0.0","preact":"^5.5.0","rollup":"^0.34.3","rollup-plugin-babel":"^2.6.1","rollup-plugin-commonjs":"^3.3.1","rollup-plugin-memory":"^1.0.0","rollup-plugin-node-resolve":"^2.0.0","sinon":"^1.17.5","sinon-chai":"^2.8.0"},"dependencies":{"pretty-format":"^3.5.1"},"gitHead":"49abb38cca713571d0a3b620f91813ee41e1fc3c","_id":"preact-render-to-string@3.0.7","_shasum":"3e8232fc8c36787250ef8f62d8f6b07ddb2e2317","_from":".","_npmVersion":"3.10.3","_nodeVersion":"6.3.1","_npmUser":{"name":"developit","email":"jason@developit.ca"},"maintainers":[{"name":"developit","email":"jason@developit.ca"}],"dist":{"shasum":"3e8232fc8c36787250ef8f62d8f6b07ddb2e2317","tarball":"http://localhost:4545/npm/registry/preact-render-to-string/preact-render-to-string-3.0.7.tgz","integrity":"sha512-JdZmk4pnFY8cuGhVN829wiGZiH0Oz61/dM4Rw7pKhUKeQAMvlsKr0u23HKwksKO2CTiwGz5Nm+/JygykIRnOmg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAY5HhIQJgOkV4kUsXaO7FHfsOomtiM1o2lif8778SAPAiANa5Uk59wx/9quciyhf1YHeAD5HSqBuDyEFtOSwvncLw=="}]},"_npmOperationalInternal":{"host":"packages-16-east.internal.npmjs.com","tmp":"tmp/preact-render-to-string-3.0.7.tgz_1470770698999_0.8741202023811638"},"directories":{}},"3.1.0":{"name":"preact-render-to-string","amdName":"preactRenderToString","version":"3.1.0","description":"Render JSX to an HTML string, with support for Preact components.","main":"dist/index.js","jsnext:main":"src/index.js","scripts":{"build":"npm run -s transpile && npm run -s transpile:jsx","transpile":"rollup -c rollup.config.js -m ${npm_package_main}.map -f umd -n $npm_package_amdName $npm_package_jsnext_main -o $npm_package_main","transpile:jsx":"ENTRY=jsx rollup -c rollup.config.js -m dist/jsx.js.map -f umd -n $npm_package_amdName src/jsx.js -o dist/jsx.js","test":"eslint {src,test} && mocha --compilers js:babel-register test/**/*.js","prepublish":"npm run build","release":"npm run build && git commit -am $npm_package_version && git tag $npm_package_version && git push && git push --tags && npm publish"},"keywords":["preact","render","universal","isomorphic"],"author":{"name":"Jason Miller","email":"jason@developit.ca"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/developit/preact-render-to-string.git"},"bugs":{"url":"https://github.com/developit/preact-render-to-string/issues"},"homepage":"https://github.com/developit/preact-render-to-string","peerDependencies":{"preact":"*"},"devDependencies":{"babel-cli":"^6.11.4","babel-core":"^6.11.4","babel-eslint":"^6.1.2","babel-plugin-transform-class-properties":"^6.10.2","babel-plugin-transform-react-jsx":"^6.8.0","babel-preset-es2015":"^6.9.0","babel-preset-es2015-minimal":"^2.0.0","babel-preset-es2015-minimal-rollup":"^2.0.0","babel-preset-stage-0":"^6.5.0","babel-register":"^6.9.0","chai":"^3.5.0","eslint":"^3.2.2","mocha":"^3.0.0","preact":"^5.5.0","rollup":"^0.34.3","rollup-plugin-babel":"^2.6.1","rollup-plugin-commonjs":"^3.3.1","rollup-plugin-memory":"^1.0.0","rollup-plugin-node-resolve":"^2.0.0","sinon":"^1.17.5","sinon-chai":"^2.8.0"},"dependencies":{"pretty-format":"^3.5.1"},"gitHead":"53bc99b2f0e4ea745f5f95abb68d81c9a52105ff","_id":"preact-render-to-string@3.1.0","_shasum":"e96e106c226e9672092a00c0c050a072d137d971","_from":".","_npmVersion":"3.10.3","_nodeVersion":"6.3.1","_npmUser":{"name":"developit","email":"jason@developit.ca"},"maintainers":[{"name":"developit","email":"jason@developit.ca"}],"dist":{"shasum":"e96e106c226e9672092a00c0c050a072d137d971","tarball":"http://localhost:4545/npm/registry/preact-render-to-string/preact-render-to-string-3.1.0.tgz","integrity":"sha512-eH/rmAk8SkUroQ4vjfzyBBlrAuKzgOQr0bhr7m3uNwVuFuXnFzd83LwF2BqtEgDY5HpJvg0IlXXy4hrSsaiQkQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCGvH/2aaYbx/KcBjgj+rX9Yh0qK4pUmW6hiJ1svv0hugIhAOYPppO3/ZphW8oyH6zXaJzERYScjg5ivIE3ZA4+Sj4e"}]},"_npmOperationalInternal":{"host":"packages-16-east.internal.npmjs.com","tmp":"tmp/preact-render-to-string-3.1.0.tgz_1474414799069_0.2606919417157769"},"directories":{}},"3.1.1":{"name":"preact-render-to-string","amdName":"preactRenderToString","version":"3.1.1","description":"Render JSX to an HTML string, with support for Preact components.","main":"dist/index.js","jsnext:main":"src/index.js","scripts":{"build":"npm run -s transpile && npm run -s transpile:jsx","transpile":"rollup -c rollup.config.js -m ${npm_package_main}.map -f umd -n $npm_package_amdName $npm_package_jsnext_main -o $npm_package_main","transpile:jsx":"ENTRY=jsx rollup -c rollup.config.js -m dist/jsx.js.map -f umd -n $npm_package_amdName src/jsx.js -o dist/jsx.js","test":"eslint {src,test} && mocha --compilers js:babel-register test/**/*.js","prepublish":"npm run build","release":"npm run build && git commit -am $npm_package_version && git tag $npm_package_version && git push && git push --tags && npm publish"},"keywords":["preact","render","universal","isomorphic"],"author":{"name":"Jason Miller","email":"jason@developit.ca"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/developit/preact-render-to-string.git"},"bugs":{"url":"https://github.com/developit/preact-render-to-string/issues"},"homepage":"https://github.com/developit/preact-render-to-string","peerDependencies":{"preact":"*"},"devDependencies":{"babel-cli":"^6.11.4","babel-core":"^6.11.4","babel-eslint":"^6.1.2","babel-plugin-transform-class-properties":"^6.10.2","babel-plugin-transform-react-jsx":"^6.8.0","babel-preset-es2015":"^6.9.0","babel-preset-es2015-minimal":"^2.0.0","babel-preset-es2015-minimal-rollup":"^2.0.0","babel-preset-stage-0":"^6.5.0","babel-register":"^6.9.0","chai":"^3.5.0","eslint":"^3.2.2","mocha":"^3.0.0","preact":"^5.5.0","rollup":"^0.34.3","rollup-plugin-babel":"^2.6.1","rollup-plugin-commonjs":"^3.3.1","rollup-plugin-memory":"^1.0.0","rollup-plugin-node-resolve":"^2.0.0","sinon":"^1.17.5","sinon-chai":"^2.8.0"},"dependencies":{"pretty-format":"^3.5.1"},"gitHead":"5cad8c9fc63796774598d40cc70b03d8c67f622d","_id":"preact-render-to-string@3.1.1","_shasum":"2d76bb1cd5d2069f4efd2d4fb58a6b481d374670","_from":".","_npmVersion":"3.10.3","_nodeVersion":"6.3.1","_npmUser":{"name":"developit","email":"jason@developit.ca"},"maintainers":[{"name":"developit","email":"jason@developit.ca"}],"dist":{"shasum":"2d76bb1cd5d2069f4efd2d4fb58a6b481d374670","tarball":"http://localhost:4545/npm/registry/preact-render-to-string/preact-render-to-string-3.1.1.tgz","integrity":"sha512-CsNPVdt4aycl68E18ET8HINvso8cyvFTvKd3gqb62u3kW6ak/xaC/gerXUPKcK203Hz3WV+wbvuo+Bv6WATDlw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICQiy9zLgZbGIVjMMr8QjyinTKIf1bkRYeAa3cvLRhMVAiA6l2Z2s61S/n0hE7ImUPlRv3RwM5ssZiFr7bcg5oek9w=="}]},"_npmOperationalInternal":{"host":"packages-16-east.internal.npmjs.com","tmp":"tmp/preact-render-to-string-3.1.1.tgz_1474416008596_0.15428327256813645"},"directories":{}},"3.2.0":{"name":"preact-render-to-string","amdName":"preactRenderToString","version":"3.2.0","description":"Render JSX to an HTML string, with support for Preact components.","main":"dist/index.js","jsnext:main":"src/index.js","scripts":{"build":"npm run -s transpile && npm run -s transpile:jsx","transpile":"rollup -c rollup.config.js -m ${npm_package_main}.map -f umd -n $npm_package_amdName $npm_package_jsnext_main -o $npm_package_main","transpile:jsx":"ENTRY=jsx rollup -c rollup.config.js -m dist/jsx.js.map -f umd -n $npm_package_amdName src/jsx.js -o dist/jsx.js","test":"eslint {src,test} && mocha --compilers js:babel-register test/**/*.js","prepublish":"npm run build","release":"npm run build && git commit -am $npm_package_version && git tag $npm_package_version && git push && git push --tags && npm publish"},"keywords":["preact","render","universal","isomorphic"],"author":{"name":"Jason Miller","email":"jason@developit.ca"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/developit/preact-render-to-string.git"},"bugs":{"url":"https://github.com/developit/preact-render-to-string/issues"},"homepage":"https://github.com/developit/preact-render-to-string","peerDependencies":{"preact":"*"},"devDependencies":{"babel-cli":"^6.11.4","babel-core":"^6.11.4","babel-eslint":"^6.1.2","babel-plugin-transform-class-properties":"^6.10.2","babel-plugin-transform-react-jsx":"^6.8.0","babel-preset-es2015":"^6.9.0","babel-preset-es2015-minimal":"^2.0.0","babel-preset-es2015-minimal-rollup":"^2.0.0","babel-preset-stage-0":"^6.5.0","babel-register":"^6.9.0","chai":"^3.5.0","eslint":"^3.2.2","mocha":"^3.0.0","preact":"^6.1.0","rollup":"^0.34.3","rollup-plugin-babel":"^2.6.1","rollup-plugin-commonjs":"^3.3.1","rollup-plugin-memory":"^1.0.0","rollup-plugin-node-resolve":"^2.0.0","sinon":"^1.17.5","sinon-chai":"^2.8.0"},"dependencies":{"pretty-format":"^3.5.1"},"gitHead":"bae73d5bb3f294e240ed0e8f0f077cd27dc22a96","_id":"preact-render-to-string@3.2.0","_shasum":"dcf52e6cf310a0ff5556c4703c2ccc356e42eb50","_from":".","_npmVersion":"3.10.3","_nodeVersion":"6.3.1","_npmUser":{"name":"developit","email":"jason@developit.ca"},"maintainers":[{"name":"developit","email":"jason@developit.ca"}],"dist":{"shasum":"dcf52e6cf310a0ff5556c4703c2ccc356e42eb50","tarball":"http://localhost:4545/npm/registry/preact-render-to-string/preact-render-to-string-3.2.0.tgz","integrity":"sha512-GIqyAJwqAAzpdRbTDADVN9f3BU5+AbUT9A06p2WYyu1rw2YTjBbqd30IKs07iZjg9bA8iMLQt38uINBKhXXD3g==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGDIiMAJA8+74GClIKlRWec0EFTPTW0Q1X1+P7F1eKEcAiBC+hlVZ2hc2JPx8J2zcelERA2L7rQE81vG2bRLNChPdA=="}]},"_npmOperationalInternal":{"host":"packages-16-east.internal.npmjs.com","tmp":"tmp/preact-render-to-string-3.2.0.tgz_1475165122745_0.9965530496556312"},"directories":{}},"3.2.1":{"name":"preact-render-to-string","amdName":"preactRenderToString","version":"3.2.1","description":"Render JSX to an HTML string, with support for Preact components.","main":"dist/index.js","jsnext:main":"src/index.js","scripts":{"build":"npm run -s transpile && npm run -s transpile:jsx","transpile":"rollup -c rollup.config.js -m ${npm_package_main}.map -f umd -n $npm_package_amdName $npm_package_jsnext_main -o $npm_package_main","transpile:jsx":"ENTRY=jsx rollup -c rollup.config.js -m dist/jsx.js.map -f umd -n $npm_package_amdName src/jsx.js -o dist/jsx.js","test":"eslint {src,test} && mocha --compilers js:babel-register test/**/*.js","prepublish":"npm run build","release":"npm run build && git commit -am $npm_package_version && git tag $npm_package_version && git push && git push --tags && npm publish"},"keywords":["preact","render","universal","isomorphic"],"author":{"name":"Jason Miller","email":"jason@developit.ca"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/developit/preact-render-to-string.git"},"bugs":{"url":"https://github.com/developit/preact-render-to-string/issues"},"homepage":"https://github.com/developit/preact-render-to-string","peerDependencies":{"preact":"*"},"devDependencies":{"babel-cli":"^6.11.4","babel-core":"^6.11.4","babel-eslint":"^6.1.2","babel-plugin-transform-class-properties":"^6.10.2","babel-plugin-transform-react-jsx":"^6.8.0","babel-preset-es2015":"^6.9.0","babel-preset-es2015-minimal":"^2.0.0","babel-preset-es2015-minimal-rollup":"^2.0.0","babel-preset-stage-0":"^6.5.0","babel-register":"^6.9.0","chai":"^3.5.0","eslint":"^3.2.2","mocha":"^3.0.0","preact":"^6.1.0","rollup":"^0.34.3","rollup-plugin-babel":"^2.6.1","rollup-plugin-commonjs":"^3.3.1","rollup-plugin-memory":"^1.0.0","rollup-plugin-node-resolve":"^2.0.0","sinon":"^1.17.5","sinon-chai":"^2.8.0"},"dependencies":{"pretty-format":"^3.5.1"},"gitHead":"446b2dfd4447fcae554469384fdcf1651ad1f93f","_id":"preact-render-to-string@3.2.1","_shasum":"a20c47db777ce3f1d3af382740b9a91656efc392","_from":".","_npmVersion":"3.10.3","_nodeVersion":"6.3.1","_npmUser":{"name":"developit","email":"jason@developit.ca"},"maintainers":[{"name":"developit","email":"jason@developit.ca"}],"dist":{"shasum":"a20c47db777ce3f1d3af382740b9a91656efc392","tarball":"http://localhost:4545/npm/registry/preact-render-to-string/preact-render-to-string-3.2.1.tgz","integrity":"sha512-sbHcU4thf6/DlyzTvq9TIy6mnn2NFsoKzwiworg1Feajqlamo9eXEnYl30hxEZpIfIt4G+8Hhd1xMHg2quEyHA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICOkV+Qp0ibOs/DMGFVxZvFcoc1E0XxdIRFRLTndz48jAiAd7Gsv4ZO4k5UjAP1rhsOujjz4SdNdCff5WbLeUSYYyw=="}]},"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/preact-render-to-string-3.2.1.tgz_1475258504238_0.4975851192139089"},"directories":{}},"3.3.0":{"name":"preact-render-to-string","amdName":"preactRenderToString","version":"3.3.0","description":"Render JSX to an HTML string, with support for Preact components.","main":"dist/index.js","jsnext:main":"src/index.js","scripts":{"build":"npm run -s transpile && npm run -s transpile:jsx","transpile":"rollup -c rollup.config.js -m ${npm_package_main}.map -f umd -n $npm_package_amdName $npm_package_jsnext_main -o $npm_package_main","transpile:jsx":"ENTRY=jsx rollup -c rollup.config.js -m dist/jsx.js.map -f umd -n $npm_package_amdName src/jsx.js -o dist/jsx.js","test":"eslint {src,test} && mocha --compilers js:babel-register test/**/*.js","prepublish":"npm run build","release":"npm run build && git commit -am $npm_package_version && git tag $npm_package_version && git push && git push --tags && npm publish"},"keywords":["preact","render","universal","isomorphic"],"author":{"name":"Jason Miller","email":"jason@developit.ca"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/developit/preact-render-to-string.git"},"bugs":{"url":"https://github.com/developit/preact-render-to-string/issues"},"homepage":"https://github.com/developit/preact-render-to-string","peerDependencies":{"preact":"*"},"devDependencies":{"babel-cli":"^6.11.4","babel-core":"^6.11.4","babel-eslint":"^6.1.2","babel-plugin-transform-class-properties":"^6.10.2","babel-plugin-transform-react-jsx":"^6.8.0","babel-preset-es2015":"^6.9.0","babel-preset-es2015-minimal":"^2.0.0","babel-preset-es2015-minimal-rollup":"^2.0.0","babel-preset-stage-0":"^6.5.0","babel-register":"^6.9.0","chai":"^3.5.0","eslint":"^3.2.2","mocha":"^3.0.0","preact":"^6.1.0","rollup":"^0.34.3","rollup-plugin-babel":"^2.6.1","rollup-plugin-commonjs":"^3.3.1","rollup-plugin-memory":"^1.0.0","rollup-plugin-node-resolve":"^2.0.0","sinon":"^1.17.5","sinon-chai":"^2.8.0"},"dependencies":{"pretty-format":"^3.5.1"},"gitHead":"4bf274f0778b9bf131f23d733e6e35f0adc5c6f3","_id":"preact-render-to-string@3.3.0","_shasum":"e7cf3815fe590d8ddc21e57c996f5c5657ca57d5","_from":".","_npmVersion":"3.10.3","_nodeVersion":"6.3.1","_npmUser":{"name":"developit","email":"jason@developit.ca"},"maintainers":[{"name":"developit","email":"jason@developit.ca"}],"dist":{"shasum":"e7cf3815fe590d8ddc21e57c996f5c5657ca57d5","tarball":"http://localhost:4545/npm/registry/preact-render-to-string/preact-render-to-string-3.3.0.tgz","integrity":"sha512-6s9VpU3gdQJOp2U+RPBmL+5R7O22zEp2nsrUYSu5S5VSjq+m/MN6uZrgXp/43lgkhL+vRmkyNskRwTxxDiZ64Q==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEWT+1BPaN+3ZTrW8tio63ITwv3SOhUkQbL1QXLzSwsIAiBcuPncUS6h9OMTArJOs9+Dvloo859EolIRmW10jDC5Aw=="}]},"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/preact-render-to-string-3.3.0.tgz_1480446448586_0.16777438879944384"},"directories":{}},"3.4.0":{"name":"preact-render-to-string","amdName":"preactRenderToString","version":"3.4.0","description":"Render JSX to an HTML string, with support for Preact components.","main":"dist/index.js","jsnext:main":"src/index.js","scripts":{"build":"npm run -s transpile && npm run -s transpile:jsx","transpile":"rollup -c rollup.config.js -m ${npm_package_main}.map -f umd -n $npm_package_amdName $npm_package_jsnext_main -o $npm_package_main","transpile:jsx":"ENTRY=jsx rollup -c rollup.config.js -m dist/jsx.js.map -f umd -n $npm_package_amdName src/jsx.js -o dist/jsx.js","test":"eslint {src,test} && mocha --compilers js:babel-register test/**/*.js","prepublish":"npm run build","release":"npm run build && git commit -am $npm_package_version && git tag $npm_package_version && git push && git push --tags && npm publish"},"keywords":["preact","render","universal","isomorphic"],"author":{"name":"Jason Miller","email":"jason@developit.ca"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/developit/preact-render-to-string.git"},"bugs":{"url":"https://github.com/developit/preact-render-to-string/issues"},"homepage":"https://github.com/developit/preact-render-to-string","peerDependencies":{"preact":"*"},"devDependencies":{"babel-cli":"^6.11.4","babel-core":"^6.11.4","babel-eslint":"^6.1.2","babel-plugin-transform-class-properties":"^6.10.2","babel-plugin-transform-react-jsx":"^6.8.0","babel-preset-es2015":"^6.9.0","babel-preset-es2015-minimal":"^2.0.0","babel-preset-es2015-minimal-rollup":"^2.1.0","babel-preset-stage-0":"^6.5.0","babel-register":"^6.9.0","chai":"^3.5.0","eslint":"^3.2.2","mocha":"^3.0.0","preact":"^7.1.0","rollup":"^0.34.3","rollup-plugin-babel":"^2.6.1","rollup-plugin-commonjs":"^3.3.1","rollup-plugin-memory":"^1.0.0","rollup-plugin-node-resolve":"^2.0.0","sinon":"^1.17.5","sinon-chai":"^2.8.0"},"dependencies":{"pretty-format":"^3.5.1"},"gitHead":"2b45656cd542bf721cebc80a38f417ce502c493a","_id":"preact-render-to-string@3.4.0","_shasum":"ceca76693aea6776c0c53a3902a5136659b8a87a","_from":".","_npmVersion":"3.10.3","_nodeVersion":"6.3.1","_npmUser":{"name":"developit","email":"jason@developit.ca"},"maintainers":[{"name":"developit","email":"jason@developit.ca"}],"dist":{"shasum":"ceca76693aea6776c0c53a3902a5136659b8a87a","tarball":"http://localhost:4545/npm/registry/preact-render-to-string/preact-render-to-string-3.4.0.tgz","integrity":"sha512-0E7rsJa0QMJTztz8mwJpn5BwVfiXn1WChk3ym0Xb9vIRj6SukmpGZSq+FXRHJyX3txLQe8MiN68udmamwWiuJQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDbwz9ZCuPe8cKJrzL1YAHZ9WufbmHKw/cCb4YUzcwtEQIhAMYI5fiLPg/+uMLDP6o1M0n8Jw6dAZCcMmAwLZnkHHbC"}]},"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/preact-render-to-string-3.4.0.tgz_1484664952141_0.1593545381911099"},"directories":{}},"3.4.1":{"name":"preact-render-to-string","amdName":"preactRenderToString","version":"3.4.1","description":"Render JSX to an HTML string, with support for Preact components.","main":"dist/index.js","jsnext:main":"src/index.js","scripts":{"build":"npm run -s transpile && npm run -s transpile:jsx","transpile":"rollup -c rollup.config.js -m ${npm_package_main}.map -f umd -n $npm_package_amdName $npm_package_jsnext_main -o $npm_package_main","transpile:jsx":"ENTRY=jsx rollup -c rollup.config.js -m dist/jsx.js.map -f umd -n $npm_package_amdName src/jsx.js -o dist/jsx.js","test":"eslint {src,test} && mocha --compilers js:babel-register test/**/*.js","prepublish":"npm run build","release":"npm run build && git commit -am $npm_package_version && git tag $npm_package_version && git push && git push --tags && npm publish"},"keywords":["preact","render","universal","isomorphic"],"author":{"name":"Jason Miller","email":"jason@developit.ca"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/developit/preact-render-to-string.git"},"bugs":{"url":"https://github.com/developit/preact-render-to-string/issues"},"homepage":"https://github.com/developit/preact-render-to-string","peerDependencies":{"preact":"*"},"devDependencies":{"babel-cli":"^6.11.4","babel-core":"^6.11.4","babel-eslint":"^6.1.2","babel-plugin-transform-class-properties":"^6.10.2","babel-plugin-transform-react-jsx":"^6.8.0","babel-preset-es2015":"^6.9.0","babel-preset-es2015-minimal":"^2.0.0","babel-preset-es2015-minimal-rollup":"^2.1.0","babel-preset-stage-0":"^6.5.0","babel-register":"^6.9.0","chai":"^3.5.0","eslint":"^3.2.2","mocha":"^3.0.0","preact":"^7.1.0","rollup":"^0.34.3","rollup-plugin-babel":"^2.6.1","rollup-plugin-commonjs":"^3.3.1","rollup-plugin-memory":"^1.0.0","rollup-plugin-node-resolve":"^2.0.0","sinon":"^1.17.5","sinon-chai":"^2.8.0"},"dependencies":{"pretty-format":"^3.5.1"},"gitHead":"3a502380faa76df4744cde270673dbb47560b2da","_id":"preact-render-to-string@3.4.1","_shasum":"944476ea3c5be71436f57248e3bbc7a11720a0d1","_from":".","_npmVersion":"3.10.3","_nodeVersion":"6.3.1","_npmUser":{"name":"developit","email":"jason@developit.ca"},"maintainers":[{"name":"developit","email":"jason@developit.ca"}],"dist":{"shasum":"944476ea3c5be71436f57248e3bbc7a11720a0d1","tarball":"http://localhost:4545/npm/registry/preact-render-to-string/preact-render-to-string-3.4.1.tgz","integrity":"sha512-lO/rtz0ER9617rpLuKUPj4+oWRlgBI9H1a6ef8EIBumdLQHN8r/DAQuUYY+J6tV/j+34Q49JppAgmladpfjKoA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDILDXqmLIxycLiA+uF9dY0HnQNGehD9sCGp+NOWDHwqAIgIS5BCo+MIlaE6kslnvqQSQK+wOyqUQfrxywUm8h6wq4="}]},"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/preact-render-to-string-3.4.1.tgz_1484674973226_0.8736249203793705"},"directories":{}},"3.5.0":{"name":"preact-render-to-string","amdName":"preactRenderToString","version":"3.5.0","description":"Render JSX to an HTML string, with support for Preact components.","main":"dist/index.js","jsnext:main":"src/index.js","scripts":{"build":"npm run -s transpile && npm run -s transpile:jsx","transpile":"rollup -c rollup.config.js -m ${npm_package_main}.map -f umd -n $npm_package_amdName $npm_package_jsnext_main -o $npm_package_main","transpile:jsx":"ENTRY=jsx rollup -c rollup.config.js -m dist/jsx.js.map -f umd -n $npm_package_amdName src/jsx.js -o dist/jsx.js","test":"eslint {src,test} && mocha --compilers js:babel-register test/**/*.js","prepublish":"npm run build","release":"npm run build && git commit -am $npm_package_version && git tag $npm_package_version && git push && git push --tags && npm publish"},"keywords":["preact","render","universal","isomorphic"],"author":{"name":"Jason Miller","email":"jason@developit.ca"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/developit/preact-render-to-string.git"},"bugs":{"url":"https://github.com/developit/preact-render-to-string/issues"},"homepage":"https://github.com/developit/preact-render-to-string","peerDependencies":{"preact":"*"},"devDependencies":{"babel-cli":"^6.11.4","babel-core":"^6.11.4","babel-eslint":"^6.1.2","babel-plugin-transform-class-properties":"^6.10.2","babel-plugin-transform-react-jsx":"^6.8.0","babel-preset-es2015":"^6.9.0","babel-preset-es2015-minimal":"^2.0.0","babel-preset-es2015-minimal-rollup":"^2.1.0","babel-preset-stage-0":"^6.5.0","babel-register":"^6.9.0","chai":"^3.5.0","eslint":"^3.2.2","mocha":"^3.0.0","preact":"^7.1.0","rollup":"^0.34.3","rollup-plugin-babel":"^2.6.1","rollup-plugin-commonjs":"^3.3.1","rollup-plugin-memory":"^1.0.0","rollup-plugin-node-resolve":"^2.0.0","sinon":"^1.17.5","sinon-chai":"^2.8.0"},"dependencies":{"pretty-format":"^3.5.1"},"gitHead":"fd00b37c6d4c8940f2b930c64656c8f144a53d32","_id":"preact-render-to-string@3.5.0","_shasum":"35c741d4683e95404a94170ec7251ea5f71037b6","_from":".","_npmVersion":"3.10.3","_nodeVersion":"6.3.1","_npmUser":{"name":"developit","email":"jason@developit.ca"},"maintainers":[{"name":"developit","email":"jason@developit.ca"}],"dist":{"shasum":"35c741d4683e95404a94170ec7251ea5f71037b6","tarball":"http://localhost:4545/npm/registry/preact-render-to-string/preact-render-to-string-3.5.0.tgz","integrity":"sha512-L3AJLMb5vMlWd0MXutBqQaTHpxfQDY5VHGYcIJLtTxsLw7snNgY3+OmjCNe4D0+RPZCSdjUIUxiIbD3Oc6Qghw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCtcanIpBHl4EtASPZF/lWQlXb5Sw5sHLh+iacDdqWICwIgagKYa0i/s7wH/H8GZy1Takq9IMWjdPWUsBKZA0f5qlE="}]},"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/preact-render-to-string-3.5.0.tgz_1484940514251_0.5270415071863681"},"directories":{}},"3.6.0":{"name":"preact-render-to-string","amdName":"preactRenderToString","version":"3.6.0","description":"Render JSX to an HTML string, with support for Preact components.","main":"dist/index.js","jsnext:main":"src/index.js","scripts":{"build":"npm run -s transpile && npm run -s transpile:jsx","transpile":"rollup -c rollup.config.js -m ${npm_package_main}.map -f umd -n $npm_package_amdName $npm_package_jsnext_main -o $npm_package_main","transpile:jsx":"ENTRY=jsx rollup -c rollup.config.js -m dist/jsx.js.map -f umd -n $npm_package_amdName src/jsx.js -o dist/jsx.js","test":"eslint {src,test} && mocha --compilers js:babel-register test/**/*.js","prepublish":"npm run build","release":"npm run build && git commit -am $npm_package_version && git tag $npm_package_version && git push && git push --tags && npm publish"},"keywords":["preact","render","universal","isomorphic"],"author":{"name":"Jason Miller","email":"jason@developit.ca"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/developit/preact-render-to-string.git"},"bugs":{"url":"https://github.com/developit/preact-render-to-string/issues"},"homepage":"https://github.com/developit/preact-render-to-string","peerDependencies":{"preact":"*"},"devDependencies":{"babel-cli":"^6.11.4","babel-core":"^6.11.4","babel-eslint":"^6.1.2","babel-plugin-transform-class-properties":"^6.10.2","babel-plugin-transform-react-jsx":"^6.8.0","babel-preset-es2015":"^6.9.0","babel-preset-es2015-minimal":"^2.0.0","babel-preset-es2015-minimal-rollup":"^2.1.0","babel-preset-stage-0":"^6.5.0","babel-register":"^6.9.0","chai":"^3.5.0","eslint":"^3.2.2","mocha":"^3.0.0","preact":"^7.1.0","rollup":"^0.34.3","rollup-plugin-babel":"^2.6.1","rollup-plugin-commonjs":"^3.3.1","rollup-plugin-memory":"^1.0.0","rollup-plugin-node-resolve":"^2.0.0","sinon":"^1.17.5","sinon-chai":"^2.8.0"},"dependencies":{"pretty-format":"^3.5.1"},"gitHead":"9075a0801ce496b6ebb524c159f6bb2704892813","_id":"preact-render-to-string@3.6.0","_shasum":"03a49d2d755a766c3d421e8b06d6edbb33ed6bde","_from":".","_npmVersion":"3.10.10","_nodeVersion":"6.9.4","_npmUser":{"name":"developit","email":"jason@developit.ca"},"maintainers":[{"name":"developit","email":"jason@developit.ca"}],"dist":{"shasum":"03a49d2d755a766c3d421e8b06d6edbb33ed6bde","tarball":"http://localhost:4545/npm/registry/preact-render-to-string/preact-render-to-string-3.6.0.tgz","integrity":"sha512-0MuCcrhVooprqnZCvB02RzBEJQZSmJocsiHIG0LcT65zAIRtlcB6MzBc1HYmq6GAVhMxA+CRge7t/taitix4PQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDHOMEeKkzjhXS3zaeweXQixYp5X5sDoxePdfUbDGkczwIhAOQPQk317r2AvBu8bGPsrOTSR7f3Cmxv9rBFlBvS4pC6"}]},"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/preact-render-to-string-3.6.0.tgz_1487098173500_0.2693255504127592"},"directories":{}},"3.6.1":{"name":"preact-render-to-string","amdName":"preactRenderToString","version":"3.6.1","description":"Render JSX to an HTML string, with support for Preact components.","main":"dist/index.js","jsnext:main":"src/index.js","scripts":{"build":"npm run -s transpile && npm run -s transpile:jsx","transpile":"rollup -c rollup.config.js -m ${npm_package_main}.map -f umd -n $npm_package_amdName $npm_package_jsnext_main -o $npm_package_main","transpile:jsx":"ENTRY=jsx rollup -c rollup.config.js -m dist/jsx.js.map -f umd -n $npm_package_amdName src/jsx.js -o dist/jsx.js","test":"eslint {src,test} && mocha --compilers js:babel-register test/**/*.js","prepublish":"npm run build","release":"npm run build && git commit -am $npm_package_version && git tag $npm_package_version && git push && git push --tags && npm publish"},"keywords":["preact","render","universal","isomorphic"],"author":{"name":"Jason Miller","email":"jason@developit.ca"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/developit/preact-render-to-string.git"},"bugs":{"url":"https://github.com/developit/preact-render-to-string/issues"},"homepage":"https://github.com/developit/preact-render-to-string","peerDependencies":{"preact":"*"},"devDependencies":{"babel-cli":"^6.11.4","babel-core":"^6.11.4","babel-eslint":"^6.1.2","babel-plugin-transform-class-properties":"^6.10.2","babel-plugin-transform-react-jsx":"^6.8.0","babel-preset-es2015":"^6.9.0","babel-preset-es2015-minimal":"^2.0.0","babel-preset-es2015-minimal-rollup":"^2.1.0","babel-preset-stage-0":"^6.5.0","babel-register":"^6.9.0","chai":"^3.5.0","eslint":"^3.2.2","mocha":"^3.0.0","preact":"^7.1.0","rollup":"^0.34.3","rollup-plugin-babel":"^2.6.1","rollup-plugin-commonjs":"^3.3.1","rollup-plugin-memory":"^1.0.0","rollup-plugin-node-resolve":"^2.0.0","sinon":"^1.17.5","sinon-chai":"^2.8.0"},"dependencies":{"pretty-format":"^3.5.1"},"gitHead":"237eee434ba748e294c1d68a7372c10f8d47f1d7","_id":"preact-render-to-string@3.6.1","_shasum":"3be5dfc4e917fbe619398374deaa5b8f717ddf7c","_from":".","_npmVersion":"3.10.10","_nodeVersion":"6.9.4","_npmUser":{"name":"developit","email":"jason@developit.ca"},"dist":{"shasum":"3be5dfc4e917fbe619398374deaa5b8f717ddf7c","tarball":"http://localhost:4545/npm/registry/preact-render-to-string/preact-render-to-string-3.6.1.tgz","integrity":"sha512-JE7EUOAaCzIdPHE9hUYG1u9vkonfFt3Y5OIqqQSP0ujKnm866OqNeZfMlIKH0JpM4qZ2NjzeAq1IxGUAS0w5/A==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCa++lJ3+U73fcVr+e7w8f5giE+rCB5Mq++U1LbvWM/BQIgYN+g+DE88WTjHOIwZ8vA5HEd0SfH1Lqdo4JcSmDm/fQ="}]},"maintainers":[{"name":"developit","email":"jason@developit.ca"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/preact-render-to-string-3.6.1.tgz_1493168647169_0.7537236420903355"},"directories":{}},"3.6.2":{"name":"preact-render-to-string","amdName":"preactRenderToString","version":"3.6.2","description":"Render JSX to an HTML string, with support for Preact components.","main":"dist/index.js","jsnext:main":"src/index.js","scripts":{"build":"npm run -s transpile && npm run -s transpile:jsx","transpile":"rollup -c rollup.config.js -m ${npm_package_main}.map -f umd -n $npm_package_amdName $npm_package_jsnext_main -o $npm_package_main","transpile:jsx":"ENTRY=jsx rollup -c rollup.config.js -m dist/jsx.js.map -f umd -n $npm_package_amdName src/jsx.js -o dist/jsx.js","test":"eslint {src,test} && mocha --compilers js:babel-register test/**/*.js","prepublish":"npm run build","release":"npm run build && git commit -am $npm_package_version && git tag $npm_package_version && git push && git push --tags && npm publish"},"keywords":["preact","render","universal","isomorphic"],"author":{"name":"Jason Miller","email":"jason@developit.ca"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/developit/preact-render-to-string.git"},"bugs":{"url":"https://github.com/developit/preact-render-to-string/issues"},"homepage":"https://github.com/developit/preact-render-to-string","peerDependencies":{"preact":"*"},"devDependencies":{"babel-cli":"^6.11.4","babel-core":"^6.11.4","babel-eslint":"^6.1.2","babel-plugin-transform-class-properties":"^6.10.2","babel-plugin-transform-react-jsx":"^6.8.0","babel-preset-es2015":"^6.9.0","babel-preset-es2015-minimal":"^2.0.0","babel-preset-es2015-minimal-rollup":"^2.1.0","babel-preset-stage-0":"^6.5.0","babel-register":"^6.9.0","chai":"^3.5.0","eslint":"^3.2.2","mocha":"^3.0.0","preact":"^8.1.0","rollup":"^0.34.3","rollup-plugin-babel":"^2.6.1","rollup-plugin-commonjs":"^3.3.1","rollup-plugin-memory":"^1.0.0","rollup-plugin-node-resolve":"^2.0.0","sinon":"^1.17.5","sinon-chai":"^2.8.0"},"dependencies":{"pretty-format":"^3.5.1"},"gitHead":"796da378e280b083be407251505b4adf19c6d12f","_id":"preact-render-to-string@3.6.2","_shasum":"341ac493fb818ce7beac335417188b2ae8c585bb","_from":".","_npmVersion":"3.10.10","_nodeVersion":"6.9.4","_npmUser":{"name":"developit","email":"jason@developit.ca"},"dist":{"shasum":"341ac493fb818ce7beac335417188b2ae8c585bb","tarball":"http://localhost:4545/npm/registry/preact-render-to-string/preact-render-to-string-3.6.2.tgz","integrity":"sha512-DTsh4f0ctgjLH/8jmOC4ElfX7fHyaL8EQEaoMc8tsh/2oNeTgoFDU99kDQU9Lj90B9QrNnVnn3nIeg4nVMj6lg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC2qEkLgkTN9oxDDivMCDagQ20tLxsS/qOhpeijptWUiQIgGNc5BZoIvp0HTxKuIhuan0w2J+9BKQhCDvtLYgrET5k="}]},"maintainers":[{"name":"developit","email":"jason@developit.ca"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/preact-render-to-string-3.6.2.tgz_1494540897401_0.5825813990086317"},"directories":{}},"3.6.3":{"name":"preact-render-to-string","amdName":"preactRenderToString","version":"3.6.3","description":"Render JSX to an HTML string, with support for Preact components.","main":"dist/index.js","jsnext:main":"src/index.js","scripts":{"build":"npm run -s transpile && npm run -s transpile:jsx","transpile":"rollup -c rollup.config.js -m ${npm_package_main}.map -f umd -n $npm_package_amdName $npm_package_jsnext_main -o $npm_package_main","transpile:jsx":"ENTRY=jsx rollup -c rollup.config.js -m dist/jsx.js.map -f umd -n $npm_package_amdName src/jsx.js -o dist/jsx.js","test":"eslint src test && mocha --compilers js:babel-register test/**/*.js","prepublish":"npm run build","release":"npm run build && git commit -am $npm_package_version && git tag $npm_package_version && git push && git push --tags && npm publish"},"keywords":["preact","render","universal","isomorphic"],"author":{"name":"Jason Miller","email":"jason@developit.ca"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/developit/preact-render-to-string.git"},"bugs":{"url":"https://github.com/developit/preact-render-to-string/issues"},"homepage":"https://github.com/developit/preact-render-to-string","peerDependencies":{"preact":"*"},"devDependencies":{"babel-cli":"^6.11.4","babel-core":"^6.11.4","babel-eslint":"^6.1.2","babel-plugin-transform-class-properties":"^6.10.2","babel-plugin-transform-react-jsx":"^6.8.0","babel-preset-es2015":"^6.9.0","babel-preset-es2015-minimal":"^2.0.0","babel-preset-es2015-minimal-rollup":"^2.1.0","babel-preset-stage-0":"^6.5.0","babel-register":"^6.9.0","chai":"^3.5.0","eslint":"^3.2.2","mocha":"^3.0.0","preact":"^8.1.0","rollup":"^0.34.3","rollup-plugin-babel":"^2.6.1","rollup-plugin-commonjs":"^3.3.1","rollup-plugin-memory":"^1.0.0","rollup-plugin-node-resolve":"^2.0.0","sinon":"^1.17.5","sinon-chai":"^2.8.0"},"dependencies":{"pretty-format":"^3.5.1"},"gitHead":"555a65db89af8289e3ece646ddcbe9c44763be9d","_id":"preact-render-to-string@3.6.3","_shasum":"481d0d5bdac9192d3347557437d5cd00aa312043","_from":".","_npmVersion":"3.10.10","_nodeVersion":"6.9.4","_npmUser":{"name":"developit","email":"jason@developit.ca"},"dist":{"shasum":"481d0d5bdac9192d3347557437d5cd00aa312043","tarball":"http://localhost:4545/npm/registry/preact-render-to-string/preact-render-to-string-3.6.3.tgz","integrity":"sha512-DZluKKNK7/B57IhKoNMUcKB93B10//UypuJlMOlx+arsCOHc45tbAkJrsdSGeNH2aKt4UzmflTkP+JozIUUInA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEt5NfiDwFwgQ6Nq3ziRO73zvYgM8/TqKB/VZTnqSYQEAiEAt0hfYhGz+mp4JDOTUAlFZmqxScCZXAKmbO3LC5XX/o4="}]},"maintainers":[{"name":"developit","email":"jason@developit.ca"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/preact-render-to-string-3.6.3.tgz_1495493162825_0.06074099778197706"},"directories":{}},"3.7.0":{"name":"preact-render-to-string","amdName":"preactRenderToString","version":"3.7.0","description":"Render JSX to an HTML string, with support for Preact components.","main":"dist/index.js","jsnext:main":"src/index.js","scripts":{"build":"npm run -s transpile && npm run -s transpile:jsx && npm run -s copy-typescript-definition","copy-typescript-definition":"copyfiles -f src/index.d.ts dist","transpile":"rollup -c rollup.config.js -m ${npm_package_main}.map -f umd -n $npm_package_amdName $npm_package_jsnext_main -o $npm_package_main","transpile:jsx":"ENTRY=jsx rollup -c rollup.config.js -m dist/jsx.js.map -f umd -n $npm_package_amdName src/jsx.js -o dist/jsx.js","test":"eslint src test && mocha --compilers js:babel-register test/**/*.js","prepublish":"npm run build","release":"npm run build && git commit -am $npm_package_version && git tag $npm_package_version && git push && git push --tags && npm publish"},"keywords":["preact","render","universal","isomorphic"],"author":{"name":"Jason Miller","email":"jason@developit.ca"},"license":"MIT","typings":"src/index.d.ts","repository":{"type":"git","url":"git+https://github.com/developit/preact-render-to-string.git"},"bugs":{"url":"https://github.com/developit/preact-render-to-string/issues"},"homepage":"https://github.com/developit/preact-render-to-string","peerDependencies":{"preact":"*"},"devDependencies":{"babel-cli":"^6.11.4","babel-core":"^6.11.4","babel-eslint":"^6.1.2","babel-plugin-transform-class-properties":"^6.10.2","babel-plugin-transform-react-jsx":"^6.8.0","babel-preset-es2015":"^6.9.0","babel-preset-stage-0":"^6.5.0","babel-register":"^6.9.0","chai":"^3.5.0","copyfiles":"^1.2.0","eslint":"^3.2.2","mocha":"^3.0.0","preact":"^8.1.0","rollup":"^0.34.3","rollup-plugin-babel":"^2.6.1","rollup-plugin-commonjs":"^3.3.1","rollup-plugin-memory":"^1.0.0","rollup-plugin-node-resolve":"^2.0.0","sinon":"^1.17.5","sinon-chai":"^2.8.0"},"dependencies":{"pretty-format":"^3.5.1"},"gitHead":"106325d9ef59f7215a91598a858f7f0b13889bf9","_id":"preact-render-to-string@3.7.0","_shasum":"7db4177454bc01395e0d01d6ac07bc5e838e31ee","_from":".","_npmVersion":"3.10.10","_nodeVersion":"6.9.4","_npmUser":{"name":"developit","email":"jason@developit.ca"},"dist":{"shasum":"7db4177454bc01395e0d01d6ac07bc5e838e31ee","tarball":"http://localhost:4545/npm/registry/preact-render-to-string/preact-render-to-string-3.7.0.tgz","integrity":"sha512-w2oft/4dL9BEcL7XOwS0eZFPjlpkxiM2IszZIEHZrptQRYWPHNtFdk9WpW86BUpqFLVPAuS4ZZ3+2U2f5z1wNQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCS096ZzwqN1nWaO8jyrsehr54R/Grx/cDXZxhRJgWtVAIgLodmW4jh1P4mj0IexyRpPh1TsmykQHEKWWMZ/zWSnFQ="}]},"maintainers":[{"name":"developit","email":"jason@developit.ca"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/preact-render-to-string-3.7.0.tgz_1507833066168_0.9589179907925427"},"directories":{}},"3.7.1":{"name":"preact-render-to-string","amdName":"preactRenderToString","version":"3.7.1","description":"Render JSX to an HTML string, with support for Preact components.","main":"dist/index.js","jsnext:main":"src/index.js","scripts":{"build":"npm run -s transpile && npm run -s transpile:jsx && npm run -s copy-typescript-definition","copy-typescript-definition":"copyfiles -f src/index.d.ts dist","transpile":"rollup -c rollup.config.js -m ${npm_package_main}.map -f umd -n $npm_package_amdName $npm_package_jsnext_main -o $npm_package_main","transpile:jsx":"ENTRY=jsx rollup -c rollup.config.js -m dist/jsx.js.map -f umd -n $npm_package_amdName src/jsx.js -o dist/jsx.js","test":"eslint src test && mocha --compilers js:babel-register test/**/*.js","prepublish":"npm run build","release":"npm run build && git commit -am $npm_package_version && git tag $npm_package_version && git push && git push --tags && npm publish"},"keywords":["preact","render","universal","isomorphic"],"author":{"name":"Jason Miller","email":"jason@developit.ca"},"license":"MIT","typings":"src/index.d.ts","repository":{"type":"git","url":"git+https://github.com/developit/preact-render-to-string.git"},"bugs":{"url":"https://github.com/developit/preact-render-to-string/issues"},"homepage":"https://github.com/developit/preact-render-to-string","peerDependencies":{"preact":"*"},"devDependencies":{"babel-cli":"^6.11.4","babel-core":"^6.11.4","babel-eslint":"^6.1.2","babel-plugin-transform-class-properties":"^6.10.2","babel-plugin-transform-react-jsx":"^6.8.0","babel-preset-es2015":"^6.9.0","babel-preset-stage-0":"^6.5.0","babel-register":"^6.9.0","chai":"^3.5.0","copyfiles":"^1.2.0","eslint":"^3.2.2","mocha":"^3.0.0","preact":"^8.1.0","rollup":"^0.34.3","rollup-plugin-babel":"^2.6.1","rollup-plugin-commonjs":"^3.3.1","rollup-plugin-memory":"^1.0.0","rollup-plugin-node-resolve":"^2.0.0","sinon":"^1.17.5","sinon-chai":"^2.8.0"},"dependencies":{"pretty-format":"^3.5.1"},"gitHead":"725f9e4bf7338efac0516b33a273b308d57778be","_id":"preact-render-to-string@3.7.1","_npmVersion":"6.1.0","_nodeVersion":"10.6.0","_npmUser":{"name":"developit","email":"jason@developit.ca"},"dist":{"integrity":"sha512-e/vp6sk6iwDBDpRL+eQur9YQN+1sgF/Xkz9uQltJUswYq6gGVkZP/OJIFPrMjfU4efxL72TzCnS8ultOOD+r0g==","shasum":"32b40a3e95869cd8fd41022c7fb133fcede1ccac","tarball":"http://localhost:4545/npm/registry/preact-render-to-string/preact-render-to-string-3.7.1.tgz","fileCount":26,"unpackedSize":152736,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbYgggCRA9TVsSAnZWagAAw68P/A/+y2fA6N6Gq+6xt6xc\nOAZZxEqvbZPYxbjFVhoCJF76eNcUeHihj+XNeQuMjxBj4P/eK+OD9Xjcm/do\nLkEeTL/bdujqTMx/MTfpHr3wGa/V4ggGpjZLCDtNqBaJinU1QRkRUQSCO1Z4\nArpOczqIloi99gZ1oCKXIZngsx7LhPAMVzSw96C1ZoRzQCwI4qpkTSmrqwpd\nXHmIxP1VVMsfE187eSCx3KckwGPFdXHYMQVA6WbKRDc/ZiikvFmfw7PgLtjO\niKsYj7UYO1N5IgBvcYcL1ZSLVcasuoOHfZbUGzMZxrfO4KfeqPbPp06WrugW\ntQPxwUJW9oc/3CsP7A93VU/dTPU2UqBBe3HBouL/4fAbgjgUrmiGNywyUhHd\nC/eplp0CwxJdslycOaev09Mz6PT6sRTh94Y/iEh0HWJOGsGu+oTudYqD39PX\nhnOr2Pod8DaT8vZH3UQC9YdnDq7qSyCLe4yL8Jnu/HfejVgmxOy5CKEoXM/8\nk1gkamaFNoDwadAQSvUCq0iJonPl1boEvS0gmQRWZ+EOMQuINYbQULyE8bEh\nK5f+FOvFun1vhQ8WLZXDRfLlHQTO2e2YPQy1HVNG27SnkYSo1C0amm1Uv7yA\nRlSZjUoD4wI0oRHXqxUTag3orc4I5nsO9Q/DMjLfz3fLqlSJxqoMAkfnCkuy\n3jOW\r\n=6WPT\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAHdLbJC/otaRDdTSNpSEJWjde3R41IHwYNb2bI9CnSkAiEAjT6ZfWrmw58oMgnVdgpte3+l2P8oKPjSHA/iW79JlV8="}]},"maintainers":[{"name":"developit","email":"jason@developit.ca"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/preact-render-to-string_3.7.1_1533151264249_0.8612196543811781"},"_hasShrinkwrap":false},"3.7.2":{"name":"preact-render-to-string","amdName":"preactRenderToString","version":"3.7.2","description":"Render JSX to an HTML string, with support for Preact components.","main":"dist/index.js","jsnext:main":"src/index.js","scripts":{"build":"npm run -s transpile && npm run -s transpile:jsx && npm run -s copy-typescript-definition","copy-typescript-definition":"copyfiles -f src/index.d.ts dist","transpile":"rollup -c rollup.config.js -m ${npm_package_main}.map -f umd -n $npm_package_amdName $npm_package_jsnext_main -o $npm_package_main","transpile:jsx":"ENTRY=jsx rollup -c rollup.config.js -m dist/jsx.js.map -f umd -n $npm_package_amdName src/jsx.js -o dist/jsx.js","test":"eslint src test && mocha --compilers js:babel-register test/**/*.js","prepublish":"npm run build","release":"npm run build && git commit -am $npm_package_version && git tag $npm_package_version && git push && git push --tags && npm publish"},"keywords":["preact","render","universal","isomorphic"],"author":{"name":"Jason Miller","email":"jason@developit.ca"},"license":"MIT","typings":"src/index.d.ts","repository":{"type":"git","url":"git+https://github.com/developit/preact-render-to-string.git"},"bugs":{"url":"https://github.com/developit/preact-render-to-string/issues"},"homepage":"https://github.com/developit/preact-render-to-string","peerDependencies":{"preact":"*"},"devDependencies":{"babel-cli":"^6.11.4","babel-core":"^6.11.4","babel-eslint":"^6.1.2","babel-plugin-transform-class-properties":"^6.10.2","babel-plugin-transform-react-jsx":"^6.8.0","babel-preset-es2015":"^6.9.0","babel-preset-stage-0":"^6.5.0","babel-register":"^6.9.0","chai":"^3.5.0","copyfiles":"^1.2.0","eslint":"^3.2.2","mocha":"^3.0.0","preact":"^8.1.0","rollup":"^0.34.3","rollup-plugin-babel":"^2.6.1","rollup-plugin-commonjs":"^3.3.1","rollup-plugin-memory":"^1.0.0","rollup-plugin-node-resolve":"^2.0.0","sinon":"^1.17.5","sinon-chai":"^2.8.0"},"dependencies":{"pretty-format":"^3.5.1"},"gitHead":"1a309000328465135fc5c10c7ad14320f1af9b21","_id":"preact-render-to-string@3.7.2","_npmVersion":"6.1.0","_nodeVersion":"10.6.0","_npmUser":{"name":"developit","email":"jason@developit.ca"},"dist":{"integrity":"sha512-1TDQjZhWJoXSYyFDlEHs+siDooZuQQMNWWDBNEJq2W2RTK6O/TyVglApJHzblVK2NKDk7pQG+iPjs3T4R6tG/w==","shasum":"b2440694916dfc431729aa97cabb2de1bb6cd9b3","tarball":"http://localhost:4545/npm/registry/preact-render-to-string/preact-render-to-string-3.7.2.tgz","fileCount":26,"unpackedSize":153598,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbYh4eCRA9TVsSAnZWagAAYIUP/3OLRL901HAXzAXOUMtT\nn44wFKomcyMltLiEdF5U193qzVAPXL0ltSTAmc1rxYLFlT5Asru9zNws1YYU\nRqIaTWfeH46xWP/+sHRJ1s2ixIFBPJGZNY+SMwawlTwNppynM8zTZ4Gd6yIN\nZZSqu5KmmlcdaIHxXt0nSUfLkJWeE+qS3sUfGA0Tuyuuz18vPbg+fRmtO7AX\nd9880f9lUNolmNgmdQt/PRwFAuz91yrH0mIlUpdeyUZlACcJdVe0+mHG03RF\nO7hphUXDWsiFxCIsIMRmKbiXqZ0PAOOON0OI4BSBPrJhh4B8p7aHYU/rihUj\n97Yp1JyLmGEVNeSLECgiusH56nrcQwrfFya5pwTbN6pi5DW7yggnKC77cQxy\nnpo+LTAn8q3ZUu0dX1KU2alVVisuNp+iz6mCXf8k+dgY75emG5JhbF2NV6RO\nlR0+2BFeh43M2z1VuCX4h3G9jYkLblfr0928Fbi/IHAXSkEdDUbjCzgar9d0\nCk863xRcaB4v1GkcEipTZ8xLDCmoLvUh1MSwwYrnQmujW2ea86BwsQ6VdTPZ\n/qHhc6RtqYHb/i6XWs40T9+s9JATVtzkF0RiCfMuvEfHml5czkQe+r5kMFPO\nqUQMBYEe9zI3RHhvMtjy5WLAlq30aIq9y1gsJ85Zky26kdfekJaBq3UkbdeP\npmAe\r\n=TtT5\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCHeq5VMXJSYEm+3Ddz9DG3L1p0EF8hZutqMDLMS5ZKCwIgc592kvnvmU9ofgVh2BFLlnYK2gphf+8CAyDB8vT0Q4A="}]},"maintainers":[{"name":"developit","email":"jason@developit.ca"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/preact-render-to-string_3.7.2_1533156893734_0.1759399533342394"},"_hasShrinkwrap":false},"3.8.0":{"name":"preact-render-to-string","amdName":"preactRenderToString","version":"3.8.0","description":"Render JSX to an HTML string, with support for Preact components.","main":"dist/index.js","umd:main":"dist/index.js","module":"dist/index.mjs","jsnext:main":"dist/index.mjs","scripts":{"build":"npm run -s transpile && npm run -s transpile:jsx && npm run -s copy-typescript-definition","transpile":"microbundle src/index.js -f es,umd --target web --external none","transpile:jsx":"microbundle src/jsx.js -o dist/jsx.js --target web --external none","copy-typescript-definition":"copyfiles -f src/index.d.ts dist","test":"eslint src test && mocha --compilers js:babel-register test/**/*.js","prepublish":"npm run build","release":"npm run build && git commit -am $npm_package_version && git tag $npm_package_version && git push && git push --tags && npm publish"},"keywords":["preact","render","universal","isomorphic"],"eslintConfig":{"extends":"developit","rules":{"react/prefer-stateless-function":0,"react/jsx-no-bind":0,"react/no-danger":0,"jest/valid-expect":0,"new-cap":0}},"babel":{"presets":["env"],"plugins":[["transform-react-jsx",{"pragma":"h"}],"transform-object-rest-spread"]},"author":{"name":"Jason Miller","email":"jason@developit.ca"},"license":"MIT","typings":"src/index.d.ts","repository":{"type":"git","url":"git+https://github.com/developit/preact-render-to-string.git"},"bugs":{"url":"https://github.com/developit/preact-render-to-string/issues"},"homepage":"https://github.com/developit/preact-render-to-string","peerDependencies":{"preact":"*"},"devDependencies":{"babel-plugin-transform-object-rest-spread":"^6.26.0","babel-plugin-transform-react-jsx":"^6.24.1","babel-preset-env":"^1.7.0","babel-register":"^6.26.0","chai":"^3.5.0","copyfiles":"^1.2.0","eslint":"^4.19.1","eslint-config-developit":"^1.1.1","microbundle":"^0.6.0","mocha":"^5.2.0","preact":"^8.1.0","sinon":"^1.17.5","sinon-chai":"^2.8.0"},"dependencies":{"pretty-format":"^3.5.1"},"gitHead":"6342e1ad97c73504a3ea3546d5b4630efb978451","_id":"preact-render-to-string@3.8.0","_npmVersion":"6.1.0","_nodeVersion":"10.6.0","_npmUser":{"name":"developit","email":"jason@developit.ca"},"dist":{"integrity":"sha512-3MWFFWP686dk3ksGmg5ZzuFJIM8xqWhPWa4P/sRvG8q6PedQ5U5h4/rhkCzVceK5Vy/8ZXPJeATjtGJuT2aGyQ==","shasum":"1c62e188dc136b50e5a273dcfaf3e4801c743069","tarball":"http://localhost:4545/npm/registry/preact-render-to-string/preact-render-to-string-3.8.0.tgz","fileCount":24,"unpackedSize":118312,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbYmgjCRA9TVsSAnZWagAAVqMP/3SeG7GNxWcxuOFRehxg\nDqJYP3C/bawf+hSQ/7PsExqxoQ8hyrXt5kZgC9scFJZduT0EWLZbWQhEC3qM\ndKKhmIOABsGkmOJfugpUz52sMpC5gqKcJkHwgobHYkxEBYTe1hIn/cDWQQni\n8k+RCy4ECU6w70It7BUTWkgV9R3y3MiKm3RPfxMVpAecXqM9bzeKZngHLw5R\npsqAjZ8x/NRhhtJUkgUqcBcjoKHOlpYy0Ez9AY7mPwJbq12oLVDAyj54hi84\nDJpw6x804BOr7txfo2i3xak99vnxYCGqk+h3zIsNUKWfwosoFGRSCcK7Hy13\nNn/sVNGXbV2praG5Iy+b4n7xnyF5X8W0V70DI+HtXHprJgJodiryvgB7Q1aD\nxq4zsxSzuXIbGKjTsbqeqWUCI4CWS2Vedq2+kojnZh226L7WNMWHVdkKNE6s\nnlOmcFI7qAIg7dQh65nCPR7kaVIvoMYF8sNEAkb6iDThAtd36SlVnj5oE1Jy\nGysBrK+v9KzKAoN7YX9FxDakds3RPW6r7fGKaSrvn4+S6/yLuuNbSl3xpWCJ\n45MTBtSqSbbswckFqrKvtFAf+L2d5wZ0mvWiPeDxkW7Hn9lU03+GKVo214zw\nEpjJVmszXZEsXbu5+D4VL1wdrI1WeXTNt+JV/5Pl8gFyDNY6HwzE2OABFqlH\nPmru\r\n=r571\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDeTBwYhTaPXS9WhjAEvZFQO5tfsqcoY42JvIrCCHlS4AIhALgCAxa60RlNRjFuv2wN//gJ6dYPLSNTzWnDKMcLSx0V"}]},"maintainers":[{"name":"developit","email":"jason@developit.ca"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/preact-render-to-string_3.8.0_1533175841830_0.18333181323373227"},"_hasShrinkwrap":false},"3.8.1":{"name":"preact-render-to-string","amdName":"preactRenderToString","version":"3.8.1","description":"Render JSX to an HTML string, with support for Preact components.","main":"dist/index.js","umd:main":"dist/index.js","module":"dist/index.mjs","jsnext:main":"dist/index.mjs","scripts":{"build":"npm run -s transpile && npm run -s transpile:jsx && npm run -s copy-typescript-definition","transpile":"microbundle src/index.js -f es,umd --target web --external none","transpile:jsx":"microbundle src/jsx.js -o dist/jsx.js --target web --external none","copy-typescript-definition":"copyfiles -f src/index.d.ts dist","test":"eslint src test && mocha --compilers js:babel-register test/**/*.js","prepublish":"npm run build","release":"npm run build && git commit -am $npm_package_version && git tag $npm_package_version && git push && git push --tags && npm publish"},"keywords":["preact","render","universal","isomorphic"],"files":["src","dist","jsx.js","typings.json"],"eslintConfig":{"extends":"developit","rules":{"react/prefer-stateless-function":0,"react/jsx-no-bind":0,"react/no-danger":0,"jest/valid-expect":0,"new-cap":0}},"babel":{"presets":["env"],"plugins":[["transform-react-jsx",{"pragma":"h"}],"transform-object-rest-spread"]},"author":{"name":"Jason Miller","email":"jason@developit.ca"},"license":"MIT","typings":"src/index.d.ts","repository":{"type":"git","url":"git+https://github.com/developit/preact-render-to-string.git"},"bugs":{"url":"https://github.com/developit/preact-render-to-string/issues"},"homepage":"https://github.com/developit/preact-render-to-string","peerDependencies":{"preact":"*"},"devDependencies":{"babel-plugin-transform-object-rest-spread":"^6.26.0","babel-plugin-transform-react-jsx":"^6.24.1","babel-preset-env":"^1.7.0","babel-register":"^6.26.0","chai":"^3.5.0","copyfiles":"^1.2.0","eslint":"^4.19.1","eslint-config-developit":"^1.1.1","microbundle":"^0.6.0","mocha":"^5.2.0","preact":"^8.1.0","sinon":"^1.17.5","sinon-chai":"^2.8.0"},"dependencies":{"pretty-format":"^3.5.1"},"gitHead":"9fba820e64352c9f400df7db5ab491e49e0fe67f","_id":"preact-render-to-string@3.8.1","_npmVersion":"6.4.0","_nodeVersion":"10.6.0","_npmUser":{"name":"developit","email":"jason@developit.ca"},"dist":{"integrity":"sha512-ZwVucBeWkwfNolQ/edMupNTCrZhg9uCrvTGCh2ztZBQYQP3GjWsxGn8BU5S1YB03cTrcCLZxrCdSlaGtU/hdew==","shasum":"4301d44ef1d404660d2e96671e632a8f4d6b7f9a","tarball":"http://localhost:4545/npm/registry/preact-render-to-string/preact-render-to-string-3.8.1.tgz","fileCount":17,"unpackedSize":97510,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbdMipCRA9TVsSAnZWagAABLYP/jqHehjOjksfsTiSl9cK\n8/Fi37CLxAE/IAYdUTfnC8Flby+SSlYfXzzOMeVNKRYHRl/Y4FKfvWdFxU6k\nMbs9+VC/3LG1iiQKuB/1vC4FS/ABhpz3XhQpzVV+0UXe7h9iExbHXDCKtNFI\n10FyruRszO8vv++oP2p8b7fXpSvXvJutYWkA1jIlSNKZyO3ZjYyd5OgMKeG3\nd0sMnhTsBFRPwDrcjALcR9Z3p/18u5KIxGyUweifQt2/l/w5j0MeT99Q3inB\n26SrOZGqvc6ildaJGV4PS7FAq+LIZFD75P0LPNkjbJoJpXR+Lo3+J5dD3AI7\nYD2rC4N5xrrerVN+i2YrxsO0kF0Dj9+rJCTbE+Qy31hp0Lfo4gWLYaWnFFNY\n2XhatcvSc2T8UhBZHNOPg8obNkGQ5C8W1S47zfzTQjwNXIMfsJHoZpH1ezJn\nM0WSZVhIoVu1Htj0y7crQVzL7fpI8RTplOxxrEk5LLYpg8zBo32VDPyn39fs\niqPO4f/jzeETo5UpCtwgJRODIfCWs5uaQFCbYpUereMpj9RGXOhH9Y0LVBRe\nTopxZVChs4FDyGJquI973tDrl8l9tLaRyz6H6lEeKucC2+IPSxIUpRxKxL5F\nI9SxdhauYEsfjk1VvWFweduFM8QSlDLy6eduhc8joavfwO3udyJjk7ZtYVmV\n7l41\r\n=vlce\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIByIBxhrgSsmSjRRsl4snCL+MjnjKuzgXpZjybmfEIZyAiEAwZkyD5t7Y2Goen21pXbHhZ2Joh7yQRXrPwN55Jvctt0="}]},"maintainers":[{"name":"developit","email":"jason@developit.ca"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/preact-render-to-string_3.8.1_1534380200616_0.15859079853263758"},"_hasShrinkwrap":false},"4.0.0":{"name":"preact-render-to-string","amdName":"preactRenderToString","version":"4.0.0","description":"Render JSX to an HTML string, with support for Preact components.","main":"dist/index.js","umd:main":"dist/index.js","module":"dist/index.mjs","jsnext:main":"dist/index.mjs","scripts":{"build":"npm run -s transpile && npm run -s transpile:jsx && npm run -s copy-typescript-definition","transpile":"echo 'export const ENABLE_PRETTY = false;'>env.js && microbundle src/index.js -f es,umd --target web --external none","transpile:jsx":"echo 'export const ENABLE_PRETTY = true;'>env.js && microbundle src/jsx.js -o dist/jsx.js --target web --external none","copy-typescript-definition":"copyfiles -f src/index.d.ts dist","test":"eslint src test && mocha --compilers js:babel-register test/**/*.js","prepublish":"npm run build","release":"npm run build && git commit -am $npm_package_version && git tag $npm_package_version && git push && git push --tags && npm publish"},"keywords":["preact","render","universal","isomorphic"],"files":["src","dist","jsx.js","typings.json"],"eslintConfig":{"extends":"developit","rules":{"react/prefer-stateless-function":0,"react/jsx-no-bind":0,"react/no-danger":0,"jest/valid-expect":0,"new-cap":0}},"babel":{"presets":["env"],"plugins":[["transform-react-jsx",{"pragma":"h"}],"transform-object-rest-spread"]},"author":{"name":"Jason Miller","email":"jason@developit.ca"},"license":"MIT","typings":"src/index.d.ts","repository":{"type":"git","url":"git+https://github.com/developit/preact-render-to-string.git"},"bugs":{"url":"https://github.com/developit/preact-render-to-string/issues"},"homepage":"https://github.com/developit/preact-render-to-string","peerDependencies":{"preact":"*"},"devDependencies":{"babel-plugin-transform-object-rest-spread":"^6.26.0","babel-plugin-transform-react-jsx":"^6.24.1","babel-preset-env":"^1.7.0","babel-register":"^6.26.0","chai":"^3.5.0","copyfiles":"^1.2.0","eslint":"^4.19.1","eslint-config-developit":"^1.1.1","microbundle":"^0.6.0","mocha":"^5.2.0","preact":"^8.1.0","sinon":"^1.17.5","sinon-chai":"^2.8.0"},"dependencies":{"pretty-format":"^3.5.1"},"gitHead":"c06f33491968c95764c655d162da19ca4c5921d3","_id":"preact-render-to-string@4.0.0","_npmVersion":"6.4.0","_nodeVersion":"10.6.0","_npmUser":{"name":"developit","email":"jason@developit.ca"},"dist":{"integrity":"sha512-DVNjSHI9DfDv8G+hSrtk3TyXS3FQpL6c/5N2oxdCWq3SCMKlTUbdMnc3rYA3+xWnHeGIXllNlLQrFl0m7poK1g==","shasum":"a449aba967daca35af6a9d4e03ea0d6bc743b95c","tarball":"http://localhost:4545/npm/registry/preact-render-to-string/preact-render-to-string-4.0.0.tgz","fileCount":17,"unpackedSize":94456,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbdNEhCRA9TVsSAnZWagAAM88P/0II1rqD/6APn0M8CqY9\nQ6syOyWyqy2icBqikq7VNncOL9/3p0985DwjTtrnriEIWHxOMrt1ngk+/14r\nUwW2mZDKORQxeAl6JCXqq01mOTow7lWXlzR9TuU7waEtkvzhNOUtY9Hxvn5D\n7w/yee1Wq8l6JnB7Rgz0rqOLjeBnHbTyxmXFzVCIkVKihV9Pu7isnkPs81kj\ncYYdpZhf/Y60PGA0snI70jwQdHaKcyb++Fe64a94IqH2Qgbh3+aX/c0zKzyJ\nnyBD/qHapKxQfYTYeL58NSQxO3icBaRO8H8Lg7J82731FOTx1xWW2CEnm8oi\n3iCQBHG3FnrsrtVFCqYzMGjSLb4n5EdZbODgSmHIV5VKMec26DAoYzMz35JQ\nGFTninpXZZ7xeGPbgUqMYKdu94X4BFNEjJnQuCzfxUmiFBcEFhgZGsfOy6kE\nEIcPPsKA7O6QivPIKXjJdSe5CxXo4LHY5uqjqexrpIXQ/uhxZjOwK9P+bGy9\nOtG3R4FdY0x8yAsvVTyHlYUsDAnGSNWUjE0z0g9sE22V/1c2BfX+qz6T0zVd\nNtS6y2v4UlOFZnMW3Ba/mNLw8dsPLbGWnlQvLH3xuKfZoDkjvORSZ98Tt4IE\nYb5+IZsSRaFJxhOf44QBWw+9Uzor1FzOI434VRbxXspQNq5RcUiTm3PDrby6\nV8Wa\r\n=nWVz\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD8hJI1tQXm5RHKFSf6RzErXjO+oFQzth8pJ0lagfF6QgIgUJ1oHxI2W7AN+qm/x41rOiWBEiJ16fZ/0L0KulwbxkI="}]},"maintainers":[{"name":"developit","email":"jason@developit.ca"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/preact-render-to-string_4.0.0_1534382369378_0.23935044228737645"},"_hasShrinkwrap":false},"4.0.1":{"name":"preact-render-to-string","amdName":"preactRenderToString","version":"4.0.1","description":"Render JSX to an HTML string, with support for Preact components.","main":"dist/index.js","umd:main":"dist/index.js","module":"dist/index.mjs","jsnext:main":"dist/index.mjs","scripts":{"build":"npm run -s transpile && npm run -s transpile:jsx && npm run -s copy-typescript-definition","transpile":"echo 'export const ENABLE_PRETTY = false;'>env.js && microbundle src/index.js -f es,umd --target web --external none","transpile:jsx":"echo 'export const ENABLE_PRETTY = true;'>env.js && microbundle src/jsx.js -o dist/jsx.js --target web --external none && microbundle dist/jsx.js -o dist/jsx.js -f cjs","copy-typescript-definition":"copyfiles -f src/index.d.ts dist","test":"eslint src test && mocha --compilers js:babel-register test/**/*.js","prepublish":"npm run build","release":"npm run build && git commit -am $npm_package_version && git tag $npm_package_version && git push && git push --tags && npm publish"},"keywords":["preact","render","universal","isomorphic"],"files":["src","dist","jsx.js","typings.json"],"eslintConfig":{"extends":"developit","rules":{"react/prefer-stateless-function":0,"react/jsx-no-bind":0,"react/no-danger":0,"jest/valid-expect":0,"new-cap":0}},"babel":{"presets":["env"],"plugins":[["transform-react-jsx",{"pragma":"h"}],"transform-object-rest-spread"]},"author":{"name":"Jason Miller","email":"jason@developit.ca"},"license":"MIT","typings":"src/index.d.ts","repository":{"type":"git","url":"git+https://github.com/developit/preact-render-to-string.git"},"bugs":{"url":"https://github.com/developit/preact-render-to-string/issues"},"homepage":"https://github.com/developit/preact-render-to-string","peerDependencies":{"preact":"*"},"devDependencies":{"babel-plugin-transform-object-rest-spread":"^6.26.0","babel-plugin-transform-react-jsx":"^6.24.1","babel-preset-env":"^1.7.0","babel-register":"^6.26.0","chai":"^3.5.0","copyfiles":"^1.2.0","eslint":"^4.19.1","eslint-config-developit":"^1.1.1","microbundle":"^0.6.0","mocha":"^5.2.0","preact":"^8.1.0","sinon":"^1.17.5","sinon-chai":"^2.8.0"},"dependencies":{"pretty-format":"^3.8.0"},"readme":"# preact-render-to-string\n\n[![NPM](http://img.shields.io/npm/v/preact-render-to-string.svg)](https://www.npmjs.com/package/preact-render-to-string)\n[![travis-ci](https://travis-ci.org/developit/preact-render-to-string.svg)](https://travis-ci.org/developit/preact-render-to-string)\n\nRender JSX and [Preact] components to an HTML string.\n\nWorks in Node & the browser, making it useful for universal/isomorphic rendering.\n\n\\>\\> **[Cute Fox-Related Demo](http://codepen.io/developit/pen/dYZqjE?editors=001)** _(@ CodePen)_ <<\n\n\n---\n\n\n### Render JSX/VDOM to HTML\n\n```js\nimport render from 'preact-render-to-string';\nimport { h } from 'preact';\n/** @jsx h */\n\nlet vdom =
content
;\n\nlet html = render(vdom);\nconsole.log(html);\n//
content
\n```\n\n\n### Render Preact Components to HTML\n\n```js\nimport render from 'preact-render-to-string';\nimport { h, Component } from 'preact';\n/** @jsx h */\n\n// Classical components work\nclass Fox extends Component {\n\trender({ name }) {\n\t\treturn { name };\n\t}\n}\n\n// ... and so do pure functional components:\nconst Box = ({ type, children }) => (\n\t
{ children }
\n);\n\nlet html = render(\n\t\n\t\t\n\t\n);\n\nconsole.log(html);\n//
Finn
\n```\n\n\n---\n\n\n### Render JSX / Preact / Whatever via Express!\n\n```js\nimport express from 'express';\nimport { h } from 'preact';\nimport render from 'preact-render-to-string';\n/** @jsx h */\n\n// silly example component:\nconst Fox = ({ name }) => (\n\t
\n\t\t
{ name }
\n\t\t
This page is all about {name}.
\n\t
\n);\n\n// basic HTTP server via express:\nconst app = express();\napp.listen(8080);\n\n// on each request, render and return a component:\napp.get('/:fox', (req, res) => {\n\tlet html = render();\n\t// send it back wrapped up as an HTML5 document:\n\tres.send(`${html}`);\n});\n```\n\n\n---\n\n\n### License\n\n[MIT]\n\n\n[Preact]: https://github.com/developit/preact\n[MIT]: http://choosealicense.com/licenses/mit/\n","readmeFilename":"README.md","gitHead":"cdd14bb85afd5151d1fbf8c2b5a23ecdd8f97cfa","_id":"preact-render-to-string@4.0.1","_npmVersion":"6.4.0","_nodeVersion":"10.6.0","_npmUser":{"name":"developit","email":"jason@developit.ca"},"dist":{"integrity":"sha512-gOE0cCUIWDIbhJ0a0Gss3BTiVQy/0uJP1HO/A8GzadYPt35BmsZbF6X1JAHBUZ/JosikTCBujqaygqu1IdAwvw==","shasum":"33957e37f2d37b456661ac75cf0253a25da4f91f","tarball":"http://localhost:4545/npm/registry/preact-render-to-string/preact-render-to-string-4.0.1.tgz","fileCount":19,"unpackedSize":100693,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbdjE0CRA9TVsSAnZWagAACfEQAI2ilR7TSWuyBeEMwCQ7\nquH8p854d9egDBiL1yVoE7jToRGf6MhtqKwkGLhvZEez3wK5cnCYEczK5JMO\nQTw1JmUTv260cVquCiEZL8TC0gWJNvZfhr/X/x6TcfMWh36FHqTzo6L7Bs0J\nSkNh3Uv/c+UmMnZf+HI2GWF/kgBIh6DRhJ+iWVySxyoicthjt0ENVqbVaMgB\nhgqhUbHtQe74IMOiSgddObs3qRr9yYz2L3qDwmloLP4Khp0T+wSE/fWH3UoK\nAhbSuOuzfw28OD64KvK5w9TqxONHOGfQR1kad0ipqWLT1NL31Y8Z1g3719z2\n7xTITklLvX8FbI8QzSCQFLespghqfCQ6u/F2eNn1nA7OhrabTGHAm3rHBFfN\nkIv+YrCBvnsqfdy7NXjmEPUMqVEnzIVXqwg5jUCe0FURNY9JRN1QH7KeGO3r\ny8VqLJmIOPo1w2V+fA4YUD2MI0S/c+BDHNm7rX7PlQrRqK2dHM+K9TTGCCZT\nSLhA55ZWFzeTUVkuRhweOYVosGu9GxfuiByWYFJCBEqGrJJ2wyhG9aHWxRLw\nBSoMEvGyXoOolu/6kojtPgGDIwXnocb6Q4hixSWDM5X3HsV/0iZAirQEgXuD\nHcZWzqkcjwkM52w7e7Kis2LkSXZ/F+wJCUPuQhjtKmKnUYIwGCF/KJLmZjBf\nB8wJ\r\n=H3PE\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIH6QEL96wrDm9is86dpkVRyOopg/lpixfcPR5wOstp+zAiAwRtuODXyKtdohuuoVsbbX5eqU6Q2XeyCF87zY+kxlRQ=="}]},"maintainers":[{"name":"developit","email":"jason@developit.ca"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/preact-render-to-string_4.0.1_1534472499194_0.12754328058881792"},"_hasShrinkwrap":false},"3.8.2":{"name":"preact-render-to-string","amdName":"preactRenderToString","version":"3.8.2","description":"Render JSX to an HTML string, with support for Preact components.","main":"dist/index.js","umd:main":"dist/index.js","module":"dist/index.mjs","jsnext:main":"dist/index.mjs","scripts":{"build":"npm run -s transpile && npm run -s transpile:jsx && npm run -s copy-typescript-definition","transpile":"microbundle src/index.js -f es,umd --target web --external none","transpile:jsx":"microbundle src/jsx.js -o dist/jsx.js --target web --external none && microbundle dist/jsx.js -o dist/jsx.js -f cjs","copy-typescript-definition":"copyfiles -f src/index.d.ts dist","test":"eslint src test && mocha --compilers js:babel-register test/**/*.js","prepublish":"npm run build","release":"npm run build && git commit -am $npm_package_version && git tag $npm_package_version && git push && git push --tags && npm publish"},"keywords":["preact","render","universal","isomorphic"],"files":["src","dist","jsx.js","typings.json"],"eslintConfig":{"extends":"developit","rules":{"react/prefer-stateless-function":0,"react/jsx-no-bind":0,"react/no-danger":0,"jest/valid-expect":0,"new-cap":0}},"babel":{"presets":["env"],"plugins":[["transform-react-jsx",{"pragma":"h"}],"transform-object-rest-spread"]},"author":{"name":"Jason Miller","email":"jason@developit.ca"},"license":"MIT","typings":"src/index.d.ts","repository":{"type":"git","url":"git+https://github.com/developit/preact-render-to-string.git"},"bugs":{"url":"https://github.com/developit/preact-render-to-string/issues"},"homepage":"https://github.com/developit/preact-render-to-string","peerDependencies":{"preact":"*"},"devDependencies":{"babel-plugin-transform-object-rest-spread":"^6.26.0","babel-plugin-transform-react-jsx":"^6.24.1","babel-preset-env":"^1.7.0","babel-register":"^6.26.0","chai":"^3.5.0","copyfiles":"^1.2.0","eslint":"^4.19.1","eslint-config-developit":"^1.1.1","microbundle":"^0.6.0","mocha":"^5.2.0","preact":"^8.1.0","sinon":"^1.17.5","sinon-chai":"^2.8.0"},"dependencies":{"pretty-format":"^3.5.1"},"gitHead":"b090ee56def6f8cd460e98325127c55e3229eef7","_id":"preact-render-to-string@3.8.2","_npmVersion":"6.4.0","_nodeVersion":"10.6.0","_npmUser":{"name":"developit","email":"jason@developit.ca"},"dist":{"integrity":"sha512-przuZPajiurStGgxMoJP0EJeC4xj5CgHv+M7GfF3YxAdhGgEWAkhOSE0xympAFN20uMayntBZpttIZqqLl77fw==","shasum":"bd72964d705a57da3a9e72098acaa073dd3ceff9","tarball":"http://localhost:4545/npm/registry/preact-render-to-string/preact-render-to-string-3.8.2.tgz","fileCount":19,"unpackedSize":103820,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbdjIhCRA9TVsSAnZWagAAvTUQAI2paah+JxlAXQlBH9eY\nDps5Qpff/dnPjp/UQtkT3ldOy/l99fl36iDZIci6JT6TOrgXxsbocLmzmjyr\nF7XsDxp8zU1SeKkT0KF+GXfTv+yGkXxRbTRdG9Rnn5186cfckB2G2Zpz/b/a\n0/xj+CNCF6+tXXYB5dkvdg/DttGCjLXBSJ/o5hQoQ+ZHwb4S+lHVtqmTvDFY\n4vD+jRSvacU0x99eBw3k2dshDMD08eTtT85eKCBdzjH1vgWuyuhi5b/8Q5Th\ne65XDqTmBYKHEOxR7mc8myJAM2taf7PQgDzFN8AIbaxyKyICH9irJ3M6gvCH\nh5lGqyWHXdkHy4c5/FywzzuQZGn7T3C95rbCHTiUAxZxDQDMg0h58/qIrKeo\nfrw0CEUr7yzPdzqzygBZe8JC84sQOJr5sHuS1tXOW6frP3iUe+qruardmpsw\nIwjGDUrHJjjwq7InUD7cSl3YJWChJEgp25KZy0m5hXetpwQVghUPCR1SIez6\niZkRdRMbnIvygZ99IsHdh7joF3P47xoSpZdHKD6II7MJrfZ6A4mi3CJFKXQk\nAMUFGYikU6DDN+lRswiiu4cvfQV5leqDd6VvRBXj92mFYx6qPQROst36zgM+\nTiXR4Zttsc2/7odFbCJssHbVyw4X5KbrP7yQ07KEJ2FLdb4eQnyYySF9Xxik\nZC2Z\r\n=39wq\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDdnOIiX6ITSj4FgSnPaFb3fEma0C7/5QHS4aV9jeRYMAiEA0jVzWzQW/xIoTBHaRlVmCRMHMP7JDF1VqV4bsPBr4Nk="}]},"maintainers":[{"name":"developit","email":"jason@developit.ca"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/preact-render-to-string_3.8.2_1534472737263_0.25264184967228154"},"_hasShrinkwrap":false},"4.1.0":{"name":"preact-render-to-string","amdName":"preactRenderToString","version":"4.1.0","description":"Render JSX to an HTML string, with support for Preact components.","main":"dist/index.js","umd:main":"dist/index.js","module":"dist/index.mjs","jsnext:main":"dist/index.mjs","scripts":{"build":"npm run -s transpile && npm run -s transpile:jsx && npm run -s copy-typescript-definition","transpile":"echo 'export const ENABLE_PRETTY = false;'>env.js && microbundle src/index.js -f es,umd --target web --external none","transpile:jsx":"echo 'export const ENABLE_PRETTY = true;'>env.js && microbundle src/jsx.js -o dist/jsx.js --target web --external none && microbundle dist/jsx.js -o dist/jsx.js -f cjs","copy-typescript-definition":"copyfiles -f src/index.d.ts dist","test":"eslint src test && mocha --compilers js:babel-register test/**/*.js","prepublish":"npm run build","release":"npm run build && git commit -am $npm_package_version && git tag $npm_package_version && git push && git push --tags && npm publish"},"keywords":["preact","render","universal","isomorphic"],"files":["src","dist","jsx.js","typings.json"],"eslintConfig":{"extends":"developit","rules":{"react/prefer-stateless-function":0,"react/jsx-no-bind":0,"react/no-danger":0,"jest/valid-expect":0,"new-cap":0}},"babel":{"presets":["env"],"plugins":[["transform-react-jsx",{"pragma":"h"}],"transform-object-rest-spread"]},"author":{"name":"Jason Miller","email":"jason@developit.ca"},"license":"MIT","typings":"src/index.d.ts","repository":{"type":"git","url":"git+https://github.com/developit/preact-render-to-string.git"},"bugs":{"url":"https://github.com/developit/preact-render-to-string/issues"},"homepage":"https://github.com/developit/preact-render-to-string","peerDependencies":{"preact":"*"},"devDependencies":{"babel-plugin-transform-object-rest-spread":"^6.26.0","babel-plugin-transform-react-jsx":"^6.24.1","babel-preset-env":"^1.7.0","babel-register":"^6.26.0","chai":"^3.5.0","copyfiles":"^1.2.0","eslint":"^4.19.1","eslint-config-developit":"^1.1.1","microbundle":"^0.6.0","mocha":"^5.2.0","preact":"^8.1.0","sinon":"^1.17.5","sinon-chai":"^2.8.0"},"dependencies":{"pretty-format":"^3.8.0"},"gitHead":"ef7b0a260f3bf834a7deaf4cb5e8016610c57ed4","_id":"preact-render-to-string@4.1.0","_npmVersion":"6.4.0","_nodeVersion":"10.6.0","_npmUser":{"name":"developit","email":"jason@developit.ca"},"dist":{"integrity":"sha512-FlFBJRxo8z4cp6VsDmeYjIEx4ZK2clFJnKIvIj8K1IQCRm7ZgJ/SZ1+BotT86/Nc+V1pNtFabHoUi6gpjx5Pug==","shasum":"70d98a8385cb86558366c558aad7311ebecb881d","tarball":"http://localhost:4545/npm/registry/preact-render-to-string/preact-render-to-string-4.1.0.tgz","fileCount":19,"unpackedSize":101869,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbdjSvCRA9TVsSAnZWagAA7AgP/3EZicWY93Ihe3737dUr\n4NrYwwQ6GO2/KyzQsqdDu64u22uAFXNUQxAJYpetUgaHBZbOuNZXlCOii/Jg\nmOVZaewup29Zyt78wCWxyeNijM7P69hVSyAeH0cUYjRwS4p3ez4Pm5v0qeJy\n94aptYcVKEriWQpmnXz0d9yKx0b3ZAlIYYao/g0blvAonuGI2LVOV13sVuwy\nAsSwi2LqaUdGw2WDrhQIF5phZ0C1NsQyYiocl84ODQ2ZIygXcmnj5JSQUkF3\n2Uwo4UD9mxZ2KVJYOf8K4GjJ0RLflzIGttSdggptR2Q6jqLXenIeO1SAj88F\nWtCVEgeHT9ISC0GmNjUamY1nINRT/mES+FVuPzb0YczTbeAkQ3pW4k85II7j\nQ5XALSTm65ixGwF0DyuF+C2ZqP1KW7UQ2aZeDIJoOnRL8XV2FG6iGckgdCpX\nvSw8R+BOVEeQshrF59aXQ3UZnTCYXMTF/g1mGei70OrMOp5eofGh1Vb9kg46\nutClsRX4ZkKr6945Dgxc8+1UNHfwMJBaY1VWA+hXoAK8mKauXUbjiyFjJSWz\nNmh/83bAgwZDMu6r2G1EvOciUZN/Rpj6Usm5UQ1xyBkUamKoT/J3Icvnd/Da\nra4K6oJsXfadokVo5Bkg/3JJryjxpBaBZoZibarMeiE2AFSO6762yRYG8fD3\nIwov\r\n=gU84\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIE13I/jTrkDTI7GhgwFWDRG+3nukS/+a78ti1McqExL6AiAhYkhQENgcu3oN/ZlC+aUrwGIcqEs/oa2FAGquylsFKw=="}]},"maintainers":[{"name":"developit","email":"jason@developit.ca"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/preact-render-to-string_4.1.0_1534473391274_0.7535264488878044"},"_hasShrinkwrap":false},"5.0.0":{"name":"preact-render-to-string","amdName":"preactRenderToString","version":"5.0.0","description":"Render JSX to an HTML string, with support for Preact components.","main":"dist/index.js","umd:main":"dist/index.js","module":"dist/index.mjs","jsnext:main":"dist/index.mjs","scripts":{"build":"npm run -s transpile && npm run -s transpile:jsx && npm run -s copy-typescript-definition","transpile":"echo 'export const ENABLE_PRETTY = false;'>env.js && microbundle src/index.js -f es,umd --target web --external none","transpile:jsx":"echo 'export const ENABLE_PRETTY = true;'>env.js && microbundle src/jsx.js -o dist/jsx.js --target web --external none && microbundle dist/jsx.js -o dist/jsx.js -f cjs","copy-typescript-definition":"copyfiles -f src/index.d.ts dist","test":"eslint src test && mocha --compilers js:babel-register test/**/*.js","prepublish":"npm run build","release":"npm run build && git commit -am $npm_package_version && git tag $npm_package_version && git push && git push --tags && npm publish"},"keywords":["preact","render","universal","isomorphic"],"eslintConfig":{"extends":"developit","rules":{"react/prefer-stateless-function":0,"react/jsx-no-bind":0,"react/no-danger":0,"jest/valid-expect":0,"new-cap":0}},"babel":{"presets":["env"],"plugins":[["transform-react-jsx",{"pragma":"h"}],"transform-object-rest-spread"]},"author":{"name":"Jason Miller","email":"jason@developit.ca"},"license":"MIT","typings":"src/index.d.ts","repository":{"type":"git","url":"git+https://github.com/developit/preact-render-to-string.git"},"bugs":{"url":"https://github.com/developit/preact-render-to-string/issues"},"homepage":"https://github.com/developit/preact-render-to-string","peerDependencies":{"preact":">=10 || ^10.0.0-alpha.0"},"devDependencies":{"babel-plugin-transform-object-rest-spread":"^6.26.0","babel-plugin-transform-react-jsx":"^6.24.1","babel-preset-env":"^1.7.0","babel-register":"^6.26.0","chai":"^3.5.0","copyfiles":"^1.2.0","eslint":"^4.19.1","eslint-config-developit":"^1.1.1","microbundle":"^0.6.0","mocha":"^5.2.0","preact":"^10.0.0-alpha.0","sinon":"^1.17.5","sinon-chai":"^2.8.0"},"dependencies":{"pretty-format":"^3.8.0"},"gitHead":"6e2a9e4b47d56060459c409cad18f14c8da47611","_id":"preact-render-to-string@5.0.0","_npmVersion":"6.4.1","_nodeVersion":"10.15.0","_npmUser":{"name":"developit","email":"jason@developit.ca"},"dist":{"integrity":"sha512-PVUcXpXskGL0vbKk6eiQZGG/6qMHunemARRmIU9t56/PehXbxzoVbTBdDgcTFcTyzewU0ZOhBTdonOUPGy4+PA==","shasum":"6eec079b4777d863e6e82f7b2d4accfc68733c1b","tarball":"http://localhost:4545/npm/registry/preact-render-to-string/preact-render-to-string-5.0.0.tgz","fileCount":17,"unpackedSize":78432,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcgTy/CRA9TVsSAnZWagAAbF4P/3GZ7YJBTsTujHnr6rty\ndb0sRuygv1enrhmJ5UB215vFI0G7rotvl1HKoUUDMPt5Vx7YWzk1ooftOgbl\nZ3yQuE8swZ+UwhWxrxNma5c0QkJDCSqN36wz3uO1aLnaTNQd+qKV2d33KTi6\nPcKlUJP4urwXvW+N+gR4c7+M95i9JscWBszcKxpcaJsAIptx8Aa0Y9qM0bF0\nPYbjh81vhM7jPL3zm6m2iAvp8EcgIk2j6lrpo78SoaJcQXXo1Y92/EWXYfkz\nHo+2B85G5CHeNn4VoSjC0fGLl8TN8NyABB6U1vPNNZCWWeEwu5P1j0SR4P6O\nEdBf692QcmPgLyP4ZzWq/6sLCTZa+53zCmfhdvh7vVXvnjJpCP1rZ5/+IJ+L\nvsHO4UDvXbE8ow93KtVOPDexdXSGm5auFw+z3MzYSp5hsp0pltv9u6wtmZyN\nqIu/dLJmA4OH65idDYk0HqFSSAY0OYB6df8D+eNHpV6OSUbJbcu9e1pTn7PT\nES47c/2TvIj4tcAOfKexUAP3/NwP74DlhQEhzu89gyOBoFV0cCViAxt6fFsK\ntEc3beWWdrgR8whfKXuH90gDusq4Oi+zRTl36Lm3sbtPqw1+7Sie88uXihGy\nVImSnxWr7EcecE+TC3cCYiiBD3/7QDUbh240o+FuuLbpc9H+Zckkg+xw43y4\nDHwd\r\n=aiBy\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEiU/FnjhI+iaWEn4lB/Q9VR3UsPyPqDUCYJlktwZTGOAiEAkqSSc7+G6KyHfHJ3+Up9pzFtys63ewY5Vjuihdibmow="}]},"maintainers":[{"name":"developit","email":"jason@developit.ca"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/preact-render-to-string_5.0.0_1551973566926_0.769548087120407"},"_hasShrinkwrap":false},"5.0.1":{"name":"preact-render-to-string","amdName":"preactRenderToString","version":"5.0.1","description":"Render JSX to an HTML string, with support for Preact components.","main":"dist/index.js","umd:main":"dist/index.js","module":"dist/index.mjs","jsnext:main":"dist/index.mjs","scripts":{"build":"npm run -s transpile && npm run -s transpile:jsx && npm run -s copy-typescript-definition","transpile":"echo 'export const ENABLE_PRETTY = false;'>env.js && microbundle src/index.js -f es,umd --target web --external none","transpile:jsx":"echo 'export const ENABLE_PRETTY = true;'>env.js && microbundle src/jsx.js -o dist/jsx.js --target web --external none && microbundle dist/jsx.js -o dist/jsx.js -f cjs","copy-typescript-definition":"copyfiles -f src/index.d.ts dist","test":"eslint src test && mocha --compilers js:babel-register test/**/*.js","prepublish":"npm run build","release":"npm run build && git commit -am $npm_package_version && git tag $npm_package_version && git push && git push --tags && npm publish"},"keywords":["preact","render","universal","isomorphic"],"eslintConfig":{"extends":"developit","rules":{"react/prefer-stateless-function":0,"react/jsx-no-bind":0,"react/no-danger":0,"jest/valid-expect":0,"new-cap":0}},"babel":{"presets":["env"],"plugins":[["transform-react-jsx",{"pragma":"h"}],"transform-object-rest-spread"]},"author":{"name":"Jason Miller","email":"jason@developit.ca"},"license":"MIT","typings":"src/index.d.ts","repository":{"type":"git","url":"git+https://github.com/developit/preact-render-to-string.git"},"bugs":{"url":"https://github.com/developit/preact-render-to-string/issues"},"homepage":"https://github.com/developit/preact-render-to-string","peerDependencies":{"preact":">=10 || ^10.0.0-alpha.0"},"devDependencies":{"babel-plugin-transform-object-rest-spread":"^6.26.0","babel-plugin-transform-react-jsx":"^6.24.1","babel-preset-env":"^1.7.0","babel-register":"^6.26.0","chai":"^3.5.0","copyfiles":"^1.2.0","eslint":"^4.19.1","eslint-config-developit":"^1.1.1","microbundle":"^0.6.0","mocha":"^5.2.0","preact":"^10.0.0-alpha.0","sinon":"^1.17.5","sinon-chai":"^2.8.0"},"dependencies":{"pretty-format":"^3.8.0"},"readme":"# preact-render-to-string\n\n[![NPM](http://img.shields.io/npm/v/preact-render-to-string.svg)](https://www.npmjs.com/package/preact-render-to-string)\n[![travis-ci](https://travis-ci.org/developit/preact-render-to-string.svg)](https://travis-ci.org/developit/preact-render-to-string)\n\nRender JSX and [Preact] components to an HTML string.\n\nWorks in Node & the browser, making it useful for universal/isomorphic rendering.\n\n\\>\\> **[Cute Fox-Related Demo](http://codepen.io/developit/pen/dYZqjE?editors=001)** _(@ CodePen)_ <<\n\n\n---\n\n\n### Render JSX/VDOM to HTML\n\n```js\nimport render from 'preact-render-to-string';\nimport { h } from 'preact';\n/** @jsx h */\n\nlet vdom =
content
;\n\nlet html = render(vdom);\nconsole.log(html);\n//
content
\n```\n\n\n### Render Preact Components to HTML\n\n```js\nimport render from 'preact-render-to-string';\nimport { h, Component } from 'preact';\n/** @jsx h */\n\n// Classical components work\nclass Fox extends Component {\n\trender({ name }) {\n\t\treturn { name };\n\t}\n}\n\n// ... and so do pure functional components:\nconst Box = ({ type, children }) => (\n\t
{ children }
\n);\n\nlet html = render(\n\t\n\t\t\n\t\n);\n\nconsole.log(html);\n//
Finn
\n```\n\n\n---\n\n\n### Render JSX / Preact / Whatever via Express!\n\n```js\nimport express from 'express';\nimport { h } from 'preact';\nimport render from 'preact-render-to-string';\n/** @jsx h */\n\n// silly example component:\nconst Fox = ({ name }) => (\n\t
\n\t\t
{ name }
\n\t\t
This page is all about {name}.
\n\t
\n);\n\n// basic HTTP server via express:\nconst app = express();\napp.listen(8080);\n\n// on each request, render and return a component:\napp.get('/:fox', (req, res) => {\n\tlet html = render();\n\t// send it back wrapped up as an HTML5 document:\n\tres.send(`${html}`);\n});\n```\n\n\n---\n\n\n### License\n\n[MIT]\n\n\n[Preact]: https://github.com/developit/preact\n[MIT]: http://choosealicense.com/licenses/mit/\n","readmeFilename":"README.md","gitHead":"8536c758e3d1808bcc18d64cd944da609531d11e","_id":"preact-render-to-string@5.0.1","_npmVersion":"6.4.1","_nodeVersion":"10.15.0","_npmUser":{"name":"developit","email":"jason@developit.ca"},"dist":{"integrity":"sha512-MQbmKM9hHkaY4lTbjkjGQJGOiuDbcxGXkjxUCrXTzD06VzFVYvtQ5fQuFCl+vab+jlDo9iGikKBY8fdb0IovTQ==","shasum":"5d3472d79c2145791f627c4e5cfb25d3b6508ace","tarball":"http://localhost:4545/npm/registry/preact-render-to-string/preact-render-to-string-5.0.1.tgz","fileCount":17,"unpackedSize":96968,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJciqwiCRA9TVsSAnZWagAAslQP/iFbFWal65Cl4qPVhNHg\nGAymf6x58nn7gnyrDyODevfRs4BGDYAzkQ8yAxHg0qygTZ75st7WaNaUe9AD\nJS74Hi/Ia39exhL6esBBx/H4UmdjkW2wlajL09Vg1vBE7xXds8MsP/Yod2s0\nQ+tKev3HKCWu+o3AZ3fCzs/MWOc6yqu2VU25gFXFuyFnKqYaAemhHsyVc/HS\nd+KduAfgH2FImIaPetKd+ErxJJjgDNYF36+q+3CbUP18iUDS9EdwP7OxY/yQ\nZLsITApZK6YMVtZPXHqybHW6T4CRKum0nkDoA9XCDLE5bHr0PmI84K7/4vlk\n8IOP4VJamhI29LgBMuUpKcE9jEB2P1tC9O6XrnSGsQGSjZyJg2HKkQlHukTk\n5+vIhvh0xZkruZqZNsL6MjYvHNRDiNzWio5dSVjLhGJwVhy96FRdi1OhDX+p\nxr5wTgrfU3gQbfLBCD7mHs27HE1ti+FXMlSY5MxtZ7bzsIs2ArQPJghoJ0GE\n81F/m8A0HROmHN2wPlg1sMT3sRUYvBbuiKgZbTahxVIgfv5WUn3BNUboe/Wz\nlf5WleUawTTXBNPpfvjoIXXT54wAJy5BHrQTueJ01y1p0aYAUAUonECa9Li0\ny8hfGyUTmlC228MFrsR5uteBOoP1Y2SzAc1uIT7vcgkfCZLQvPaI+2fXGSBn\nwj83\r\n=tOgk\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDKt/J7orFheYulIp5CjYOFqpcLT/xXFGaIIOqpvIf+VAiEA+vEWjnPxlvxyNpnAYdazuv0Wc3XDXFzIKJhnSekqJLw="}]},"maintainers":[{"name":"developit","email":"jason@developit.ca"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/preact-render-to-string_5.0.1_1552591906168_0.2520127411764801"},"_hasShrinkwrap":false},"5.0.2":{"name":"preact-render-to-string","amdName":"preactRenderToString","version":"5.0.2","description":"Render JSX to an HTML string, with support for Preact components.","main":"dist/index.js","umd:main":"dist/index.js","module":"dist/index.mjs","jsnext:main":"dist/index.mjs","scripts":{"build":"npm run -s transpile && npm run -s transpile:jsx && npm run -s copy-typescript-definition","transpile":"echo 'export const ENABLE_PRETTY = false;'>env.js && microbundle src/index.js -f es,umd --target web --external preact","transpile:jsx":"echo 'export const ENABLE_PRETTY = true;'>env.js && microbundle src/jsx.js -o dist/jsx.js --target web --external none && microbundle dist/jsx.js -o dist/jsx.js -f cjs","copy-typescript-definition":"copyfiles -f src/index.d.ts dist","test":"eslint src test && mocha --compilers js:babel-register test/**/*.js","prepublish":"npm run build","release":"npm run build && git commit -am $npm_package_version && git tag $npm_package_version && git push && git push --tags && npm publish"},"keywords":["preact","render","universal","isomorphic"],"eslintConfig":{"extends":"developit","rules":{"react/prefer-stateless-function":0,"react/jsx-no-bind":0,"react/no-danger":0,"jest/valid-expect":0,"new-cap":0}},"babel":{"presets":["env"],"plugins":[["transform-react-jsx",{"pragma":"h"}],"transform-object-rest-spread"]},"author":{"name":"Jason Miller","email":"jason@developit.ca"},"license":"MIT","typings":"src/index.d.ts","repository":{"type":"git","url":"git+https://github.com/developit/preact-render-to-string.git"},"bugs":{"url":"https://github.com/developit/preact-render-to-string/issues"},"homepage":"https://github.com/developit/preact-render-to-string","peerDependencies":{"preact":">=10 || ^10.0.0-alpha.0"},"devDependencies":{"babel-plugin-transform-object-rest-spread":"^6.26.0","babel-plugin-transform-react-jsx":"^6.24.1","babel-preset-env":"^1.7.0","babel-register":"^6.26.0","chai":"^3.5.0","copyfiles":"^1.2.0","eslint":"^4.19.1","eslint-config-developit":"^1.1.1","microbundle":"^0.6.0","mocha":"^5.2.0","preact":"^10.0.0-alpha.0","sinon":"^1.17.5","sinon-chai":"^2.8.0"},"dependencies":{"pretty-format":"^3.8.0"},"readme":"# preact-render-to-string\n\n[![NPM](http://img.shields.io/npm/v/preact-render-to-string.svg)](https://www.npmjs.com/package/preact-render-to-string)\n[![travis-ci](https://travis-ci.org/developit/preact-render-to-string.svg)](https://travis-ci.org/developit/preact-render-to-string)\n\nRender JSX and [Preact] components to an HTML string.\n\nWorks in Node & the browser, making it useful for universal/isomorphic rendering.\n\n\\>\\> **[Cute Fox-Related Demo](http://codepen.io/developit/pen/dYZqjE?editors=001)** _(@ CodePen)_ <<\n\n\n---\n\n\n### Render JSX/VDOM to HTML\n\n```js\nimport render from 'preact-render-to-string';\nimport { h } from 'preact';\n/** @jsx h */\n\nlet vdom =
content
;\n\nlet html = render(vdom);\nconsole.log(html);\n//
content
\n```\n\n\n### Render Preact Components to HTML\n\n```js\nimport render from 'preact-render-to-string';\nimport { h, Component } from 'preact';\n/** @jsx h */\n\n// Classical components work\nclass Fox extends Component {\n\trender({ name }) {\n\t\treturn { name };\n\t}\n}\n\n// ... and so do pure functional components:\nconst Box = ({ type, children }) => (\n\t
{ children }
\n);\n\nlet html = render(\n\t\n\t\t\n\t\n);\n\nconsole.log(html);\n//
Finn
\n```\n\n\n---\n\n\n### Render JSX / Preact / Whatever via Express!\n\n```js\nimport express from 'express';\nimport { h } from 'preact';\nimport render from 'preact-render-to-string';\n/** @jsx h */\n\n// silly example component:\nconst Fox = ({ name }) => (\n\t
\n\t\t
{ name }
\n\t\t
This page is all about {name}.
\n\t
\n);\n\n// basic HTTP server via express:\nconst app = express();\napp.listen(8080);\n\n// on each request, render and return a component:\napp.get('/:fox', (req, res) => {\n\tlet html = render();\n\t// send it back wrapped up as an HTML5 document:\n\tres.send(`${html}`);\n});\n```\n\n\n---\n\n\n### License\n\n[MIT]\n\n\n[Preact]: https://github.com/developit/preact\n[MIT]: http://choosealicense.com/licenses/mit/\n","readmeFilename":"README.md","gitHead":"6c7203668000201c88edc3e35635a9ba4c3d4c7c","_id":"preact-render-to-string@5.0.2","_npmVersion":"6.4.1","_nodeVersion":"9.11.1","_npmUser":{"name":"marvinhagemeister","email":"marvin@marvinhagemeister.de"},"dist":{"integrity":"sha512-2RFtynyc8O+JA1Rlt7cPAnBKpQCr2M3R9BUXcHFsG0o6+BUTf3HRtbiV/XdEBaFapOEk+OlCnfvDw1L00G/Lmw==","shasum":"f5220ac276f6b14737d735dddbe45947dc801241","tarball":"http://localhost:4545/npm/registry/preact-render-to-string/preact-render-to-string-5.0.2.tgz","fileCount":19,"unpackedSize":137401,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcmRI9CRA9TVsSAnZWagAA/bEP/ijs8i9tgkh5b+9mC4k1\nTsEn2Tjg3LqnMTavdPTxjL0gaFHEN247h3VmvC0vRyTGJJMsz7egiNH7GLoy\nPjRoSYcVXFzrIRZRRPr+K8fGcLVkbxcCZ5yjhadQ+SOrprRRZC4DjDLJIUqw\ncrhgNitW66a1SnAn5NzfakswZoM7BSg6fHuAVlAdoYSXWwgcXclE+QNvspDD\nr3DK0gtMkb2d5Kk6RJv4gZLuNg97dH5jpXbrnueMLGnsjjezFFnyy3b31p0W\nIVO7XO6PWdrQHDyiQr8l9UkAqhoqOpSeQH1UZboFYcrMdgK0MsmUj4rG2mqI\nf/w1Z6qMRFlO4IUTBP4cYaDGkVS0bbXG5rdnsoG37WfQ2Le8mc/UvoCcODul\n+sWBPaIT0ltGP1cs469UNDqCJ0jyr/ELY2qYtkmsAUJ2qQuuJEpfw8I/W0kf\nayXIF73L6m6go9BgpvWWCusyxv1hLzumDrHWuG8xZ/ds09VXzyn8Vm4uUd6a\nVh91C6IEkXwTRc0DrcH7qfQSNhO0D7nMIFKsJ+CM8fUyB0uUj+4/V86J3pvK\nbsyEImc/V9ROeWYvbSlMOtK/yGg5xmRYlaw6zVFXTSMdMwqEorwJGJvpCbZs\nh8um0zILidzkkm00yVC7ggOo7asVjOLosZGuQgExQRJu8dfDYIs6V/ZtMpT7\nO4vD\r\n=5ZfW\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDx0cJ355XdvFTEj63ycViUDmVVtOWeMju/48gN7arHhwIgCVlI6ZD06rKI/SxRpwbkmk8QnxyvRctwx2HWQ+a2DNU="}]},"maintainers":[{"email":"jason@developit.ca","name":"developit"},{"email":"ulliftw@gmail.com","name":"harmony"},{"email":"luke@lukeed.com","name":"lukeed"},{"email":"marvin@marvinhagemeister.de","name":"marvinhagemeister"},{"email":"prateek89born@gmail.com","name":"prateekbh"},{"email":"hello@preactjs.com","name":"preactjs"},{"email":"allamsetty.anup@gmail.com","name":"reznord"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/preact-render-to-string_5.0.2_1553535549150_0.8072331648733109"},"_hasShrinkwrap":false},"5.0.3":{"name":"preact-render-to-string","amdName":"preactRenderToString","version":"5.0.3","description":"Render JSX to an HTML string, with support for Preact components.","main":"dist/index.js","umd:main":"dist/index.js","module":"dist/index.module.js","jsnext:main":"dist/index.module.js","scripts":{"build":"npm run -s transpile && npm run -s transpile:jsx && npm run -s copy-typescript-definition","transpile":"echo 'export const ENABLE_PRETTY = false;'>env.js && microbundle src/index.js -f es,umd --target web --external preact","transpile:jsx":"echo 'export const ENABLE_PRETTY = true;'>env.js && microbundle src/jsx.js -o dist/jsx.js --target web --external none && microbundle dist/jsx.js -o dist/jsx.js -f cjs","copy-typescript-definition":"copyfiles -f src/index.d.ts dist","test":"eslint src test && mocha --compilers js:babel-register test/**/*.js","prepublish":"npm run build","release":"npm run build && git commit -am $npm_package_version && git tag $npm_package_version && git push && git push --tags && npm publish"},"keywords":["preact","render","universal","isomorphic"],"eslintConfig":{"extends":"developit","rules":{"react/prefer-stateless-function":0,"react/jsx-no-bind":0,"react/no-danger":0,"jest/valid-expect":0,"new-cap":0}},"babel":{"presets":["env"],"plugins":[["transform-react-jsx",{"pragma":"h"}],"transform-object-rest-spread"]},"author":{"name":"Jason Miller","email":"jason@developit.ca"},"license":"MIT","typings":"src/index.d.ts","repository":{"type":"git","url":"git+https://github.com/developit/preact-render-to-string.git"},"bugs":{"url":"https://github.com/developit/preact-render-to-string/issues"},"homepage":"https://github.com/developit/preact-render-to-string","peerDependencies":{"preact":">=10 || ^10.0.0-alpha.0 || ^10.0.0-beta.0"},"devDependencies":{"babel-plugin-transform-object-rest-spread":"^6.26.0","babel-plugin-transform-react-jsx":"^6.24.1","babel-preset-env":"^1.7.0","babel-register":"^6.26.0","chai":"^3.5.0","copyfiles":"^1.2.0","eslint":"^4.19.1","eslint-config-developit":"^1.1.1","microbundle":"^0.6.0","mocha":"^5.2.0","preact":"^10.0.0-alpha.0","sinon":"^1.17.5","sinon-chai":"^2.8.0"},"dependencies":{"pretty-format":"^3.8.0"},"readme":"# preact-render-to-string\n\n[![NPM](http://img.shields.io/npm/v/preact-render-to-string.svg)](https://www.npmjs.com/package/preact-render-to-string)\n[![travis-ci](https://travis-ci.org/developit/preact-render-to-string.svg)](https://travis-ci.org/developit/preact-render-to-string)\n\nRender JSX and [Preact] components to an HTML string.\n\nWorks in Node & the browser, making it useful for universal/isomorphic rendering.\n\n\\>\\> **[Cute Fox-Related Demo](http://codepen.io/developit/pen/dYZqjE?editors=001)** _(@ CodePen)_ <<\n\n\n---\n\n\n### Render JSX/VDOM to HTML\n\n```js\nimport render from 'preact-render-to-string';\nimport { h } from 'preact';\n/** @jsx h */\n\nlet vdom =
content
;\n\nlet html = render(vdom);\nconsole.log(html);\n//
content
\n```\n\n\n### Render Preact Components to HTML\n\n```js\nimport render from 'preact-render-to-string';\nimport { h, Component } from 'preact';\n/** @jsx h */\n\n// Classical components work\nclass Fox extends Component {\n\trender({ name }) {\n\t\treturn { name };\n\t}\n}\n\n// ... and so do pure functional components:\nconst Box = ({ type, children }) => (\n\t
{ children }
\n);\n\nlet html = render(\n\t\n\t\t\n\t\n);\n\nconsole.log(html);\n//
Finn
\n```\n\n\n---\n\n\n### Render JSX / Preact / Whatever via Express!\n\n```js\nimport express from 'express';\nimport { h } from 'preact';\nimport render from 'preact-render-to-string';\n/** @jsx h */\n\n// silly example component:\nconst Fox = ({ name }) => (\n\t
\n\t\t
{ name }
\n\t\t
This page is all about {name}.
\n\t
\n);\n\n// basic HTTP server via express:\nconst app = express();\napp.listen(8080);\n\n// on each request, render and return a component:\napp.get('/:fox', (req, res) => {\n\tlet html = render();\n\t// send it back wrapped up as an HTML5 document:\n\tres.send(`${html}`);\n});\n```\n\n\n---\n\n\n### License\n\n[MIT]\n\n\n[Preact]: https://github.com/developit/preact\n[MIT]: http://choosealicense.com/licenses/mit/\n","readmeFilename":"README.md","gitHead":"a102ba821f1075c67bbd12f43dc0fb19e9524040","_id":"preact-render-to-string@5.0.3","_npmVersion":"6.5.0","_nodeVersion":"11.7.0","_npmUser":{"name":"marvinhagemeister","email":"marvin@marvinhagemeister.de"},"dist":{"integrity":"sha512-FuaMTQXsn/RSQN0JphOpoqeSKEmHm83yLeZUioosgZkzdAyrAFDiAFy4cWUhjmaT371eEwpFZWcwiUHL4oLEUA==","shasum":"393f73826ad21097982e7ca1a4a03e256bd20422","tarball":"http://localhost:4545/npm/registry/preact-render-to-string/preact-render-to-string-5.0.3.tgz","fileCount":19,"unpackedSize":142219,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc0bl6CRA9TVsSAnZWagAAQkgP/1ze2rBWsownmQK17Q0P\nSQAssbZ4oPHnbwVMON7LEFDvCMYq8PeP/Fz5p9L9urdPWqxe/ZHKJOiUt8Ld\nEihpfUGtU1qQaGMgh1DMG7oDou1NyZ3bvwSITJ2BTuYygOSNNGawFK4hdbBh\nLxgHnaBrAxLJm4VXfONybpe96eZlcBNkg+1aWtbo1ydxpZZyprgaUA0zsOB6\ngko/7Hyg8qimcH6b1k/58/Sc0S51gxYw9+ey8yKwzJ6NSB6Qi7Q0l7pUagU5\nRbophRc+tAbgLXRT3b8rRFXeDUp7BXp4i/7CejKarHs4rghvlVYKIFr2+WFt\njyGQag8h2SHHmonLBzzYQZTAvCJGckDowZmU3IiSlBTh1K9cdPH4+yAYTYlU\noXhPoKxpmIvizSF0ejWEyRyBQ/tDCF3AM9bil3c8Ezmjs3QTUDz6icQkp4aM\nAOguyr7Z25RwuNHtZDrNp2KFEbeLc8jdmccZaSR8VzjL/fO+VPlNK8AwIIup\nfFMcIAbl/gL7qW+EB6xIkK26CnunHfvbgDtvlakjRAXR0J/3ZCkklsz4RGDk\nDPDPgS/cwfCpjH+pqF3vGhRgTljBI0lHrdbu7DFT9ox9QOkEu/bgGaWq0dgn\n6YV7XuIc8bFrFFktQp2wG+KPol13yFVnMud9IWku7QLBKtl3nFD5IPVtraiI\nMpPV\r\n=JQ8z\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHSR4oOzwL652jYPPdfV3rWosYTkBT4j92nqt8/vfZsxAiEAkbi7dtjyLXmH+vVUvmEmtGA9KWskXZtZ2hIZlngRcls="}]},"maintainers":[{"email":"jason@developit.ca","name":"developit"},{"email":"ulliftw@gmail.com","name":"harmony"},{"email":"luke@lukeed.com","name":"lukeed"},{"email":"marvin@marvinhagemeister.de","name":"marvinhagemeister"},{"email":"prateek89born@gmail.com","name":"prateekbh"},{"email":"hello@preactjs.com","name":"preactjs"},{"email":"allamsetty.anup@gmail.com","name":"reznord"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/preact-render-to-string_5.0.3_1557248377383_0.49374485369195087"},"_hasShrinkwrap":false},"5.0.4":{"name":"preact-render-to-string","amdName":"preactRenderToString","version":"5.0.4","description":"Render JSX to an HTML string, with support for Preact components.","main":"dist/index.js","umd:main":"dist/index.js","module":"dist/index.module.js","jsnext:main":"dist/index.module.js","scripts":{"build":"npm run -s transpile && npm run -s transpile:jsx && npm run -s copy-typescript-definition","transpile":"echo 'export const ENABLE_PRETTY = false;'>env.js && microbundle src/index.js -f es,umd --target web --external preact","transpile:jsx":"echo 'export const ENABLE_PRETTY = true;'>env.js && microbundle src/jsx.js -o dist/jsx.js --target web --external none && microbundle dist/jsx.js -o dist/jsx.js -f cjs","copy-typescript-definition":"copyfiles -f src/index.d.ts dist","test":"eslint src test && mocha --compilers js:babel-register test/**/*.js","prepublish":"npm run build","release":"npm run build && git commit -am $npm_package_version && git tag $npm_package_version && git push && git push --tags && npm publish"},"keywords":["preact","render","universal","isomorphic"],"eslintConfig":{"extends":"developit","rules":{"react/prefer-stateless-function":0,"react/jsx-no-bind":0,"react/no-danger":0,"jest/valid-expect":0,"new-cap":0}},"babel":{"presets":["env"],"plugins":[["transform-react-jsx",{"pragma":"h"}],"transform-object-rest-spread"]},"author":{"name":"Jason Miller","email":"jason@developit.ca"},"license":"MIT","typings":"src/index.d.ts","repository":{"type":"git","url":"git+https://github.com/developit/preact-render-to-string.git"},"bugs":{"url":"https://github.com/developit/preact-render-to-string/issues"},"homepage":"https://github.com/developit/preact-render-to-string","peerDependencies":{"preact":">=10 || ^10.0.0-alpha.0 || ^10.0.0-beta.0"},"devDependencies":{"babel-plugin-transform-object-rest-spread":"^6.26.0","babel-plugin-transform-react-jsx":"^6.24.1","babel-preset-env":"^1.7.0","babel-register":"^6.26.0","chai":"^3.5.0","copyfiles":"^1.2.0","eslint":"^4.19.1","eslint-config-developit":"^1.1.1","microbundle":"^0.6.0","mocha":"^5.2.0","preact":"^10.0.0-alpha.0","sinon":"^1.17.5","sinon-chai":"^2.8.0"},"dependencies":{"pretty-format":"^3.8.0"},"readme":"# preact-render-to-string\n\n[![NPM](http://img.shields.io/npm/v/preact-render-to-string.svg)](https://www.npmjs.com/package/preact-render-to-string)\n[![travis-ci](https://travis-ci.org/developit/preact-render-to-string.svg)](https://travis-ci.org/developit/preact-render-to-string)\n\nRender JSX and [Preact] components to an HTML string.\n\nWorks in Node & the browser, making it useful for universal/isomorphic rendering.\n\n\\>\\> **[Cute Fox-Related Demo](http://codepen.io/developit/pen/dYZqjE?editors=001)** _(@ CodePen)_ <<\n\n\n---\n\n\n### Render JSX/VDOM to HTML\n\n```js\nimport render from 'preact-render-to-string';\nimport { h } from 'preact';\n/** @jsx h */\n\nlet vdom =
content
;\n\nlet html = render(vdom);\nconsole.log(html);\n//
content
\n```\n\n\n### Render Preact Components to HTML\n\n```js\nimport render from 'preact-render-to-string';\nimport { h, Component } from 'preact';\n/** @jsx h */\n\n// Classical components work\nclass Fox extends Component {\n\trender({ name }) {\n\t\treturn { name };\n\t}\n}\n\n// ... and so do pure functional components:\nconst Box = ({ type, children }) => (\n\t
{ children }
\n);\n\nlet html = render(\n\t\n\t\t\n\t\n);\n\nconsole.log(html);\n//
Finn
\n```\n\n\n---\n\n\n### Render JSX / Preact / Whatever via Express!\n\n```js\nimport express from 'express';\nimport { h } from 'preact';\nimport render from 'preact-render-to-string';\n/** @jsx h */\n\n// silly example component:\nconst Fox = ({ name }) => (\n\t
\n\t\t
{ name }
\n\t\t
This page is all about {name}.
\n\t
\n);\n\n// basic HTTP server via express:\nconst app = express();\napp.listen(8080);\n\n// on each request, render and return a component:\napp.get('/:fox', (req, res) => {\n\tlet html = render();\n\t// send it back wrapped up as an HTML5 document:\n\tres.send(`${html}`);\n});\n```\n\n\n---\n\n\n### License\n\n[MIT]\n\n\n[Preact]: https://github.com/developit/preact\n[MIT]: http://choosealicense.com/licenses/mit/\n","readmeFilename":"README.md","gitHead":"0b239cf6be73dfe9e074389a7b5050037c007a5e","_id":"preact-render-to-string@5.0.4","_nodeVersion":"11.15.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-5gnEDbDn0u/rK8w5/zaRc2lGRlOfPSlV6YVnhKGTTQGpHRQoRTf8tov0cs+AUX11TE37TF/izovIGnQSbkhQNA==","shasum":"200f8ba3e4e4b934cc3cd3d15cd8bda2dc74fef8","tarball":"http://localhost:4545/npm/registry/preact-render-to-string/preact-render-to-string-5.0.4.tgz","fileCount":19,"unpackedSize":147196,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdDb/vCRA9TVsSAnZWagAATQIQAJr4maR6ROZYHMWlsxKY\nlu/juvOL3IGjtmlukDOHGUwEZT3KaPrwBP0KyNpDX3xw9q3d9WXfkEMNzCYX\ns3ceaQ4j8ZhT4V7r4zEEO0/V1zKLdLSFInX1vUwNd5V0wksjtriE8kqTCN90\nhgJ1Cl0p3tL5suXFKb1/RuMrSS3Q7PDE4S4OEVGk6+N/IdUl8RMbetrMoUXp\ndKDdYMexHSMJxwiCCymBUx1eAf78+CDreeS+XBunxD2SEcfXH+g/enh+sUF5\n8gkoGnYSoRhAL1xZdngCSX0rPbxXVPtvMVGHCBq05oBxFikQHIa87pI9RgxB\nmea2GTyXm45PfO2fS2t3mpqdzQXV6Kg0dQkoQZ9RdffIf9vbS3HDr1Jrltkk\nNpPDOsS40laNtQE0dDOyZb5D/D9qJCLYkMwEbgUf1kd02i4f1pqhoMAUXkTH\nSKYQYqwe4LTOn6PP0DX2ZpT4gXFu1WknpXs1At6E5Q232NAOZr9tb6Aw/ksK\n6lKlf3dsLlH8hLZ9G9w4kaPLLJG1i3tdMsGrhXQ1E5ftwCI3telRENX3KfUu\nwqM7Aytbv221KreOktMNHYcbBQ4X+a8gFFWYzqlatmCu6AVh/fn8MNXUTLDv\nHCBZqYDfTbVX9atPMu3w7hhJsfrZt1rOhpU53B1AhuI7mZ7M+tCUTmzUofOm\nx6kM\r\n=Rsj/\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIB+pD1eh35jl+ovJ1/gKZ1faj/PYM53IUCf1vm5ZKr98AiASPn8bgsAgOq/Kr+ZSYBfK2ewfE6k7bbhfYsdFCRX3lA=="}]},"maintainers":[{"email":"jason@developit.ca","name":"developit"},{"email":"ulliftw@gmail.com","name":"harmony"},{"email":"luke@lukeed.com","name":"lukeed"},{"email":"marvin@marvinhagemeister.de","name":"marvinhagemeister"},{"email":"prateek89born@gmail.com","name":"prateekbh"},{"email":"hello@preactjs.com","name":"preactjs"},{"email":"allamsetty.anup@gmail.com","name":"reznord"}],"_npmUser":{"name":"marvinhagemeister","email":"marvin@marvinhagemeister.de"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/preact-render-to-string_5.0.4_1561182190631_0.5584006988291674"},"_hasShrinkwrap":false},"5.0.5":{"name":"preact-render-to-string","amdName":"preactRenderToString","version":"5.0.5","description":"Render JSX to an HTML string, with support for Preact components.","main":"dist/index.js","umd:main":"dist/index.js","module":"dist/index.module.js","jsnext:main":"dist/index.module.js","scripts":{"build":"npm run -s transpile && npm run -s transpile:jsx && npm run -s copy-typescript-definition","transpile":"microbundle src/index.js -f es,umd --target web --external preact","transpile:jsx":"microbundle src/jsx.js -o dist/jsx.js --target web --external none && microbundle dist/jsx.js -o dist/jsx.js -f cjs","copy-typescript-definition":"copyfiles -f src/index.d.ts dist","test":"eslint src test && tsc && mocha --compilers js:babel-register test/**/*.js","prepublish":"npm run build","release":"npm run build && git commit -am $npm_package_version && git tag $npm_package_version && git push && git push --tags && npm publish"},"keywords":["preact","render","universal","isomorphic"],"eslintConfig":{"extends":"developit","rules":{"react/prefer-stateless-function":0,"react/jsx-no-bind":0,"react/no-danger":0,"jest/valid-expect":0,"new-cap":0}},"babel":{"presets":["env"],"plugins":[["transform-react-jsx",{"pragma":"h"}],"transform-object-rest-spread"]},"author":{"name":"Jason Miller","email":"jason@developit.ca"},"license":"MIT","typings":"src/index.d.ts","repository":{"type":"git","url":"git+https://github.com/developit/preact-render-to-string.git"},"bugs":{"url":"https://github.com/developit/preact-render-to-string/issues"},"homepage":"https://github.com/developit/preact-render-to-string","peerDependencies":{"preact":">=10 || ^10.0.0-alpha.0 || ^10.0.0-beta.0"},"devDependencies":{"babel-plugin-transform-object-rest-spread":"^6.26.0","babel-plugin-transform-react-jsx":"^6.24.1","babel-preset-env":"^1.7.0","babel-register":"^6.26.0","chai":"^3.5.0","copyfiles":"^1.2.0","eslint":"^4.19.1","eslint-config-developit":"^1.1.1","microbundle":"^0.6.0","mocha":"^5.2.0","preact":"^10.0.0-alpha.0","sinon":"^1.17.5","sinon-chai":"^2.8.0","typescript":"^3.4.1"},"dependencies":{"pretty-format":"^3.8.0"},"readme":"# preact-render-to-string\n\n[![NPM](http://img.shields.io/npm/v/preact-render-to-string.svg)](https://www.npmjs.com/package/preact-render-to-string)\n[![travis-ci](https://travis-ci.org/developit/preact-render-to-string.svg)](https://travis-ci.org/developit/preact-render-to-string)\n\nRender JSX and [Preact] components to an HTML string.\n\nWorks in Node & the browser, making it useful for universal/isomorphic rendering.\n\n\\>\\> **[Cute Fox-Related Demo](http://codepen.io/developit/pen/dYZqjE?editors=001)** _(@ CodePen)_ <<\n\n\n---\n\n\n### Render JSX/VDOM to HTML\n\n```js\nimport render from 'preact-render-to-string';\nimport { h } from 'preact';\n/** @jsx h */\n\nlet vdom =
content
;\n\nlet html = render(vdom);\nconsole.log(html);\n//
content
\n```\n\n\n### Render Preact Components to HTML\n\n```js\nimport render from 'preact-render-to-string';\nimport { h, Component } from 'preact';\n/** @jsx h */\n\n// Classical components work\nclass Fox extends Component {\n\trender({ name }) {\n\t\treturn { name };\n\t}\n}\n\n// ... and so do pure functional components:\nconst Box = ({ type, children }) => (\n\t
{ children }
\n);\n\nlet html = render(\n\t\n\t\t\n\t\n);\n\nconsole.log(html);\n//
Finn
\n```\n\n\n---\n\n\n### Render JSX / Preact / Whatever via Express!\n\n```js\nimport express from 'express';\nimport { h } from 'preact';\nimport render from 'preact-render-to-string';\n/** @jsx h */\n\n// silly example component:\nconst Fox = ({ name }) => (\n\t
\n\t\t
{ name }
\n\t\t
This page is all about {name}.
\n\t
\n);\n\n// basic HTTP server via express:\nconst app = express();\napp.listen(8080);\n\n// on each request, render and return a component:\napp.get('/:fox', (req, res) => {\n\tlet html = render();\n\t// send it back wrapped up as an HTML5 document:\n\tres.send(`${html}`);\n});\n```\n\n\n---\n\n\n### License\n\n[MIT]\n\n\n[Preact]: https://github.com/developit/preact\n[MIT]: http://choosealicense.com/licenses/mit/\n","readmeFilename":"README.md","gitHead":"b39103a6c154952ff5c868567e26e366367fec29","_id":"preact-render-to-string@5.0.5","_nodeVersion":"11.15.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-nvE/iV0oF1DMdG+FbedyXGAGrrzYYYWJeUWnz0d6EAARnBzsdEI35EnRwvTb2WInycLLs6O4NrDRhXvYbaUp9g==","shasum":"ad12af2e7a26e21ad843fd86ef948bfcea4d1429","tarball":"http://localhost:4545/npm/registry/preact-render-to-string/preact-render-to-string-5.0.5.tgz","fileCount":19,"unpackedSize":149359,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdJ6P4CRA9TVsSAnZWagAAqKgP/30GfO4QNhlxLdSSy75n\nFwyq8a4ANZOuznn1DaED1viQgLMXnHCAttAneiGK9OjEOqTYIObEmVfYxUaF\ne8escBE6mEp8l/6jTc/Zz0JknvUVo4tFplcwDHbCw+zTbde7I03r0J+2wx5N\n0IHeMtzZ8YLBSuN9UehOoyoor7atuERdBO5aD2FZKocL5H3eUD5YNY677VYG\nPMOWSqlEtuhnq+mOm5ptt88tbNRb40WqRp8KuFj1nBzByFxPc30lfLrnVU2o\nrLbKG0JloK/oBo4XBAgSJLIL0CljBU9+xMlUDbYp2d4colUdNPriEuzF03C2\nlP++8/pSQl5+db4/3+2AYcdaEtdQ6UGhWUyXP8Oahng+9JjahjqFSNw5r5b8\nkIz4igjilYyGlLDQxfhqbZeL7KQvFXaHGIrhhVAxc9cyq/i98RBhMTQVd6Ms\nxKUOVeoJu8eKVF9NcZN2GLfs+6GqaWEik75YOzdhXki8HvoUzhFYdavCkFkc\n0fd8aT0nwnD/tpdWQ6aybaciYmtziglprQlDH2LEl1No/vMh66Mg1mMSGupQ\nBM2CnBe6dCsgOMfrYgEGzMqz/3/5Z63nCZP2zKCS2oZPrwbioiR6HxBU4AcE\nkCfrlUqw7scVzgplsXthk+4VlI6BjRS18fLEROEZRgkG3lyNk1HutoOhDa6S\nCT7m\r\n=m87g\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDxgbXq/BnTzVFYXNK7K2AbASWNkdD7/51HTotvBsxlrgIhAPrM1zVfGk+GxdBtwMi7E9kcwmrOSout83emTAsMJ9bg"}]},"maintainers":[{"email":"jason@developit.ca","name":"developit"},{"email":"ulliftw@gmail.com","name":"harmony"},{"email":"luke@lukeed.com","name":"lukeed"},{"email":"marvin@marvinhagemeister.de","name":"marvinhagemeister"},{"email":"prateek89born@gmail.com","name":"prateekbh"},{"email":"hello@preactjs.com","name":"preactjs"},{"email":"allamsetty.anup@gmail.com","name":"reznord"}],"_npmUser":{"name":"marvinhagemeister","email":"marvin@marvinhagemeister.de"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/preact-render-to-string_5.0.5_1562878968071_0.20188964743500004"},"_hasShrinkwrap":false},"5.0.6":{"name":"preact-render-to-string","amdName":"preactRenderToString","version":"5.0.6","description":"Render JSX to an HTML string, with support for Preact components.","main":"dist/index.js","umd:main":"dist/index.js","module":"dist/index.module.js","jsnext:main":"dist/index.module.js","scripts":{"build":"npm run -s transpile && npm run -s transpile:jsx && npm run -s copy-typescript-definition","transpile":"microbundle src/index.js -f es,umd --target web --external preact","transpile:jsx":"microbundle src/jsx.js -o dist/jsx.js --target web --external none && microbundle dist/jsx.js -o dist/jsx.js -f cjs","copy-typescript-definition":"copyfiles -f src/index.d.ts dist","test":"eslint src test && tsc && mocha -r babel-core/register test/**/*.js","prepublish":"npm run build","release":"npm run build && git commit -am $npm_package_version && git tag $npm_package_version && git push && git push --tags && npm publish"},"keywords":["preact","render","universal","isomorphic"],"eslintConfig":{"extends":"developit","rules":{"react/prefer-stateless-function":0,"react/jsx-no-bind":0,"react/no-danger":0,"jest/valid-expect":0,"new-cap":0},"settings":{"react":{"version":"16.8"}}},"babel":{"presets":["env"],"plugins":[["transform-react-jsx",{"pragma":"h"}],"transform-object-rest-spread"]},"author":{"name":"Jason Miller","email":"jason@developit.ca"},"license":"MIT","typings":"src/index.d.ts","repository":{"type":"git","url":"git+https://github.com/developit/preact-render-to-string.git"},"bugs":{"url":"https://github.com/developit/preact-render-to-string/issues"},"homepage":"https://github.com/developit/preact-render-to-string","peerDependencies":{"preact":">=10 || ^10.0.0-alpha.0 || ^10.0.0-beta.0"},"devDependencies":{"babel-plugin-transform-object-rest-spread":"^6.26.0","babel-plugin-transform-react-jsx":"^6.24.1","babel-preset-env":"^1.7.0","babel-register":"^6.26.0","chai":"^3.5.0","copyfiles":"^1.2.0","eslint":"^4.19.1","eslint-config-developit":"^1.1.1","microbundle":"^0.6.0","mocha":"^5.2.0","preact":"^10.0.0-alpha.0","sinon":"^1.17.5","sinon-chai":"^2.8.0","typescript":"^3.4.1"},"dependencies":{"pretty-format":"^3.8.0"},"readme":"# preact-render-to-string\n\n[![NPM](http://img.shields.io/npm/v/preact-render-to-string.svg)](https://www.npmjs.com/package/preact-render-to-string)\n[![travis-ci](https://travis-ci.org/developit/preact-render-to-string.svg)](https://travis-ci.org/developit/preact-render-to-string)\n\nRender JSX and [Preact] components to an HTML string.\n\nWorks in Node & the browser, making it useful for universal/isomorphic rendering.\n\n\\>\\> **[Cute Fox-Related Demo](http://codepen.io/developit/pen/dYZqjE?editors=001)** _(@ CodePen)_ <<\n\n\n---\n\n\n### Render JSX/VDOM to HTML\n\n```js\nimport render from 'preact-render-to-string';\nimport { h } from 'preact';\n/** @jsx h */\n\nlet vdom =
content
;\n\nlet html = render(vdom);\nconsole.log(html);\n//
content
\n```\n\n\n### Render Preact Components to HTML\n\n```js\nimport render from 'preact-render-to-string';\nimport { h, Component } from 'preact';\n/** @jsx h */\n\n// Classical components work\nclass Fox extends Component {\n\trender({ name }) {\n\t\treturn { name };\n\t}\n}\n\n// ... and so do pure functional components:\nconst Box = ({ type, children }) => (\n\t
{ children }
\n);\n\nlet html = render(\n\t\n\t\t\n\t\n);\n\nconsole.log(html);\n//
Finn
\n```\n\n\n---\n\n\n### Render JSX / Preact / Whatever via Express!\n\n```js\nimport express from 'express';\nimport { h } from 'preact';\nimport render from 'preact-render-to-string';\n/** @jsx h */\n\n// silly example component:\nconst Fox = ({ name }) => (\n\t
\n\t\t
{ name }
\n\t\t
This page is all about {name}.
\n\t
\n);\n\n// basic HTTP server via express:\nconst app = express();\napp.listen(8080);\n\n// on each request, render and return a component:\napp.get('/:fox', (req, res) => {\n\tlet html = render();\n\t// send it back wrapped up as an HTML5 document:\n\tres.send(`${html}`);\n});\n```\n\n\n---\n\n\n### License\n\n[MIT]\n\n\n[Preact]: https://github.com/developit/preact\n[MIT]: http://choosealicense.com/licenses/mit/\n","readmeFilename":"README.md","gitHead":"64aa1c0c2dcac08e3eb8182304afa48713b48504","_id":"preact-render-to-string@5.0.6","_nodeVersion":"11.15.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-VOsbY/YNPJVIxEdzkUJNwhZNEOE5/w4lbEAsBvhsImbpeDsDhCtUvzpZav/j8tHF8HcG6lNWljmkmXfy+KEnsQ==","shasum":"3e89078f78e88157a044f91914b348894cd18d03","tarball":"http://localhost:4545/npm/registry/preact-render-to-string/preact-render-to-string-5.0.6.tgz","fileCount":19,"unpackedSize":152738,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdLIAnCRA9TVsSAnZWagAAkwwP/iJXuY+X4suP6HKqSTfc\np+ptvXph617TorOuCewnTCnp9HIRYEtdKAJedH608/kopx9BvPk5i7NM79Vo\n24Az3vN/azH7U86SB8o6MKaUC4e1qxIVTx3XUKbFfRYpfYrywsofa66azpCc\nC9boa3WcqT349uQtTSCBlkgJYF3Ll2KOdE41EiInKAaisGcP7X71KdnmVBuW\n+8xGEp9TxgMEs5PUzm+38ZDl0Zvht1IQ1e1Mhmc6IO4BXCZkkhRsTIVItOBj\n7ap2FKfYgSIGGYA8NmiZrP0zDdK+ZxG45ojak9rxfrSfQz5H9ZGCer+KURjA\nFm45v6Dhzwu9LvoYWOguUYJBnx68ypTt9INlepWmxgQszfTxgQ88Emc0JzXH\n6P4c8LtyE0rZFC9nsqFGDnkrNYcgjcb873OqryPj0i2xFToV+FTm6TQi8Z3m\ni6bZv/wuIWx7GNgasBGC9yJx/1VBBZSbGdeaFY66kDyet3godDb+5T/u99Md\nH0c/YdqlSOsbAtsZsG/u4hh74HdXxbKtQDXtojGlWcRgYB5JoUbat3rbQpKL\n+LEUj9HestfPAczrgverBFNnL19qdQQBo9lDIRAr9aiuknPpSAGTEJMRJSM0\nKngXYLtweA3QbMlxZmLqt2n5GxFfA6WyjitaxVXtG0JqKrkNBMlkF6eUhrm7\nm4kP\r\n=erod\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHkocUdgNamBvPSjF2EtjP1V/ySSS3VKebFzemlW7dfiAiB8xu0yMDu968lEM3b4YUOEIWhZb9tHAz7dzRqzlvoERQ=="}]},"maintainers":[{"email":"jason@developit.ca","name":"developit"},{"email":"ulliftw@gmail.com","name":"harmony"},{"email":"luke@lukeed.com","name":"lukeed"},{"email":"marvin@marvinhagemeister.de","name":"marvinhagemeister"},{"email":"prateek89born@gmail.com","name":"prateekbh"},{"email":"hello@preactjs.com","name":"preactjs"},{"email":"allamsetty.anup@gmail.com","name":"reznord"}],"_npmUser":{"name":"marvinhagemeister","email":"marvin@marvinhagemeister.de"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/preact-render-to-string_5.0.6_1563197478451_0.8157190655189528"},"_hasShrinkwrap":false},"5.0.7":{"name":"preact-render-to-string","amdName":"preactRenderToString","version":"5.0.7","description":"Render JSX to an HTML string, with support for Preact components.","main":"dist/index.js","umd:main":"dist/index.js","module":"dist/index.module.js","jsnext:main":"dist/index.module.js","scripts":{"build":"npm run -s transpile && npm run -s transpile:jsx && npm run -s copy-typescript-definition","transpile":"microbundle src/index.js -f es,umd --target web --external preact","transpile:jsx":"microbundle src/jsx.js -o dist/jsx.js --target web --external none && microbundle dist/jsx.js -o dist/jsx.js -f cjs","copy-typescript-definition":"copyfiles -f src/index.d.ts dist","test":"eslint src test && tsc && mocha -r babel-core/register test/**/*.js","prepublish":"npm run build","release":"npm run build && git commit -am $npm_package_version && git tag $npm_package_version && git push && git push --tags && npm publish"},"keywords":["preact","render","universal","isomorphic"],"eslintConfig":{"extends":"developit","rules":{"react/prefer-stateless-function":0,"react/jsx-no-bind":0,"react/no-danger":0,"jest/valid-expect":0,"new-cap":0},"settings":{"react":{"version":"16.8"}}},"babel":{"presets":["env"],"plugins":[["transform-react-jsx",{"pragma":"h"}],"transform-object-rest-spread"]},"author":{"name":"Jason Miller","email":"jason@developit.ca"},"license":"MIT","typings":"src/index.d.ts","repository":{"type":"git","url":"git+https://github.com/developit/preact-render-to-string.git"},"bugs":{"url":"https://github.com/developit/preact-render-to-string/issues"},"homepage":"https://github.com/developit/preact-render-to-string","peerDependencies":{"preact":">=10 || ^10.0.0-alpha.0 || ^10.0.0-beta.0"},"devDependencies":{"babel-plugin-transform-object-rest-spread":"^6.26.0","babel-plugin-transform-react-jsx":"^6.24.1","babel-preset-env":"^1.7.0","babel-register":"^6.26.0","chai":"^3.5.0","copyfiles":"^1.2.0","eslint":"^4.19.1","eslint-config-developit":"^1.1.1","microbundle":"^0.6.0","mocha":"^5.2.0","preact":"^10.0.0-alpha.0","sinon":"^1.17.5","sinon-chai":"^2.8.0","typescript":"^3.4.1"},"dependencies":{"pretty-format":"^3.8.0"},"gitHead":"4234f3413fb4b8973c810ae72c1751fed1ac433a","_id":"preact-render-to-string@5.0.7","_nodeVersion":"11.15.0","_npmVersion":"6.10.1","dist":{"integrity":"sha512-WJQJb6HisjGe2J+29Ha2/9OgEZjVsoYNUc11UyfQadDuREvyKCqR4ZY6KngthKgUT27B+tQrL45jI1B/BEeXXg==","shasum":"c7ea12ed4a323bc37bb42a4fa587494f8879eb09","tarball":"http://localhost:4545/npm/registry/preact-render-to-string/preact-render-to-string-5.0.7.tgz","fileCount":19,"unpackedSize":153578,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdo31/CRA9TVsSAnZWagAAMK4P/0Z0qOF49uc31+A8Nqcr\nfHnWooqS3BfxKRuB3OoQTH6bWcMCJe+7yRHfaXWY8FsmtLCAd+5GrMAtvHt9\nFIM+Sx+JJ7pYeAHNvJDCwabBKQ9oN3IMUhEtC+mWUMv2fqvImp/iR8ehh6L7\nZqOmnyi6dsWAQjPHSNihvFfe/IR2UaN4SRqFgSHqD40L8XJpB8mgOftShJV/\n9VDxnE48OI2pAZzVqJBfTSJqKpP6HPeDbQiufBUXRorrLg9u2rS4ineJ+Zlf\nl3UdEd6dnMShbuGZsgNbEJV8dJpyweNVd/CZkxvOcdXfsbhxFyxMTyvcpRr1\nHBvpNoczmq1a8qallpWHoXkQDmLMysGcnT1baypSXFlD7ddHQjdf19xbj85/\nJbPeZL+tX0qbu0RzxWVftrpoaUIYe+JVjTU3uYe2cQDhldDafP/RwLY5F+OQ\nFADTNwti4tNgQvREDjtQj+5uFb6VljXrrf/NsI163Eb5UJuIcVW5VyYI90Cj\nyPyakaqOC5Pi7oIuYmFeW+fx6rbT4/cMqlAZxQNOUi6f9tIGljlhsE+xcJxJ\nqVGVVbt0rpWKsbnYbqFvEF9gh8j7LQiwMjyNsTbgFAtOOr2WNqoPGq5FPq8P\nJn8mWJJRNCxyixy1OdM4PeYxuH+/xyUzPNB61TChBIefDYUXYY5RWOGHh5H6\nqc7/\r\n=PDN5\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICTPTgUhd99D3/7yU5kX8xe0MNvoj6vCLN/Z9hnEncOuAiBVIHMT1c733EuYogW16tT4iBZcyWLXK+60PcFF2cBRXw=="}]},"maintainers":[{"email":"jason@developit.ca","name":"developit"},{"email":"npm.leah@hrmny.sh","name":"harmony"},{"email":"luke@lukeed.com","name":"lukeed"},{"email":"marvin@marvinhagemeister.de","name":"marvinhagemeister"},{"email":"prateek89born@gmail.com","name":"prateekbh"},{"email":"hello@preactjs.com","name":"preactjs"},{"email":"allamsetty.anup@gmail.com","name":"reznord"},{"email":"solarliner@gmail.com","name":"solarliner"}],"_npmUser":{"name":"marvinhagemeister","email":"marvin@marvinhagemeister.de"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/preact-render-to-string_5.0.7_1570995582341_0.6939192963668352"},"_hasShrinkwrap":false},"5.1.0":{"name":"preact-render-to-string","amdName":"preactRenderToString","version":"5.1.0","description":"Render JSX to an HTML string, with support for Preact components.","main":"dist/index.js","umd:main":"dist/index.js","module":"dist/index.module.js","jsnext:main":"dist/index.module.js","scripts":{"build":"npm run -s transpile && npm run -s transpile:jsx && npm run -s copy-typescript-definition","transpile":"microbundle src/index.js -f es,umd --target web --external preact","transpile:jsx":"microbundle src/jsx.js -o dist/jsx.js --target web --external none && microbundle dist/jsx.js -o dist/jsx.js -f cjs","copy-typescript-definition":"copyfiles -f src/index.d.ts dist","test":"eslint src test && tsc && mocha -r babel-core/register test/**/*.js","prepublish":"npm run build","release":"npm run build && git commit -am $npm_package_version && git tag $npm_package_version && git push && git push --tags && npm publish"},"keywords":["preact","render","universal","isomorphic"],"eslintConfig":{"extends":"developit","rules":{"react/prefer-stateless-function":0,"react/jsx-no-bind":0,"react/no-danger":0,"jest/valid-expect":0,"new-cap":0},"settings":{"react":{"version":"16.8"}}},"babel":{"presets":["env"],"plugins":[["transform-react-jsx",{"pragma":"h"}],"transform-object-rest-spread"]},"author":{"name":"Jason Miller","email":"jason@developit.ca"},"license":"MIT","typings":"src/index.d.ts","repository":{"type":"git","url":"git+https://github.com/developit/preact-render-to-string.git"},"bugs":{"url":"https://github.com/developit/preact-render-to-string/issues"},"homepage":"https://github.com/developit/preact-render-to-string","peerDependencies":{"preact":">=10 || ^10.0.0-alpha.0 || ^10.0.0-beta.0"},"devDependencies":{"babel-plugin-transform-object-rest-spread":"^6.26.0","babel-plugin-transform-react-jsx":"^6.24.1","babel-preset-env":"^1.7.0","babel-register":"^6.26.0","chai":"^3.5.0","copyfiles":"^1.2.0","eslint":"^4.19.1","eslint-config-developit":"^1.1.1","microbundle":"^0.6.0","mocha":"^5.2.0","preact":"^10.0.0-alpha.0","sinon":"^1.17.5","sinon-chai":"^2.8.0","typescript":"^3.4.1"},"dependencies":{"pretty-format":"^3.8.0"},"gitHead":"23fb79bf9ff4d227d2e0c4a4b33a361e27222d8c","_id":"preact-render-to-string@5.1.0","_nodeVersion":"11.15.0","_npmVersion":"6.10.1","dist":{"integrity":"sha512-BrZeeppt4mLyI7fkO6P7pPBKVL9CjA/ckWMu3KlYOJilvqjAkvP2p9yF0YrEeMvsvpbWmJqpDbaEmkEoTtoJsA==","shasum":"e810575aa1a0981836c48458d72c84976f9b1f7e","tarball":"http://localhost:4545/npm/registry/preact-render-to-string/preact-render-to-string-5.1.0.tgz","fileCount":19,"unpackedSize":155318,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdrAqoCRA9TVsSAnZWagAAq5cP/3yo3lTtwqYShhs07LbJ\nqdjiI2s5XN+kP7wmgQcrr3zJE8JMggrOx2EfkWjgGOItkhS/0ap99aJ5i4eE\nnCOi9+rjnsNMsTCCpi0WXWCp1DlWhSHStpqsPdw38fU8EgXUZ6CtMWJ8dqyP\nAU172o+Z2VMhVSwFEeQaJA+mqmLROQT/l0Ld2G3Lhg5UM0S5phW4zpPi8sDO\nTZz/5GAz4yS5iVwNZqoAKLXjC/3aNViv4HmHuCLl+F7XrJjfLsX/V0uSFp82\nFuOfI4UtmWiQE/f+LT+q4Ovv/+J4KYx21gKfKACKx3D0z1z6g/AT5Wx37u8V\nHP6ZBI/Y2n/iNqZdkqxK2fxrELe+sU7pUEQyPH0M4qei6INnmDe9zLr9PQlQ\nMBU5F4D0tvA1EfcDiIF9mpeER8mW9ZtTO4LVKdSJWfFGzbOpZdJpTLloI6la\nASN9kdQKazkHdFM+tvplVaBuGccWgVTAavS2ircAQBBVuDsmygZoJoH8jIl1\n6nuWANlKJizexpHReztD5jr2exIUrM3kPQSyxFC3rzrWV6hBEsSxUfNEcIzp\nnIfRthP2M2YCDE4R7LuhIC1QOJ7UPytKTiLzG6297kxLVCYLI1reJTD785NH\nipFcT4RoFkCosUyszy4HufKtWv9OJiCs8hOwhWpsYFV9BFRHTe1l+ttr82ha\nN4BJ\r\n=nM+2\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDF8VJgik1vQabw/ro7/hPJXfqgCP0HHLdZyxaHboHVzgIgKSUq3OiKNjaNRR2oyT8XW+DHlJ9zovOFSTJ6XtvuQHA="}]},"maintainers":[{"email":"jason@developit.ca","name":"developit"},{"email":"npm.leah@hrmny.sh","name":"harmony"},{"email":"luke@lukeed.com","name":"lukeed"},{"email":"marvin@marvinhagemeister.de","name":"marvinhagemeister"},{"email":"prateek89born@gmail.com","name":"prateekbh"},{"email":"hello@preactjs.com","name":"preactjs"},{"email":"allamsetty.anup@gmail.com","name":"reznord"},{"email":"solarliner@gmail.com","name":"solarliner"}],"_npmUser":{"name":"marvinhagemeister","email":"marvin@marvinhagemeister.de"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/preact-render-to-string_5.1.0_1571556007903_0.5224837361839658"},"_hasShrinkwrap":false},"5.1.1":{"name":"preact-render-to-string","amdName":"preactRenderToString","version":"5.1.1","description":"Render JSX to an HTML string, with support for Preact components.","main":"dist/index.js","umd:main":"dist/index.js","module":"dist/index.module.js","jsnext:main":"dist/index.module.js","scripts":{"build":"npm run -s transpile && npm run -s transpile:jsx && npm run -s copy-typescript-definition","transpile":"microbundle src/index.js -f es,umd --target web --external preact","transpile:jsx":"microbundle src/jsx.js -o dist/jsx.js --target web --external none && microbundle dist/jsx.js -o dist/jsx.js -f cjs","copy-typescript-definition":"copyfiles -f src/index.d.ts dist","test":"eslint src test && tsc && mocha -r babel-core/register test/**/*.js","prepublish":"npm run build","release":"npm run build && git commit -am $npm_package_version && git tag $npm_package_version && git push && git push --tags && npm publish"},"keywords":["preact","render","universal","isomorphic"],"eslintConfig":{"extends":"developit","rules":{"react/prefer-stateless-function":0,"react/jsx-no-bind":0,"react/no-danger":0,"jest/valid-expect":0,"new-cap":0},"settings":{"react":{"version":"16.8"}}},"babel":{"presets":["env"],"plugins":[["transform-react-jsx",{"pragma":"h"}],"transform-object-rest-spread"]},"author":{"name":"Jason Miller","email":"jason@developit.ca"},"license":"MIT","typings":"src/index.d.ts","repository":{"type":"git","url":"git+https://github.com/developit/preact-render-to-string.git"},"bugs":{"url":"https://github.com/developit/preact-render-to-string/issues"},"homepage":"https://github.com/developit/preact-render-to-string","peerDependencies":{"preact":">=10 || ^10.0.0-alpha.0 || ^10.0.0-beta.0"},"devDependencies":{"babel-plugin-transform-object-rest-spread":"^6.26.0","babel-plugin-transform-react-jsx":"^6.24.1","babel-preset-env":"^1.7.0","babel-register":"^6.26.0","chai":"^3.5.0","copyfiles":"^1.2.0","eslint":"^4.19.1","eslint-config-developit":"^1.1.1","microbundle":"^0.6.0","mocha":"^5.2.0","preact":"^10.0.4","sinon":"^1.17.5","sinon-chai":"^2.8.0","typescript":"^3.4.1"},"dependencies":{"pretty-format":"^3.8.0"},"gitHead":"29482d4f09931285b736da1eede5995020d16917","_id":"preact-render-to-string@5.1.1","_nodeVersion":"11.15.0","_npmVersion":"6.10.1","dist":{"integrity":"sha512-/pmL9S7rgNnyfNPFIaf2eWJHf2Dc7kdbI5ALET2nq72KvHqjKh31M80XdEIFYUci/nq0p2QuVutnjq0Uv265bA==","shasum":"32f9eb16413a5c9fa6d9c43efe21d20697275101","tarball":"http://localhost:4545/npm/registry/preact-render-to-string/preact-render-to-string-5.1.1.tgz","fileCount":19,"unpackedSize":200542,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdvKudCRA9TVsSAnZWagAAC2MP/jcJReQb9CK7S13XvYMm\nTyBluWD6QZcAnfI4qpcKDdL8d2+jovUn7gFkT3sxT7TyyXUIzjkD6NWUVj0I\nBznV5U5cw3gTDv+6EKmGbHxS3L6P+DYQF7Xm9Nj3PqtzaAvml6kghynbduqh\nDVWP4eVhgbnszESH/qqmhzvjbDiEsIKjKLepva1y5mesIRy839jC5PcaxObP\n8rEgliVwQgEzR+1ZCHemHMeyGQGAM6Vqjj41/Ekc7Oy31RCEtn/zulgYsVpr\npG3/HSrAblLjzYY8gPM4S6zW+De28l2uSPlbdWbNgfOjxiCXJsvZkD6IqKV6\nspX2pFYoZvR79fwnnEMbSqeX6gkbD1WnO542cxvVsAEl+mODeb3+ABrfcF3G\nZ5HmLwK9LZMwcsgeskcHUw1zuZVI9I5KAWWGIcM0kX+vTUS6JcPvNcNNk5AQ\nK3kEx53aoEhrAIolGajJ1xRSNviqFODmCkCK4qIUJLibJo3IPxCRJK0mRzTB\nH09Zj1p2wxF8djpcDGcADozmMQfsVAUeiZC3cYbaAk3vzgFm4Xw+O8ub34gK\nY1SD7dzO+zi2GQXD6PGc7qz0UihvBh57W2qD5RSmHXl0+yLn9tkJZBAaqgcl\nAMQUeKCkqa0n4ouTwE3sOsob4+vqOi3nstiR5Q4i9VxGOKLBkiFmbW0I/3AD\n9MSB\r\n=CvGE\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC8puylpmIN7DNR8ay/8rh3DoLC3xioO241Wo1sKuqzQQIgftEysloP+goaJprcsiYsZVxBhm17qBpBjrPHfDlyFQk="}]},"maintainers":[{"email":"jason@developit.ca","name":"developit"},{"email":"npm.leah@hrmny.sh","name":"harmony"},{"email":"luke@lukeed.com","name":"lukeed"},{"email":"marvin@marvinhagemeister.de","name":"marvinhagemeister"},{"email":"prateek89born@gmail.com","name":"prateekbh"},{"email":"hello@preactjs.com","name":"preactjs"},{"email":"allamsetty.anup@gmail.com","name":"reznord"},{"email":"solarliner@gmail.com","name":"solarliner"}],"_npmUser":{"name":"marvinhagemeister","email":"marvin@marvinhagemeister.de"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/preact-render-to-string_5.1.1_1572645789435_0.2899000606186821"},"_hasShrinkwrap":false},"5.1.2":{"name":"preact-render-to-string","amdName":"preactRenderToString","version":"5.1.2","description":"Render JSX to an HTML string, with support for Preact components.","main":"dist/index.js","umd:main":"dist/index.js","module":"dist/index.module.js","jsnext:main":"dist/index.module.js","scripts":{"build":"npm run -s transpile && npm run -s transpile:jsx && npm run -s copy-typescript-definition","transpile":"microbundle src/index.js -f es,umd --target web --external preact","transpile:jsx":"microbundle src/jsx.js -o dist/jsx.js --target web --external none && microbundle dist/jsx.js -o dist/jsx.js -f cjs","copy-typescript-definition":"copyfiles -f src/index.d.ts dist","test":"eslint src test && tsc && mocha -r babel-core/register test/**/*.js","prepublish":"npm run build","release":"npm run build && git commit -am $npm_package_version && git tag $npm_package_version && git push && git push --tags && npm publish"},"keywords":["preact","render","universal","isomorphic"],"eslintConfig":{"extends":"developit","rules":{"react/prefer-stateless-function":0,"react/jsx-no-bind":0,"react/no-danger":0,"jest/valid-expect":0,"new-cap":0},"settings":{"react":{"version":"16.8"}}},"babel":{"presets":["env"],"plugins":[["transform-react-jsx",{"pragma":"h"}],"transform-object-rest-spread"]},"author":{"name":"Jason Miller","email":"jason@developit.ca"},"license":"MIT","typings":"src/index.d.ts","repository":{"type":"git","url":"git+https://github.com/developit/preact-render-to-string.git"},"bugs":{"url":"https://github.com/developit/preact-render-to-string/issues"},"homepage":"https://github.com/developit/preact-render-to-string","peerDependencies":{"preact":">=10 || ^10.0.0-alpha.0 || ^10.0.0-beta.0"},"devDependencies":{"babel-plugin-transform-object-rest-spread":"^6.26.0","babel-plugin-transform-react-jsx":"^6.24.1","babel-preset-env":"^1.7.0","babel-register":"^6.26.0","chai":"^3.5.0","copyfiles":"^1.2.0","eslint":"^4.19.1","eslint-config-developit":"^1.1.1","microbundle":"^0.6.0","mocha":"^5.2.0","preact":"^10.0.4","sinon":"^1.17.5","sinon-chai":"^2.8.0","typescript":"^3.4.1"},"dependencies":{"pretty-format":"^3.8.0"},"gitHead":"415a377d37a3cba033c1d3bc2f19467c4897a8bb","_id":"preact-render-to-string@5.1.2","_nodeVersion":"12.13.1","_npmVersion":"6.12.1","dist":{"integrity":"sha512-9nfjUMUM0NrxhHCBu2zSRDuSXPL/uebZocrNHsSM2vTDxM7p70PpzaQXsV2HCIn+W3X/3BmxJ9qdx8gvi4mByw==","shasum":"c7421fef79f2ecfef350daf68025a9854d103a91","tarball":"http://localhost:4545/npm/registry/preact-render-to-string/preact-render-to-string-5.1.2.tgz","fileCount":19,"unpackedSize":203479,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd6gYYCRA9TVsSAnZWagAAeiMP/R5ji8Gou5Qw2w1jW+hn\nleQ193DB8grfxy2h380HAANOvLHSpW8BqfLWVNyW0IzMx1qcjnAU3+u7h7nK\nYb+G2ubkWBDzDUm84iORywwpaRiYdmkwyplRqtLH6yUG5bhFOr3o83Mcjtlv\nsTEUo8AdhAD71I8OqiNaWEHu3sCxHmwtcd2XJHmbxseJzhoDSr7/xztJsiPl\n399W/5ohgzxeXRnYys4fYnY6HwLrgB3dGDgStHzUOCCve7L3uWo/a2tbzjc6\nDqh+13HQWijM0BCoVXG5GMvdt0s01o0vmuFiB3WR/1Vkl9ySM6r/OMo3a4iu\n6dJPup59ka3xBGYdwxr1yz7yfOslxu7U1yN8nstGoxKvMGkLSp9G06LKEK9F\nRlbPviZMw8qgeB1w69V+vAH81gXErKzo1xBC2Ijp0Q4wNI62yp0ak9O8qlH8\nOv4kiEs3DQ5dcfOeoTSCjLYXto/lvXas7Tru481amByvgTC07JL34+kZvtOS\nayWSzwmh6zX0wBZOwRFBTZYNaESuTu6NXDkEcJenUt5Af9tTL3mtXbCWjyeg\nE+EWJevbTPsmg0qNlru4qfl7J7Loc8h6gcrok++rwshWoxJbgnPIhepW958o\n+JpaEq49dCRp1C1KVbZ9eDS1mcBmevrT6Bz88VgO3I1lPOTouuxvGViS/Ke8\n5ZGf\r\n=/YeA\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGuU99rnMdo0Gwqk5h0Q4RmgitbLNunEZ55A+HXUzbxiAiAwdxZJIZ6qBfpWOaGchQqLythYv2gQlP/o9fHeL3aFeQ=="}]},"maintainers":[{"email":"jason@developit.ca","name":"developit"},{"email":"npm.leah@hrmny.sh","name":"harmony"},{"email":"luke@lukeed.com","name":"lukeed"},{"email":"marvin@marvinhagemeister.de","name":"marvinhagemeister"},{"email":"prateek89born@gmail.com","name":"prateekbh"},{"email":"hello@preactjs.com","name":"preactjs"},{"email":"allamsetty.anup@gmail.com","name":"reznord"},{"email":"solarliner@gmail.com","name":"solarliner"}],"_npmUser":{"name":"marvinhagemeister","email":"marvin@marvinhagemeister.de"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/preact-render-to-string_5.1.2_1575618071986_0.0293331472514049"},"_hasShrinkwrap":false},"5.1.3":{"name":"preact-render-to-string","amdName":"preactRenderToString","version":"5.1.3","description":"Render JSX to an HTML string, with support for Preact components.","main":"dist/index.js","umd:main":"dist/index.js","module":"dist/index.module.js","jsnext:main":"dist/index.module.js","scripts":{"build":"npm run -s transpile && npm run -s transpile:jsx && npm run -s copy-typescript-definition","transpile":"microbundle src/index.js -f es,umd --target web --external preact","transpile:jsx":"microbundle src/jsx.js -o dist/jsx.js --target web --external none && microbundle dist/jsx.js -o dist/jsx.js -f cjs","copy-typescript-definition":"copyfiles -f src/index.d.ts dist","test":"eslint src test && tsc && mocha -r babel-core/register test/**/*.js","prepublish":"npm run build","release":"npm run build && git commit -am $npm_package_version && git tag $npm_package_version && git push && git push --tags && npm publish"},"keywords":["preact","render","universal","isomorphic"],"eslintConfig":{"extends":"developit","rules":{"react/prefer-stateless-function":0,"react/jsx-no-bind":0,"react/no-danger":0,"jest/valid-expect":0,"new-cap":0},"settings":{"react":{"version":"16.8"}}},"babel":{"presets":["env"],"plugins":[["transform-react-jsx",{"pragma":"h"}],"transform-object-rest-spread"]},"author":{"name":"Jason Miller","email":"jason@developit.ca"},"license":"MIT","typings":"src/index.d.ts","repository":{"type":"git","url":"git+https://github.com/developit/preact-render-to-string.git"},"bugs":{"url":"https://github.com/developit/preact-render-to-string/issues"},"homepage":"https://github.com/developit/preact-render-to-string","peerDependencies":{"preact":">=10 || ^10.0.0-alpha.0 || ^10.0.0-beta.0"},"devDependencies":{"babel-plugin-transform-object-rest-spread":"^6.26.0","babel-plugin-transform-react-jsx":"^6.24.1","babel-preset-env":"^1.7.0","babel-register":"^6.26.0","chai":"^3.5.0","copyfiles":"^1.2.0","eslint":"^4.19.1","eslint-config-developit":"^1.1.1","microbundle":"^0.6.0","mocha":"^5.2.0","preact":"^10.0.4","sinon":"^1.17.5","sinon-chai":"^2.8.0","typescript":"^3.4.1"},"dependencies":{"pretty-format":"^3.8.0"},"gitHead":"d241cc9e7482e081bb4303d3652cb411ea3dc33d","_id":"preact-render-to-string@5.1.3","_nodeVersion":"11.15.0","_npmVersion":"6.13.4","dist":{"integrity":"sha512-fVCd/qidYNiVSvN4cP5TVwI5VklMdrHMvcz0Z5mvwrYSKCrX0azInroBrKc5x6N9VtqMViMkYWaYh54cO6psIA==","shasum":"b448570ad7c2f03d1b950c1614a05187afde40ee","tarball":"http://localhost:4545/npm/registry/preact-render-to-string/preact-render-to-string-5.1.3.tgz","fileCount":19,"unpackedSize":203826,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd+1BqCRA9TVsSAnZWagAAxTgQAJtjQj+NDvqzZJ9aG9iY\ncUVFefiaOc6VtEpaG2GT3KVA99/kLxr9y8wTq+vPY7sWi8caDr+LSQfdQ9kc\nuW9gWFrz21XDmyV3FkUx0vbAh8T04svDD3It7VUFeXU+mvlztHpIKYuUL6rh\ncFmPvLHDXHlibzdkt14zv896prgtmDGWj9dNQGRv70U6ejVNUya92gZS2BFa\nj4LqOv6QNCRqMqTgMxyRGbn6BNqkpuBE5/OzKRGWTTQF3Zw+kV/Cx5EES8MW\nxEDLQijTgHCrIQpQ3Aer+WYFCIS1CUrv+3MTaU4P6I8muEXBdnvvr1dEBYw1\nKjy+N1iP37hAfIgnU6wclceyq24bj/+S7KzVSCxKDVQg+QQ9mMgkrJL7MLhJ\nVV9SSqVHJXv0Kf6m7eTM942JMsHBpFdzm6YYNx2BYvNm+hxxDBs47/ap5GEP\ns0eiMdUA1LwkWYDOzvtt6dnp2cPY1B3T7Hgv6DgsbPJq4oEyxkqZ40T6Dnx/\nFlUOZuMBVpDNxMK7ff76RnXIfn6MXSItxFRTPU3i63ee8i+RAKC+Xee4fxfy\nbOt/Qg8VMbgioIe6oPiMe7cGBU9lQxKZ/9lvfvZ54vxyx6x24hyUs2DaR/Fg\n8+hBG0uFDpYk/gVmRY78eWXDxnURQ+o52xO6lHHLupvcUr++4rWNv074e72u\nns8q\r\n=OEWP\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBTIG7P5iB6842psxoiHk7v7bqFzsZ8Mf+XOBxyDAOg3AiEApP/jaZoCAXDRfjSfC8eDLqbsbx5PqQKWXk8NzBY891Q="}]},"maintainers":[{"email":"jason@developit.ca","name":"developit"},{"email":"npm.leah@hrmny.sh","name":"harmony"},{"email":"luke@lukeed.com","name":"lukeed"},{"email":"marvin@marvinhagemeister.de","name":"marvinhagemeister"},{"email":"prateek89born@gmail.com","name":"prateekbh"},{"email":"hello@preactjs.com","name":"preactjs"},{"email":"allamsetty.anup@gmail.com","name":"reznord"},{"email":"solarliner@gmail.com","name":"solarliner"}],"_npmUser":{"name":"marvinhagemeister","email":"marvin@marvinhagemeister.de"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/preact-render-to-string_5.1.3_1576751210076_0.3322854071042036"},"_hasShrinkwrap":false},"5.1.4":{"name":"preact-render-to-string","amdName":"preactRenderToString","version":"5.1.4","description":"Render JSX to an HTML string, with support for Preact components.","main":"dist/index.js","umd:main":"dist/index.js","module":"dist/index.module.js","jsnext:main":"dist/index.module.js","scripts":{"build":"npm run -s transpile && npm run -s transpile:jsx && npm run -s copy-typescript-definition","transpile":"microbundle src/index.js -f es,umd --target web --external preact","transpile:jsx":"microbundle src/jsx.js -o dist/jsx.js --target web --external none && microbundle dist/jsx.js -o dist/jsx.js -f cjs","copy-typescript-definition":"copyfiles -f src/*.d.ts dist","test":"eslint src test && tsc && mocha -r babel-core/register test/**/*.js","prepublishOnly":"npm run build","release":"npm run build && git commit -am $npm_package_version && git tag $npm_package_version && git push && git push --tags && npm publish"},"keywords":["preact","render","universal","isomorphic"],"eslintConfig":{"extends":"developit","rules":{"react/prefer-stateless-function":0,"react/jsx-no-bind":0,"react/no-danger":0,"jest/valid-expect":0,"new-cap":0},"settings":{"react":{"version":"16.8"}}},"babel":{"presets":["env"],"plugins":[["transform-react-jsx",{"pragma":"h"}],"transform-object-rest-spread"]},"author":{"name":"Jason Miller","email":"jason@developit.ca"},"license":"MIT","typings":"src/index.d.ts","repository":{"type":"git","url":"git+https://github.com/developit/preact-render-to-string.git"},"bugs":{"url":"https://github.com/developit/preact-render-to-string/issues"},"homepage":"https://github.com/developit/preact-render-to-string","peerDependencies":{"preact":">=10 || ^10.0.0-alpha.0 || ^10.0.0-beta.0"},"devDependencies":{"babel-plugin-transform-object-rest-spread":"^6.26.0","babel-plugin-transform-react-jsx":"^6.24.1","babel-preset-env":"^1.7.0","babel-register":"^6.26.0","chai":"^3.5.0","copyfiles":"^1.2.0","eslint":"^4.19.1","eslint-config-developit":"^1.1.1","microbundle":"^0.6.0","mocha":"^5.2.0","npm-merge-driver-install":"^1.1.1","preact":"^10.0.4","sinon":"^1.17.5","sinon-chai":"^2.8.0","typescript":"^3.4.1"},"dependencies":{"pretty-format":"^3.8.0"},"gitHead":"8fbd47324c8529927a7cca0d2e797799d2909444","_id":"preact-render-to-string@5.1.4","_nodeVersion":"11.15.0","_npmVersion":"6.13.4","dist":{"integrity":"sha512-fQyrkbn4Ustz5Gr4nQuTu2TIS+8IHqkIXf/SqstA2amgqLoPI6Z1e6Ttk5OL4jcE3MC6V+eaeRAed39sn8Oh4w==","shasum":"f26171f58f0e93b36236e4b0bee62ce561120b7c","tarball":"http://localhost:4545/npm/registry/preact-render-to-string/preact-render-to-string-5.1.4.tgz","fileCount":21,"unpackedSize":204931,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeKTObCRA9TVsSAnZWagAAYA8P/Au8HCpkCMVSMYUsAyR1\ncXxmlihHowqP5cBwySqRdOGHHb9SVVZ+X8iGY167BHAt6EWOZT2to/Ef1AyK\nEwJRJc2JnyJK3XWo4FW3JhRebmCUibg8s96lDK1ulP9mf4scYrD5p1HYF+rY\nVUlpO+zmQb8q3FObzVaG3u46aApG8P8nL4p5Tdn/RafD84zVV4c5am2h+uCX\nBDHaL+1+kedtJFVyrkE0vRnF9rqLvjvlkRhz8R7jHlG/JfaoKKhLaEY3rcbH\n9HDO64tIpjxW3d8Bb7MJgOykYk+aSVy7GjxuZDdb/gTRw6LNMQfg5VWX7TsR\nN55Ie+pfi35a9vpXnDgMuJAfRLJXqXqBwvUYEMd1cA8pYsvo7rTqOfvsNiWR\nIArLPY8fd9bQA3f4xTBT8PMCO7vJ/X7HaxxKBGw/Nm1OS++ybGY8jZxnsNOM\nSAYeXrJozTKvZGFfcEHaubk4S3dHupxtVfThfZxVFzeHJWqaWZ8vAB9TromE\ncfIPrR0OH0ubJAvMN41MQjBJNqLn7D5wPU9bvBPqHw43k7phijufJlxdvag2\nsKanpkPtl1z/yZ1XJ/bvv071oyMHfnzBoDN0KXWHV6sbSILZFr1OyUcEVOaZ\niqhiRWBokELKsLR4CBmk63R3NawytVH0eYqp6bUFdoGFMZPZZ6DeDxQ5QW2x\nXDit\r\n=fWbi\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEkPI8UNrd1YosrygCDO64nKJnWXjkZMKMFA8G6cm7ayAiAg0BgI1bXmW0NBUuaR/Jk1x8fhOV2m/1Y/p6KJ35/Ztg=="}]},"maintainers":[{"email":"jason@developit.ca","name":"developit"},{"email":"npm.leah@hrmny.sh","name":"harmony"},{"email":"luke@lukeed.com","name":"lukeed"},{"email":"marvin@marvinhagemeister.de","name":"marvinhagemeister"},{"email":"prateek89born@gmail.com","name":"prateekbh"},{"email":"hello@preactjs.com","name":"preactjs"},{"email":"allamsetty.anup@gmail.com","name":"reznord"},{"email":"solarliner@gmail.com","name":"solarliner"}],"_npmUser":{"name":"marvinhagemeister","email":"marvin@marvinhagemeister.de"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/preact-render-to-string_5.1.4_1579758491211_0.7951020808294547"},"_hasShrinkwrap":false},"5.1.5":{"name":"preact-render-to-string","amdName":"preactRenderToString","version":"5.1.5","description":"Render JSX to an HTML string, with support for Preact components.","main":"dist/index.js","umd:main":"dist/index.js","module":"dist/index.module.js","jsnext:main":"dist/index.module.js","scripts":{"build":"npm run -s transpile && npm run -s transpile:jsx && npm run -s copy-typescript-definition","transpile":"microbundle src/index.js -f es,umd --target web --external preact","transpile:jsx":"microbundle src/jsx.js -o dist/jsx.js --target web --external none && microbundle dist/jsx.js -o dist/jsx.js -f cjs","copy-typescript-definition":"copyfiles -f src/*.d.ts dist","test":"eslint src test && tsc && mocha -r babel-core/register test/**/*.js","prepublishOnly":"npm run build","release":"npm run build && git commit -am $npm_package_version && git tag $npm_package_version && git push && git push --tags && npm publish"},"keywords":["preact","render","universal","isomorphic"],"eslintConfig":{"extends":"developit","rules":{"react/prefer-stateless-function":0,"react/jsx-no-bind":0,"react/no-danger":0,"jest/valid-expect":0,"new-cap":0},"settings":{"react":{"version":"16.8"}}},"babel":{"presets":["env"],"plugins":[["transform-react-jsx",{"pragma":"h"}],"transform-object-rest-spread"]},"author":{"name":"Jason Miller","email":"jason@developit.ca"},"license":"MIT","typings":"src/index.d.ts","repository":{"type":"git","url":"git+https://github.com/developit/preact-render-to-string.git"},"bugs":{"url":"https://github.com/developit/preact-render-to-string/issues"},"homepage":"https://github.com/developit/preact-render-to-string","peerDependencies":{"preact":">=10 || ^10.0.0-alpha.0 || ^10.0.0-beta.0"},"devDependencies":{"babel-plugin-transform-object-rest-spread":"^6.26.0","babel-plugin-transform-react-jsx":"^6.24.1","babel-preset-env":"^1.7.0","babel-register":"^6.26.0","chai":"^3.5.0","copyfiles":"^1.2.0","eslint":"^4.19.1","eslint-config-developit":"^1.1.1","microbundle":"^0.6.0","mocha":"^5.2.0","npm-merge-driver-install":"^1.1.1","preact":"^10.0.4","sinon":"^1.17.5","sinon-chai":"^2.8.0","typescript":"^3.4.1"},"dependencies":{"pretty-format":"^3.8.0"},"gitHead":"992c65e38ddf44a3e287aebc55c8bc6eda2310b4","_id":"preact-render-to-string@5.1.5","_nodeVersion":"11.15.0","_npmVersion":"6.13.4","dist":{"integrity":"sha512-/nc0b/FkOBIXFSy1etp9xI6dbHgs0EhtyXk9VuMwJ44w6YSVT+Gnwhp6Kc+C5AvEzv7wOcgvCfe62ksdEjQ0pw==","shasum":"991877b954c85c666100d52f23e2eaea4c131472","tarball":"http://localhost:4545/npm/registry/preact-render-to-string/preact-render-to-string-5.1.5.tgz","fileCount":21,"unpackedSize":206075,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJejNe+CRA9TVsSAnZWagAAOM0QAJoCXv7XEGw6Ki2jhQo9\ncpopCb3UWPxJilT/wUW0Sjy4ZJkmToZxXT+xQGfROoLGQJhsKb5WsY+o6cvR\nIer0UYbqCkmagYAEAs2jWF3M8vJEzBtvk9m919whhxytfNTqd6lklsHviJ9E\nT0bF0ISjzhadoIptNRHQI6U69T0VCeQKHS7Yj8s88mFrmHO9m8Lykp+F9WL8\nk5xTXFIxti0KyhHGSvyuONchXtrNqCdn2GL0CFdMRPhevbB88PFkuxzhwz/8\nU9XG56PNyRpupMNw6PaHGzwsCjhdG2oH29XyadjBVkADHFiDr5a94bLAJwWx\nFBXrBbKKH9/eCrO68Flqbodh8NlnDSfFjAng6Ikyp0Hh3JHvltmYsycKONq7\n2FZ/lrBm8C+j++4OY4yItMYwbKaXJjN5IP41Rb0uq/BPfWLJBoxUy6nprkDC\ngn8iJiycYOmiPDmBNuA9FBO5j1NLOPP8rFUy/Ladu0kzMrmudcxo56VyTeoK\nDZxfRFLjMcD5sIUO2wIiJQUP3ugkEfDNSy/tU/RjUibPQ3LzAhX/ICJmhXjK\nnfg6BGVzhuzzDnM+fCo6Lifv/Fw6iux07ROl1puMCZr1G48t/5Mn1tnjW/DX\nvww6sfxlEPqD56c8YejN8i9BlRgx50FtKgiXhDP+4auQg9l18Bd91taPhPCk\ntnB1\r\n=K076\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCR4f7Z8+P8KAMYqES8Q4CnrVhGFyH1cNMt3nX8qqvVaQIhANlb+y5mk1M0b99lDpN5naaTK8pigbRviNmL1cUfXjko"}]},"maintainers":[{"email":"jason@developit.ca","name":"developit"},{"email":"npm.leah@hrmny.sh","name":"harmony"},{"email":"decroockjovi@gmail.com","name":"jdecroock"},{"email":"luke@lukeed.com","name":"lukeed"},{"email":"marvin@marvinhagemeister.de","name":"marvinhagemeister"},{"email":"prateek89born@gmail.com","name":"prateekbh"},{"email":"hello@preactjs.com","name":"preactjs"},{"email":"allamsetty.anup@gmail.com","name":"reznord"},{"email":"solarliner@gmail.com","name":"solarliner"}],"_npmUser":{"name":"marvinhagemeister","email":"marvin@marvinhagemeister.de"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/preact-render-to-string_5.1.5_1586288573970_0.6661931747369643"},"_hasShrinkwrap":false},"5.1.6":{"name":"preact-render-to-string","amdName":"preactRenderToString","version":"5.1.6","description":"Render JSX to an HTML string, with support for Preact components.","main":"dist/index.js","umd:main":"dist/index.js","module":"dist/index.module.js","jsnext:main":"dist/index.module.js","scripts":{"build":"npm run -s transpile && npm run -s transpile:jsx && npm run -s copy-typescript-definition","transpile":"microbundle src/index.js -f es,umd --target web --external preact","transpile:jsx":"microbundle src/jsx.js -o dist/jsx.js --target web --external none && microbundle dist/jsx.js -o dist/jsx.js -f cjs","copy-typescript-definition":"copyfiles -f src/*.d.ts dist","test":"eslint src test && tsc && mocha -r babel-core/register test/**/*.js","prepublishOnly":"npm run build","release":"npm run build && git commit -am $npm_package_version && git tag $npm_package_version && git push && git push --tags && npm publish"},"keywords":["preact","render","universal","isomorphic"],"eslintConfig":{"extends":"developit","rules":{"react/prefer-stateless-function":0,"react/jsx-no-bind":0,"react/no-danger":0,"jest/valid-expect":0,"new-cap":0},"settings":{"react":{"version":"16.8"}}},"babel":{"presets":["env"],"plugins":[["transform-react-jsx",{"pragma":"h"}],"transform-object-rest-spread"]},"author":{"name":"Jason Miller","email":"jason@developit.ca"},"license":"MIT","typings":"src/index.d.ts","repository":{"type":"git","url":"git+https://github.com/developit/preact-render-to-string.git"},"bugs":{"url":"https://github.com/developit/preact-render-to-string/issues"},"homepage":"https://github.com/developit/preact-render-to-string","peerDependencies":{"preact":">=10"},"devDependencies":{"babel-plugin-transform-object-rest-spread":"^6.26.0","babel-plugin-transform-react-jsx":"^6.24.1","babel-preset-env":"^1.7.0","babel-register":"^6.26.0","chai":"^3.5.0","copyfiles":"^1.2.0","eslint":"^4.19.1","eslint-config-developit":"^1.1.1","microbundle":"^0.6.0","mocha":"^5.2.0","npm-merge-driver-install":"^1.1.1","preact":"^10.0.4","sinon":"^1.17.5","sinon-chai":"^2.8.0","typescript":"^3.4.1"},"dependencies":{"pretty-format":"^3.8.0"},"gitHead":"4b10aa948ca52427348d44659082a85e3b7a8382","_id":"preact-render-to-string@5.1.6","_nodeVersion":"12.16.0","_npmVersion":"6.13.4","dist":{"integrity":"sha512-/8mDzzfMrxx5tzJazKGdyYADrmjzBR3QJsvdZs03aV9VjeXpDrzDHs6dhzlMA1EsdCBq4cqioKjVKUs58uNckg==","shasum":"6e8f6c7d657743d8bb27c8ea3d5ac218354c87a4","tarball":"http://localhost:4545/npm/registry/preact-render-to-string/preact-render-to-string-5.1.6.tgz","fileCount":23,"unpackedSize":231294,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJekJe1CRA9TVsSAnZWagAA3YQP/27l2HPqLjvBkpdvBib6\nR3E+h3kcYpaM5OlawRUbAlJvooJzLAAW9SU0n+aIu+mnIjWrLW5U1UaIqz1T\n6Wdzb6FpEhli2CroVZI578+EMG0MtU7bDnlaiFghAzbXYrYQkgK9pzYcj2Iv\nJBktBUW7tcuSM9/2OSQ9MX4KQ9ZweMQ6mvPJKZ9tDzHa6leriup358xHG2iE\nq4fOpkeigmHJ8ebrLf+Ei/Gb8ECbSw6NfOYTuzmQiUsynbPJjnuezbBbPufK\nUm5M3ku5W0bALrO/TMQ4Wwa+475IbrndkwxZWuQs4bvDj+aeDBViv5kby99G\nCoVRoosm2cyTbEqzcQ4NxA3A6q3/JbEyH+YCYfpv0QCKtxkzfg4kA5xxXc+7\nAjBo+dzMgTOfSQEYXMLAO8pCGmRSpWvruEXF18ukA5lefE/vKKreLVvBE9Un\nhV5WYMiqKKheYgNVB0mVLMmZhgZaIHM3mLgISscHlJrAGta7rDPZ8i93zqI/\nAkreXLMFq5k6crkC3xaWXDCKNkOnEn8cH2IWVdEnznVNAnlT4W2Rn2Zj3RVO\nUYStWfCfLXNI5pEsgItZMLr/rrLEdYobPZZ7JhC9AULzoB8Pl/MsbMmCsHR4\ndYcVW5ImTHJ2szxPqgJkAkVUVtJO3jh6wHwF0US7g57i3vmMEI6kelyeb7ah\nzt4Z\r\n=BLjk\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEOW0sFIm8/R25GtMInUEQyzt5iF8Jvl1s5RrFDV719uAiEAtMQ/6Uwij2M19upJrm2VgyeTxWWlriTSbavMSddm7go="}]},"maintainers":[{"email":"jason@developit.ca","name":"developit"},{"email":"npm.leah@hrmny.sh","name":"harmony"},{"email":"decroockjovi@gmail.com","name":"jdecroock"},{"email":"luke@lukeed.com","name":"lukeed"},{"email":"marvin@marvinhagemeister.de","name":"marvinhagemeister"},{"email":"prateek89born@gmail.com","name":"prateekbh"},{"email":"hello@preactjs.com","name":"preactjs"},{"email":"allamsetty.anup@gmail.com","name":"reznord"},{"email":"solarliner@gmail.com","name":"solarliner"}],"_npmUser":{"name":"developit","email":"jason@developit.ca"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/preact-render-to-string_5.1.6_1586534324868_0.9271742543808306"},"_hasShrinkwrap":false},"5.1.7":{"name":"preact-render-to-string","amdName":"preactRenderToString","version":"5.1.7","description":"Render JSX to an HTML string, with support for Preact components.","main":"dist/index.js","umd:main":"dist/index.js","module":"dist/index.module.js","jsnext:main":"dist/index.module.js","exports":{".":{"require":"./dist/index.js","import":"./dist/index.mjs","browser":"./dist/index.module.js"},"./jsx":{"require":"./dist/jsx.js","import":"./dist/jsx.mjs","browser":"./dist/jsx.module.js"},"./package.json":"./package.json","./":"./"},"scripts":{"build":"npm run -s transpile && npm run -s transpile:jsx && npm run -s copy-typescript-definition","postbuild":"node ./config/node-13-exports.js","transpile":"microbundle src/index.js -f es,umd --target web --external preact","transpile:jsx":"microbundle src/jsx.js -o dist/jsx.js --target web --external none && microbundle dist/jsx.js -o dist/jsx.js -f cjs","copy-typescript-definition":"copyfiles -f src/*.d.ts dist","test":"eslint src test && tsc && mocha -r babel-core/register test/**/*.js","prepublishOnly":"npm run build","release":"npm run build && git commit -am $npm_package_version && git tag $npm_package_version && git push && git push --tags && npm publish"},"keywords":["preact","render","universal","isomorphic"],"eslintConfig":{"extends":"developit","rules":{"react/prefer-stateless-function":0,"react/jsx-no-bind":0,"react/no-danger":0,"jest/valid-expect":0,"new-cap":0},"settings":{"react":{"version":"16.8"}}},"babel":{"presets":["env"],"plugins":[["transform-react-jsx",{"pragma":"h"}],"transform-object-rest-spread"]},"author":{"name":"Jason Miller","email":"jason@developit.ca"},"license":"MIT","typings":"src/index.d.ts","repository":{"type":"git","url":"git+https://github.com/developit/preact-render-to-string.git"},"bugs":{"url":"https://github.com/developit/preact-render-to-string/issues"},"homepage":"https://github.com/developit/preact-render-to-string","peerDependencies":{"preact":">=10"},"devDependencies":{"babel-plugin-transform-object-rest-spread":"^6.26.0","babel-plugin-transform-react-jsx":"^6.24.1","babel-preset-env":"^1.7.0","babel-register":"^6.26.0","chai":"^3.5.0","copyfiles":"^1.2.0","eslint":"^4.19.1","eslint-config-developit":"^1.1.1","microbundle":"^0.6.0","mocha":"^5.2.0","npm-merge-driver-install":"^1.1.1","preact":"^10.0.4","sinon":"^1.17.5","sinon-chai":"^2.8.0","typescript":"^3.4.1"},"dependencies":{"pretty-format":"^3.8.0"},"gitHead":"f0e18b03859c6ae2dadb7ec5df1fdd364fb71c5f","_id":"preact-render-to-string@5.1.7","_nodeVersion":"11.15.0","_npmVersion":"6.13.4","dist":{"integrity":"sha512-3F4qvUsbiS/ZJ0lOHF+I8aye6x63QSXeOjaATJ6KppJsCUJW9adHa7CbBYX7Ib3DlYDp6PFwfefxK72NKys2sA==","shasum":"97a833504b28f68e47ba5d17f6a44f74cd489d32","tarball":"http://localhost:4545/npm/registry/preact-render-to-string/preact-render-to-string-5.1.7.tgz","fileCount":23,"unpackedSize":227912,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJesHhjCRA9TVsSAnZWagAA7HYQAJ7eB/KnacdGI0T1kxHI\nmXqES3wiFt1HdmUrFF9FwzjKbqZbMUu0vvVrtTxV6cSpqRUrPmusyRlXOzeq\nxhwp7of7w1vgx3zkVp5RephZulx3IiP+aDJXKuPJL+2gKHYtvPXGQAvMdWeQ\n7RalGDw1am/K13Ecl/ZDrjp03Jypn9lVzMFYWVQcQ6tS9DK4y0kjsz8QFRoI\nTLuM4zvk4sT9pVJyYK5V3BhNvZynGDJZUOvYcCt/Cb+YqmZ7y+KQ6kBK4NyF\n0AlY7QBddJ7jK7TqJ9uugS7cyRXhdc0zbA1ndzLwpPxiAl+bgMW9vpJ7qI6l\nt7WABbJ46vg81gzDOrWCF/k3bzvbc7fZBOfzy1/uH/1xOVkzcb9uSQSHai2Y\nOsCzo1e439s64YtrIhkslUe2vc4VBigy2zWb2EQBDon0aOzThZ70JykMu89S\nXy4GypkmXDIpMWSCR3yEwhHgaeVunKL8DirI4EVLzGtijKpkx8wiNQMKBwpK\nSFijgdikZ5DBgQoxxLEujoMKBXt4U+Yd7nA/xcv6LAEm5Hzs/OIJoG6sVK7V\nS92E4WQW7X+y8n4WOPhUzVVdjWLiVF+x3XLREDMgXdlEZd7P5dUu0mBpDy5M\nkTHU+ba62zA2H7fkoseYFOoNu6rdGq4qa9jyuOopodCliGX9njtzFwCtfSJD\nSjSt\r\n=/fdx\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCHuzMc1oA9PGOG+8j8biyIYX+M8dj4Hc52VVPBYIUwJQIhAPvZYaGI8gJsK3Yyqa61mfolo/X7turoZ6FaSJVY3v3E"}]},"maintainers":[{"email":"jason@developit.ca","name":"developit"},{"email":"npm.leah@hrmny.sh","name":"harmony"},{"email":"decroockjovi@gmail.com","name":"jdecroock"},{"email":"luke@lukeed.com","name":"lukeed"},{"email":"marvin@marvinhagemeister.de","name":"marvinhagemeister"},{"email":"prateek89born@gmail.com","name":"prateekbh"},{"email":"hello@preactjs.com","name":"preactjs"},{"email":"allamsetty.anup@gmail.com","name":"reznord"},{"email":"solarliner@gmail.com","name":"solarliner"}],"_npmUser":{"name":"marvinhagemeister","email":"marvin@marvinhagemeister.de"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/preact-render-to-string_5.1.7_1588623458945_0.7154866466177754"},"_hasShrinkwrap":false},"5.1.8":{"name":"preact-render-to-string","amdName":"preactRenderToString","version":"5.1.8","description":"Render JSX to an HTML string, with support for Preact components.","main":"dist/index.js","umd:main":"dist/index.js","module":"dist/index.module.js","jsnext:main":"dist/index.module.js","exports":{".":{"require":"./dist/index.js","import":"./dist/index.mjs","browser":"./dist/index.module.js"},"./jsx":{"require":"./dist/jsx.js","import":"./dist/jsx.mjs","browser":"./dist/jsx.module.js"},"./package.json":"./package.json","./":"./"},"scripts":{"build":"npm run -s transpile && npm run -s transpile:jsx && npm run -s copy-typescript-definition","postbuild":"node ./config/node-13-exports.js","transpile":"microbundle src/index.js -f es,umd --target web --external preact","transpile:jsx":"microbundle src/jsx.js -o dist/jsx.js --target web --external none && microbundle dist/jsx.js -o dist/jsx.js -f cjs","copy-typescript-definition":"copyfiles -f src/*.d.ts dist","test":"eslint src test && tsc && mocha -r babel-core/register test/**/*.js","prepublishOnly":"npm run build","release":"npm run build && git commit -am $npm_package_version && git tag $npm_package_version && git push && git push --tags && npm publish"},"keywords":["preact","render","universal","isomorphic"],"eslintConfig":{"extends":"developit","rules":{"react/prefer-stateless-function":0,"react/jsx-no-bind":0,"react/no-danger":0,"jest/valid-expect":0,"new-cap":0},"settings":{"react":{"version":"16.8"}}},"babel":{"presets":["env"],"plugins":[["transform-react-jsx",{"pragma":"h"}],"transform-object-rest-spread"]},"author":{"name":"Jason Miller","email":"jason@developit.ca"},"license":"MIT","typings":"src/index.d.ts","repository":{"type":"git","url":"git+https://github.com/developit/preact-render-to-string.git"},"bugs":{"url":"https://github.com/developit/preact-render-to-string/issues"},"homepage":"https://github.com/developit/preact-render-to-string","peerDependencies":{"preact":">=10"},"devDependencies":{"babel-plugin-transform-object-rest-spread":"^6.26.0","babel-plugin-transform-react-jsx":"^6.24.1","babel-preset-env":"^1.7.0","babel-register":"^6.26.0","chai":"^3.5.0","copyfiles":"^1.2.0","eslint":"^4.19.1","eslint-config-developit":"^1.1.1","microbundle":"^0.6.0","mocha":"^5.2.0","npm-merge-driver-install":"^1.1.1","preact":"^10.0.4","sinon":"^1.17.5","sinon-chai":"^2.8.0","typescript":"^3.4.1"},"dependencies":{"pretty-format":"^3.8.0"},"gitHead":"18332cb804e8e15ae852b4cdff53c862a777f7be","_id":"preact-render-to-string@5.1.8","_nodeVersion":"11.15.0","_npmVersion":"6.13.4","dist":{"integrity":"sha512-9c2OFfOJ2Zi7ppMbHYC5lx1ebDFXpDGBMns9/YaKMgZGElUY90xTGmsKeNMqrNoDo7ImYPh715Ke6Ah/pdjW0g==","shasum":"5540f4c1b1fcf1e7c7dfb154d38053e717ca1fe4","tarball":"http://localhost:4545/npm/registry/preact-render-to-string/preact-render-to-string-5.1.8.tgz","fileCount":23,"unpackedSize":228805,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJetTHGCRA9TVsSAnZWagAAr8AQAKPC+b8r5ryA2LO21m1i\n15ZS67MEPPFb1jh5KKuLKOA8eb9ewROs4YhVUvdRDDh0/GiSqXXolJFrM3EF\nNQ5R1hHH4hm+N3el8eiURQQP7RurUYMDqdW8d7xQyXFvRaBe9n6YlK/1Qf44\nlWzOuJ7Xz8SqYy6wccb9mQv65sYgCNOzWGQomMrHx4+GLBC777dcv8rXVrRK\nMiSKYZBy3Oq44vzRj+QkQKv8jGpoPawSCkWonV4W69796d56Fq/KkfXElw60\njmEDqDsXQUyURtyudHcW0u4fM6qrBRsDfCHgjKA1S/wnq/sxzMgpmW6IlXBE\nGmcuadENQIibnM0NuEzJS+oFT6/kbLXlWjzKPCEcOeU2w0K3qCBnry9elSOo\nh6LTIHLMhnTf4Z6cgX4W+d5qBIFZ5L9UZqzkZtxN7tEtabLZ79zsQtqgq4M6\ntxQjmHC1XsvkgX3FqCkUIr1MrLlDBI6eZpaeLP8llWUywKx2dXIdesmt0ePY\n8kJYJytYHTe2jEXyugnj1HV9Y6MaZ8ZzlhiVPtw0tySs95XUYiG3lf6ZL4LG\neiR8oLT+SWRgSEL1gHjZfWrexuKqK4ErHkhhJZKk/5YLHp4Qz7P6QNmMwboE\nICX8+cDDXGD3Kpf+50oC2bareU5jy170ma+NIn2EGnAc00HslPx71KUFvpRa\nCiQC\r\n=d2gC\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD7DOM9iMr+kRJd29aiHHAteqgDXNVahwYd+uT+8LEcgwIhAJwoDoKKxyiyYHOPAz1/S9phnJUL0tDHqQh/SG+bk8+e"}]},"maintainers":[{"email":"jason@developit.ca","name":"developit"},{"email":"npm.leah@hrmny.sh","name":"harmony"},{"email":"decroockjovi@gmail.com","name":"jdecroock"},{"email":"luke@lukeed.com","name":"lukeed"},{"email":"marvin@marvinhagemeister.de","name":"marvinhagemeister"},{"email":"prateek89born@gmail.com","name":"prateekbh"},{"email":"hello@preactjs.com","name":"preactjs"},{"email":"allamsetty.anup@gmail.com","name":"reznord"},{"email":"solarliner@gmail.com","name":"solarliner"}],"_npmUser":{"name":"marvinhagemeister","email":"marvin@marvinhagemeister.de"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/preact-render-to-string_5.1.8_1588933062446_0.27669225703536515"},"_hasShrinkwrap":false},"5.1.9":{"name":"preact-render-to-string","amdName":"preactRenderToString","version":"5.1.9","description":"Render JSX to an HTML string, with support for Preact components.","main":"dist/index.js","umd:main":"dist/index.js","module":"dist/index.module.js","jsnext:main":"dist/index.module.js","exports":{".":{"require":"./dist/index.js","import":"./dist/index.mjs","browser":"./dist/index.module.js"},"./jsx":{"require":"./dist/jsx.js","import":"./dist/jsx.mjs","browser":"./dist/jsx.module.js"},"./package.json":"./package.json","./":"./"},"scripts":{"build":"npm run -s transpile && npm run -s transpile:jsx && npm run -s copy-typescript-definition","postbuild":"node ./config/node-13-exports.js","transpile":"microbundle src/index.js -f es,umd --target web --external preact","transpile:jsx":"microbundle src/jsx.js -o dist/jsx.js --target web --external none && microbundle dist/jsx.js -o dist/jsx.js -f cjs","copy-typescript-definition":"copyfiles -f src/*.d.ts dist","test":"eslint src test && tsc && mocha -r babel-core/register test/**/*.js","prepublishOnly":"npm run build","release":"npm run build && git commit -am $npm_package_version && git tag $npm_package_version && git push && git push --tags && npm publish"},"keywords":["preact","render","universal","isomorphic"],"eslintConfig":{"extends":"developit","rules":{"react/prefer-stateless-function":0,"react/jsx-no-bind":0,"react/no-danger":0,"jest/valid-expect":0,"new-cap":0},"settings":{"react":{"version":"16.8"}}},"babel":{"presets":["env"],"plugins":[["transform-react-jsx",{"pragma":"h"}],"transform-object-rest-spread"]},"author":{"name":"Jason Miller","email":"jason@developit.ca"},"license":"MIT","typings":"src/index.d.ts","repository":{"type":"git","url":"git+https://github.com/developit/preact-render-to-string.git"},"bugs":{"url":"https://github.com/developit/preact-render-to-string/issues"},"homepage":"https://github.com/developit/preact-render-to-string","peerDependencies":{"preact":">=10"},"devDependencies":{"babel-plugin-transform-object-rest-spread":"^6.26.0","babel-plugin-transform-react-jsx":"^6.24.1","babel-preset-env":"^1.7.0","babel-register":"^6.26.0","chai":"^3.5.0","copyfiles":"^1.2.0","eslint":"^4.19.1","eslint-config-developit":"^1.1.1","microbundle":"^0.6.0","mocha":"^5.2.0","npm-merge-driver-install":"^1.1.1","preact":"^10.0.4","sinon":"^1.17.5","sinon-chai":"^2.8.0","typescript":"^3.4.1"},"dependencies":{"pretty-format":"^3.8.0"},"gitHead":"09d7675bc1ea76e8dc50658bfb889b82a8a9beed","_id":"preact-render-to-string@5.1.9","_nodeVersion":"12.12.0","_npmVersion":"6.12.0","dist":{"integrity":"sha512-fuuZP/nBcsYvfI5Mjs8R0wVA8jPbnAsr/UQ5Y5/p9Qg4HAz9vSVJ03iejBVw4YGV8jkUCJv0++k4zwp6qjx2Kg==","shasum":"201d7bb4c20899b68f5cbda705d36c45305f7efb","tarball":"http://localhost:4545/npm/registry/preact-render-to-string/preact-render-to-string-5.1.9.tgz","fileCount":25,"unpackedSize":314506,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe0W0cCRA9TVsSAnZWagAAD+AP/AiAqB6yTS8Ka7YX3z5c\nbbuIRZmUddQTJPJT2qYqWNHZYvH5HTN1kGVRX4h6eh/FLFwR5fgK430iFV+P\nrNX6MSaMuVf/L61WcO5MqbndYojzU8UFS4tICN1PfEFgUtf6QXxiyG71rvpE\nzXAh6+i7hsTUYynRuf4PaWEUgiX59lg3r+XHz5PeGT7FjtXqdj6maiArr2SI\naS5VC3dIXnmvwZTx5vFjY2K7O5Cf41S+PUjNucIKJkTReEM5FWyHmnhHDFy9\nAxO03Hq/HJ+IzeYz0dLgSyEyRFQRU1bScPt1RtR7QMyzvlVO6ePYjzVi58xO\n1DRjs6bYvvPjDN5w+BwNrTSRgzWhowA/70ONVizBK2nZ5DJDJw9l/DDWi+Yh\nB7peE2JAE+qvNZIO2U88P1my/4FXHu0oDKcCbKrtiU0ecefOqdY5EAv+Vtme\n0SsAfKBQmv4sOtdY+XqQn7GbWlFirg68Uh/T6vpLr4maE/keVEz5zAFfpLH3\nLPP5zLW92xCzXaH/Rw78ycmvay9s1unfSFJvrY6bvgE2uBL7ri6Q8RR4RFWZ\n5HEu2DKwUnKwsK/ynuO5lbexwQh0qnR+0JVVR0tp2KTzcTAaSk/l0yoWLdl1\nP1X+kVrXgcYStdWl+9yOJohGrQFOluuQVjLCNgVHUXf/7DjoC7DG33bQ5+UN\ntt/6\r\n=vVbh\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCV7zqq5HaJSDhq628b99QuyYSgvuAIJSour3hJNne3KQIgfcsWN5xYk3Xtxw908/6O3odLMajeqT+uiLMr5lRb0zY="}]},"maintainers":[{"email":"jason@developit.ca","name":"developit"},{"email":"npm.leah@hrmny.sh","name":"harmony"},{"email":"decroockjovi@gmail.com","name":"jdecroock"},{"email":"luke@lukeed.com","name":"lukeed"},{"email":"marvin@marvinhagemeister.de","name":"marvinhagemeister"},{"email":"prateek89born@gmail.com","name":"prateekbh"},{"email":"hello@preactjs.com","name":"preactjs"},{"email":"allamsetty.anup@gmail.com","name":"reznord"},{"email":"solarliner@gmail.com","name":"solarliner"}],"_npmUser":{"name":"jdecroock","email":"decroockjovi@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/preact-render-to-string_5.1.9_1590783259681_0.46063041311609254"},"_hasShrinkwrap":false},"5.1.10":{"name":"preact-render-to-string","amdName":"preactRenderToString","version":"5.1.10","description":"Render JSX to an HTML string, with support for Preact components.","main":"dist/index.js","umd:main":"dist/index.js","module":"dist/index.module.js","jsnext:main":"dist/index.module.js","exports":{".":{"require":"./dist/index.js","import":"./dist/index.mjs","browser":"./dist/index.module.js"},"./jsx":{"require":"./dist/jsx.js","import":"./dist/jsx.mjs","browser":"./dist/jsx.module.js"},"./package.json":"./package.json","./":"./"},"scripts":{"build":"npm run -s transpile && npm run -s transpile:jsx && npm run -s copy-typescript-definition","postbuild":"node ./config/node-13-exports.js","transpile":"microbundle src/index.js -f es,umd --target web --external preact","transpile:jsx":"microbundle src/jsx.js -o dist/jsx.js --target web --external none && microbundle dist/jsx.js -o dist/jsx.js -f cjs","copy-typescript-definition":"copyfiles -f src/*.d.ts dist","test":"eslint src test && tsc && mocha -r babel-core/register test/**/*.js","prepublishOnly":"npm run build","release":"npm run build && git commit -am $npm_package_version && git tag $npm_package_version && git push && git push --tags && npm publish"},"keywords":["preact","render","universal","isomorphic"],"eslintConfig":{"extends":"developit","rules":{"react/prefer-stateless-function":0,"react/jsx-no-bind":0,"react/no-danger":0,"jest/valid-expect":0,"new-cap":0},"settings":{"react":{"version":"16.8"}}},"babel":{"presets":["env"],"plugins":[["transform-react-jsx",{"pragma":"h"}],"transform-object-rest-spread"]},"author":{"name":"Jason Miller","email":"jason@developit.ca"},"license":"MIT","typings":"src/index.d.ts","repository":{"type":"git","url":"git+https://github.com/developit/preact-render-to-string.git"},"bugs":{"url":"https://github.com/developit/preact-render-to-string/issues"},"homepage":"https://github.com/developit/preact-render-to-string","peerDependencies":{"preact":">=10"},"devDependencies":{"babel-plugin-transform-object-rest-spread":"^6.26.0","babel-plugin-transform-react-jsx":"^6.24.1","babel-preset-env":"^1.7.0","babel-register":"^6.26.0","chai":"^3.5.0","copyfiles":"^1.2.0","eslint":"^4.19.1","eslint-config-developit":"^1.1.1","microbundle":"^0.6.0","mocha":"^5.2.0","npm-merge-driver-install":"^1.1.1","preact":"^10.0.4","sinon":"^1.17.5","sinon-chai":"^2.8.0","typescript":"^3.4.1"},"dependencies":{"pretty-format":"^3.8.0"},"gitHead":"fdb033e7d07b0b4369c409d43891fcd10159026b","_id":"preact-render-to-string@5.1.10","_nodeVersion":"14.2.0","_npmVersion":"6.14.4","dist":{"integrity":"sha512-40svy7NDe5Qe0ymdsIC11f0hZb05MeTSUqqIaWJ5DEFCh/sF86KcpRW0kN/ymGYDVVUCfv9qFrVuLCXR7aQxgQ==","shasum":"cce03d73b166c550148af9dedc9e06fdf6820f8a","tarball":"http://localhost:4545/npm/registry/preact-render-to-string/preact-render-to-string-5.1.10.tgz","fileCount":23,"unpackedSize":234596,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfDZhVCRA9TVsSAnZWagAAW0MP/ifq/CqqlwOlkcP7AXgb\nAwhI1j167V4QbrT9NcDUy8e1zcsT3eFRqUc92PBd5HQmfpCofNjU1gshNQVQ\nYwz13UtFa1MaZu7lBciaCQqzVdhZS/P28T1WYEqqpHTCUv5rKeKmrj9lpPzq\nQmBpOuiJ4MbwvAl55j9nKvfWgmJmSt8cs5lKH49+ShTWxi7CpGJ+tSqDjJ69\nqt/u6OXuGunNQxDOZA7VXmRBSfS9nLQzwVLWkXetixsf9CQ4bU6C+d7sGPuN\nXGkCrn0sGJo/fYqwMAQyALUNIvAYCfJQHlZcZId8gW/qs1u6v9DoNw2qUzFl\nyNFOhiQy2aUWEsO4ash2/mx35Otu2BOrRbts8B1xVHPVTSPjDZmnRKuxTDyz\naHHHIal7Sgb6AIRHsGWn29pNIBkxy+Ht6nLFQN98dQjeXCiAtcwClQDbJ3N8\nZanxZ64bGon7vGtxSuoHk39wjEZ8dD/g4RZzWfMdkwT0RqaUj7dl/miQbDfZ\nC72DmOdUGR2a2pTwOJiIhiWenEORoecyC22DOQpVvaSvGCmoAfPuSkoWA4Rx\nZ6epX4Fw38B53cEoetYtt8j9RyWhutaB2p9paycZuoKb3M3Yas/iVaqGokLS\nnrn7XBKewxP2EgNRFN+mZSqdfWCzrhF3xXTDqgIHQLE1LGdBccrJWxSwSMAD\nK5Sd\r\n=Ixaq\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDZUIDFr9fSzKkmU6ejoM4/xM6rseUQEtn2T3O9CV03rAIgWQXZHSTfCnNdj9gHuTj2tmcUQPJk9OgrEkjvVDn3IKk="}]},"maintainers":[{"email":"jason@developit.ca","name":"developit"},{"email":"npm.leah@hrmny.sh","name":"harmony"},{"email":"decroockjovi@gmail.com","name":"jdecroock"},{"email":"luke@lukeed.com","name":"lukeed"},{"email":"marvin@marvinhagemeister.de","name":"marvinhagemeister"},{"email":"prateek89born@gmail.com","name":"prateekbh"},{"email":"hello@preactjs.com","name":"preactjs"},{"email":"allamsetty.anup@gmail.com","name":"reznord"},{"email":"solarliner@gmail.com","name":"solarliner"}],"_npmUser":{"name":"marvinhagemeister","email":"marvin@marvinhagemeister.de"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/preact-render-to-string_5.1.10_1594726484710_0.026651741593970657"},"_hasShrinkwrap":false},"5.1.11":{"name":"preact-render-to-string","amdName":"preactRenderToString","version":"5.1.11","description":"Render JSX to an HTML string, with support for Preact components.","main":"dist/index.js","umd:main":"dist/index.js","module":"dist/index.module.js","jsnext:main":"dist/index.module.js","exports":{".":{"require":"./dist/index.js","import":"./dist/index.mjs","browser":"./dist/index.module.js"},"./jsx":{"require":"./dist/jsx.js","import":"./dist/jsx.mjs","browser":"./dist/jsx.module.js"},"./package.json":"./package.json","./":"./"},"scripts":{"build":"npm run -s transpile && npm run -s transpile:jsx && npm run -s copy-typescript-definition","postbuild":"node ./config/node-13-exports.js","transpile":"microbundle src/index.js -f es,umd --target web --external preact","transpile:jsx":"microbundle src/jsx.js -o dist/jsx.js --target web --external none && microbundle dist/jsx.js -o dist/jsx.js -f cjs","copy-typescript-definition":"copyfiles -f src/*.d.ts dist","test":"eslint src test && tsc && npm run test:mocha","test:mocha":"mocha -r babel-core/register test/**/*.js","format":"prettier src/**/*.{d.ts,js} test/**/*.js --write","prepublishOnly":"npm run build","release":"npm run build && git commit -am $npm_package_version && git tag $npm_package_version && git push && git push --tags && npm publish"},"keywords":["preact","render","universal","isomorphic"],"eslintConfig":{"extends":"developit","rules":{"react/prefer-stateless-function":0,"react/jsx-no-bind":0,"react/no-danger":0,"jest/valid-expect":0,"new-cap":0,"curly":"off","brace-style":"off","indent":"off"},"settings":{"react":{"version":"16.8"}}},"babel":{"presets":["env"],"plugins":[["transform-react-jsx",{"pragma":"h"}],"transform-object-rest-spread"]},"author":{"name":"Jason Miller","email":"jason@developit.ca"},"license":"MIT","typings":"src/index.d.ts","repository":{"type":"git","url":"git+https://github.com/developit/preact-render-to-string.git"},"bugs":{"url":"https://github.com/developit/preact-render-to-string/issues"},"homepage":"https://github.com/developit/preact-render-to-string","peerDependencies":{"preact":">=10"},"devDependencies":{"babel-plugin-transform-object-rest-spread":"^6.26.0","babel-plugin-transform-react-jsx":"^6.24.1","babel-preset-env":"^1.7.0","babel-register":"^6.26.0","chai":"^3.5.0","copyfiles":"^1.2.0","eslint":"^4.19.1","eslint-config-developit":"^1.1.1","husky":"^4.3.0","lint-staged":"^10.4.0","microbundle":"^0.6.0","mocha":"^5.2.0","npm-merge-driver-install":"^1.1.1","preact":"^10.0.4","prettier":"^2.1.2","sinon":"^1.17.5","sinon-chai":"^2.8.0","typescript":"^3.4.1"},"dependencies":{"pretty-format":"^3.8.0"},"prettier":{"singleQuote":true,"trailingComma":"none","useTabs":true,"tabWidth":2},"lint-staged":{"**/*.{js,jsx,ts,tsx,yml}":["prettier --write"]},"husky":{"hooks":{"pre-commit":"lint-staged"}},"gitHead":"9a3c65689b7aa66dba3be319777dcef9e488aac1","_id":"preact-render-to-string@5.1.11","_nodeVersion":"14.13.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-8DXkx8WzeUexYyh9ZjlBSsqcJVOndidw10t1MK1gLx6at4QxQE3RfqaObPgy5WOnw2piyh9kanNB7w7+dmaq4g==","shasum":"7d8d77c23ef40ae6abc3d390b7430b3cb6206020","tarball":"http://localhost:4545/npm/registry/preact-render-to-string/preact-render-to-string-5.1.11.tgz","fileCount":23,"unpackedSize":241571,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfkJiUCRA9TVsSAnZWagAAaTMP/3NpXg3PGXWmVJLWXlTa\n23mVtUGPhcGPvSsWuVmbbtdYjMercC5ZVtyCi3af8CF9Gts5HRuO7tSKlurX\ne5yv0Xn1q6B86C536WErt28Gw3d3qLZ8qvTJO6GBhoK+CpVOmAHEKbOBZeOc\nRcalf6AG20e/vg6E4Roff4MDY5wIqRAgFjrtXE0QVmVnIyhbpmbB7pk6wk+V\ncOa9peEyqQ43UIdYsqs6qveSDXwrxvBRTaxu3Xd/h4eHXBhfjK9H2WOx+8Km\nU0ok9uOy/ewe9Yj1rz8wA3V0h/evOZtUxinV2S03lUCLMVwc7Je0XAO5xzua\nP1hyzRi5tgaJP9RlpBLL//DBJEla8S+GjNk2QmZZK6gzhkCJKDV5nAHnrLMQ\nyW7bGlyWmGmnetYW7+xMtC+b10nz0VR/7CNKgEvzeRy2aJqdRSheCrGeJ9z3\n4iFItFZMnodQMd3awATGTwy+24i8lrPZKcbEZrfRMXqsbWFcVU2kuki/f2fb\nl060mzjbfhZco+vCiwaqdBZre4yAunUtUbfGdnlWXZo/A9GYhjbFdObJO4vw\nbcmDVBEU3M49bjxC8C6WOWCr7aNM00cbrbUXwWAYbfNElLn10WHE3iQ9EsTt\nj7EiKXcYnMvdEWk8Cgslblre6ydHqRFrkJhPlNTTTHImLRTaEB67XlvsYpCc\nZxne\r\n=nY1w\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBpF26JDhG/6a60U0gTy01jSvN4nVBh/X++sMTxbZoFzAiEAzUy6U2Cs9tL/uNaz6xmnGPHIp/MfsP6hs86ccdggdHY="}]},"maintainers":[{"name":"jdecroock","email":"decroockjovi@gmail.com"},{"name":"solarliner","email":"solarliner@gmail.com"},{"name":"marvinhagemeister","email":"marvin@marvinhagemeister.de"},{"name":"harmony","email":"npm.leah@hrmny.sh"},{"name":"prateekbh","email":"prateek89born@gmail.com"},{"name":"reznord","email":"allamsetty.anup@gmail.com"},{"name":"preactjs","email":"hello@preactjs.com"},{"name":"developit","email":"jason@developit.ca"},{"name":"lukeed","email":"luke@lukeed.com"}],"_npmUser":{"name":"marvinhagemeister","email":"marvin@marvinhagemeister.de"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/preact-render-to-string_5.1.11_1603311763874_0.591393992494053"},"_hasShrinkwrap":false},"5.1.12":{"name":"preact-render-to-string","amdName":"preactRenderToString","version":"5.1.12","description":"Render JSX to an HTML string, with support for Preact components.","main":"dist/index.js","umd:main":"dist/index.js","module":"dist/index.module.js","jsnext:main":"dist/index.module.js","exports":{".":{"import":"./dist/index.mjs","browser":"./dist/index.module.js","require":"./dist/index.js"},"./jsx":{"import":"./dist/jsx.mjs","browser":"./dist/jsx.module.js","require":"./dist/jsx.js"},"./package.json":"./package.json","./":"./"},"scripts":{"build":"npm run -s transpile && npm run -s transpile:jsx && npm run -s copy-typescript-definition","postbuild":"node ./config/node-13-exports.js","transpile":"microbundle src/index.js -f es,umd --target web --external preact","transpile:jsx":"microbundle src/jsx.js -o dist/jsx.js --target web --external none && microbundle dist/jsx.js -o dist/jsx.js -f cjs","copy-typescript-definition":"copyfiles -f src/*.d.ts dist","test":"eslint src test && tsc && npm run test:mocha","test:mocha":"mocha -r babel-core/register test/**/*.js","format":"prettier src/**/*.{d.ts,js} test/**/*.js --write","prepublishOnly":"npm run build","release":"npm run build && git commit -am $npm_package_version && git tag $npm_package_version && git push && git push --tags && npm publish"},"keywords":["preact","render","universal","isomorphic"],"eslintConfig":{"extends":"developit","rules":{"react/prefer-stateless-function":0,"react/jsx-no-bind":0,"react/no-danger":0,"jest/valid-expect":0,"new-cap":0,"curly":"off","brace-style":"off","indent":"off"},"settings":{"react":{"version":"16.8"}}},"babel":{"presets":["env"],"plugins":[["transform-react-jsx",{"pragma":"h"}],"transform-object-rest-spread"]},"author":{"name":"Jason Miller","email":"jason@developit.ca"},"license":"MIT","typings":"src/index.d.ts","repository":{"type":"git","url":"git+https://github.com/developit/preact-render-to-string.git"},"bugs":{"url":"https://github.com/developit/preact-render-to-string/issues"},"homepage":"https://github.com/developit/preact-render-to-string","peerDependencies":{"preact":">=10"},"devDependencies":{"babel-plugin-transform-object-rest-spread":"^6.26.0","babel-plugin-transform-react-jsx":"^6.24.1","babel-preset-env":"^1.7.0","babel-register":"^6.26.0","chai":"^3.5.0","copyfiles":"^1.2.0","eslint":"^4.19.1","eslint-config-developit":"^1.1.1","husky":"^4.3.0","lint-staged":"^10.4.0","microbundle":"^0.6.0","mocha":"^5.2.0","npm-merge-driver-install":"^1.1.1","preact":"^10.5.7","prettier":"^2.1.2","sinon":"^1.17.5","sinon-chai":"^2.8.0","typescript":"^3.4.1"},"dependencies":{"pretty-format":"^3.8.0"},"prettier":{"singleQuote":true,"trailingComma":"none","useTabs":true,"tabWidth":2},"lint-staged":{"**/*.{js,jsx,ts,tsx,yml}":["prettier --write"]},"husky":{"hooks":{"pre-commit":"lint-staged"}},"gitHead":"8be957a05c3bea7465c9e38252117e1def2c843b","_id":"preact-render-to-string@5.1.12","_nodeVersion":"14.13.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-nXVCOpvepSk9AfPwqS08rf9NDOCs8eeYYlG+7tE85iP5jVyjz+aYb1BYaP5SPdfVWVrzI9L5NzxozUvKaD96tA==","shasum":"3d258a177ef8947f768dd0f2c56629e7fda2dc39","tarball":"http://localhost:4545/npm/registry/preact-render-to-string/preact-render-to-string-5.1.12.tgz","fileCount":23,"unpackedSize":245023,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfsDnsCRA9TVsSAnZWagAA+iEP/AtJtNiDOgvRe07dk0hG\nNVfEaSgkjgci+3QoMc6fv29H14SbbqRbgK6z1GyjGwScUmk7ll7ZKswFBiun\nuKTE3eykxTJdRfV7WxehcET443ec4lzL8D8VKcITKn9WZMCrUGrty8G243qm\ng+kfP8gwJdgbTXWCj7NxdyulcbtfIEWdEV6wconWq1JI62IN9PAMYUbL6WL7\nlgXZaQ9KYG7LBm/Bqk0hHOjad2YioZusLM+QQw3uXt3/IZGZfc1zEHgM9zXW\nz2Colli2OkacLF9GzOIkGtU9ZkP5FwfFYhq1L2ekue6/zeeV16vnvyb+1TDn\nlnwtCU2GV8x6K4WyzkhGX6C1kdMIttnbI9ukif23GC4Dq+uCtDL8CBTj5xXJ\n5wKSnyGHkoBNskKWwCPVBPX4ZxujGkB2zvHLC8151IpWz+MDR7/5qlV20yhR\nS8+m/fbgB2mrFqta/GJeFlIwnLKPAZHMpmDaGxVjVAFNEmpyQohcm5gEnZjR\naU3IiMgjU8lSfMIUMXmJhKEz/G0HkuRoikpPA37yVG5mNeTa1f1VdNZORxBw\nYRGY2Rf1h727IZfaIS7cCUd807yG0oB+RfP1qO1+MLKGOnjwEe49hukXN4A9\nG1bJ8nXVizDeJd1J+cn/9A0wbhEgvOdyCt0EwjrCo5C0crx4x2HwtaGFb/UN\nfpQ6\r\n=70sa\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCCTD8cITg6ou/MUWZvZ6vWQueBb9LFQHPkXF+LvA5+eAIhAOYkrNp4D7P/0PjqDyYy/UFHAbeVp/eBqypH7+84dRKY"}]},"_npmUser":{"name":"marvinhagemeister","email":"marvin@marvinhagemeister.de"},"directories":{},"maintainers":[{"name":"jdecroock","email":"decroockjovi@gmail.com"},{"name":"solarliner","email":"solarliner@gmail.com"},{"name":"marvinhagemeister","email":"marvin@marvinhagemeister.de"},{"name":"harmony","email":"npm.leah@hrmny.sh"},{"name":"prateekbh","email":"prateek89born@gmail.com"},{"name":"reznord","email":"allamsetty.anup@gmail.com"},{"name":"preactjs","email":"hello@preactjs.com"},{"name":"developit","email":"jason@developit.ca"},{"name":"lukeed","email":"luke@lukeed.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/preact-render-to-string_5.1.12_1605384683626_0.6609639962232596"},"_hasShrinkwrap":false},"5.1.13":{"name":"preact-render-to-string","amdName":"preactRenderToString","version":"5.1.13","description":"Render JSX to an HTML string, with support for Preact components.","main":"dist/index.js","umd:main":"dist/index.js","module":"dist/index.module.js","jsnext:main":"dist/index.module.js","exports":{".":{"import":"./dist/index.mjs","browser":"./dist/index.module.js","require":"./dist/index.js"},"./jsx":{"import":"./dist/jsx.mjs","browser":"./dist/jsx.module.js","require":"./dist/jsx.js"},"./package.json":"./package.json","./":"./"},"scripts":{"build":"npm run -s transpile && npm run -s transpile:jsx && npm run -s copy-typescript-definition","postbuild":"node ./config/node-13-exports.js","transpile":"microbundle src/index.js -f es,umd --target web --external preact","transpile:jsx":"microbundle src/jsx.js -o dist/jsx.js --target web --external none && microbundle dist/jsx.js -o dist/jsx.js -f cjs","copy-typescript-definition":"copyfiles -f src/*.d.ts dist","test":"eslint src test && tsc && npm run test:mocha","test:mocha":"mocha -r @babel/register test/**/*.js","format":"prettier src/**/*.{d.ts,js} test/**/*.js --write","prepublishOnly":"npm run build","release":"npm run build && git commit -am $npm_package_version && git tag $npm_package_version && git push && git push --tags && npm publish"},"keywords":["preact","render","universal","isomorphic"],"eslintConfig":{"extends":"developit","rules":{"react/prefer-stateless-function":0,"react/jsx-no-bind":0,"react/no-danger":0,"jest/valid-expect":0,"new-cap":0,"curly":"off","brace-style":"off","indent":"off"},"settings":{"react":{"version":"16.8"}}},"babel":{"presets":["@babel/preset-env"],"plugins":[["@babel/plugin-transform-react-jsx",{"pragma":"h"}]]},"author":{"name":"Jason Miller","email":"jason@developit.ca"},"license":"MIT","typings":"src/index.d.ts","repository":{"type":"git","url":"git+https://github.com/developit/preact-render-to-string.git"},"bugs":{"url":"https://github.com/developit/preact-render-to-string/issues"},"homepage":"https://github.com/developit/preact-render-to-string","peerDependencies":{"preact":">=10"},"devDependencies":{"@babel/plugin-transform-react-jsx":"^7.12.12","@babel/preset-env":"^7.12.11","@babel/register":"^7.12.10","chai":"^4.2.0","copyfiles":"^2.4.1","eslint":"^7.16.0","eslint-config-developit":"^1.2.0","husky":"^4.3.6","lint-staged":"^10.5.3","microbundle":"^0.13.0","mocha":"^8.2.1","preact":"^10.5.7","prettier":"^2.2.1","sinon":"^9.2.2","sinon-chai":"^3.5.0","typescript":"^4.1.3"},"dependencies":{"pretty-format":"^3.8.0"},"prettier":{"singleQuote":true,"trailingComma":"none","useTabs":true,"tabWidth":2},"lint-staged":{"**/*.{js,jsx,ts,tsx,yml}":["prettier --write"]},"husky":{"hooks":{"pre-commit":"lint-staged"}},"gitHead":"742087f6baf03a3c42a0a9abaaafdb0e1b34fafd","_id":"preact-render-to-string@5.1.13","_nodeVersion":"15.10.0","_npmVersion":"7.6.1","dist":{"integrity":"sha512-DJFcsVXEotFE5gfjZtMTKB8SUj7cFpA4XIgv+VDoGWjkCU2eczrZbq4KUheIgh+U/a+XAE6wN8p6/eVrF/kyDg==","shasum":"3314f807e5c69925e0085ca30d29f0ba8b796eb0","tarball":"http://localhost:4545/npm/registry/preact-render-to-string/preact-render-to-string-5.1.13.tgz","fileCount":27,"unpackedSize":244712,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgRN7FCRA9TVsSAnZWagAA7EgQAIdhVmzlHoOTvF8wZGE2\ntqWjWU+vd6PEO/8wQAsB4LgUJsiON5Dqk2mfrSchyvlewjf4+uoRR+5gMXy9\nAOdHsJKu4cgRQ3n+tezEM0mUY14yEEq/U5VBQg5oC26Dkidcf1JZFGVJ4SvS\n7rK9B6ZVd92SgBqYyoTMG7Ls7bKubPvWohfo/bsJjs7o9wWBzjjrVbwIrVJI\nZnR8HoiOkk8KP9d5PoP5IrWZ4kA2RbGvKfZb7kjaouU4Lgp0rj2V5mII5+Pu\nDChhzcjtjRwBvLyJJVdGSxgUA/FLhVwNJCUee6bQ8ZvM0faEhWVQhDY8bU6W\n/VrizNUtlCiGPxx4U/QmToQkA9Oz71h8znjQ5DeSSCG1sI5kKqg0Pnb9+CUT\ntkctIBkjQlZ1g87cEwZ4EjFX5OCq5e8y47fzZqzWRPS18w2thq7KUh7gjCOT\nVJw2hDrwc611OGJ3Ph4YNGUknczyq2mdp2COo43GUcszN4oKDps3lp+r5f0q\nc09U3fWiavhCFLRC95vMk5lDCj/US6dAoSDjLWJWgDtGwE3gc7oKnKSY7p/P\nhNNuzW/75nftU+Tqr/KLZXma4sYLk+A5i317zv+d8HtUFzHbT8C7OSgq3nlr\nsNYh4jhNRfwhTNUxbNkPEcEGZp8+5fX2nCYxGAoSY/rvWfvXY789wj4Lg2rd\ngA2q\r\n=kRfi\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFQnSQbsV7bhr8xBjL1m05Dj2bxfIuIN4153Cs53bZekAiAZZBBiJYoLsRgqsPpsp8cdTSYKrkBcHEYi5kEeqcmGYQ=="}]},"_npmUser":{"name":"marvinhagemeister","email":"hello@marvinh.dev"},"directories":{},"maintainers":[{"name":"reznord","email":"allamsetty.anup@gmail.com"},{"name":"preactjs","email":"hello@preactjs.com"},{"name":"developit","email":"jason@developit.ca"},{"name":"lukeed","email":"luke@lukeed.com"},{"name":"prateekbh","email":"prateek89born@gmail.com"},{"name":"harmony","email":"npm.leah@hrmny.sh"},{"name":"marvinhagemeister","email":"hello@marvinh.dev"},{"name":"solarliner","email":"solarliner@gmail.com"},{"name":"jdecroock","email":"decroockjovi@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/preact-render-to-string_5.1.13_1615126212781_0.8042893043335331"},"_hasShrinkwrap":false},"5.1.14":{"name":"preact-render-to-string","amdName":"preactRenderToString","version":"5.1.14","description":"Render JSX to an HTML string, with support for Preact components.","main":"dist/index.js","umd:main":"dist/index.js","module":"dist/index.module.js","jsnext:main":"dist/index.module.js","exports":{".":{"import":"./dist/index.mjs","browser":"./dist/index.module.js","require":"./dist/index.js"},"./jsx":{"import":"./dist/jsx.mjs","browser":"./dist/jsx.module.js","require":"./dist/jsx.js"},"./package.json":"./package.json","./":"./"},"scripts":{"build":"npm run -s transpile && npm run -s transpile:jsx && npm run -s copy-typescript-definition","postbuild":"node ./config/node-13-exports.js && node ./config/node-commonjs.js","transpile":"microbundle src/index.js -f es,umd --target web --external preact","transpile:jsx":"microbundle src/jsx.js -o dist/jsx.js --target web --external none && microbundle dist/jsx.js -o dist/jsx.js -f cjs","copy-typescript-definition":"copyfiles -f src/*.d.ts dist","test":"eslint src test && tsc && npm run test:mocha","test:mocha":"mocha -r @babel/register test/**/*.js","format":"prettier src/**/*.{d.ts,js} test/**/*.js --write","prepublishOnly":"npm run build","release":"npm run build && git commit -am $npm_package_version && git tag $npm_package_version && git push && git push --tags && npm publish"},"keywords":["preact","render","universal","isomorphic"],"eslintConfig":{"extends":"developit","rules":{"react/prefer-stateless-function":0,"react/jsx-no-bind":0,"react/no-danger":0,"jest/valid-expect":0,"new-cap":0,"curly":"off","brace-style":"off","indent":"off"},"settings":{"react":{"version":"16.8"}}},"babel":{"presets":["@babel/preset-env"],"plugins":[["@babel/plugin-transform-react-jsx",{"pragma":"h"}]]},"author":{"name":"Jason Miller","email":"jason@developit.ca"},"license":"MIT","typings":"src/index.d.ts","repository":{"type":"git","url":"git+https://github.com/developit/preact-render-to-string.git"},"bugs":{"url":"https://github.com/developit/preact-render-to-string/issues"},"homepage":"https://github.com/developit/preact-render-to-string","peerDependencies":{"preact":">=10"},"devDependencies":{"@babel/plugin-transform-react-jsx":"^7.12.12","@babel/preset-env":"^7.12.11","@babel/register":"^7.12.10","chai":"^4.2.0","copyfiles":"^2.4.1","eslint":"^7.16.0","eslint-config-developit":"^1.2.0","husky":"^4.3.6","lint-staged":"^10.5.3","microbundle":"^0.13.0","mocha":"^8.2.1","preact":"^10.5.7","prettier":"^2.2.1","sinon":"^9.2.2","sinon-chai":"^3.5.0","typescript":"^4.1.3"},"dependencies":{"pretty-format":"^3.8.0"},"prettier":{"singleQuote":true,"trailingComma":"none","useTabs":true,"tabWidth":2},"lint-staged":{"**/*.{js,jsx,ts,tsx,yml}":["prettier --write"]},"husky":{"hooks":{"pre-commit":"lint-staged"}},"gitHead":"c035e863a79dbdab22758e39d663ee4db0027617","_id":"preact-render-to-string@5.1.14","_nodeVersion":"14.13.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-xG/spHMnDX1cOOetZiFhljtczYUXqBrhuB+C2H+V0y3fJX8TmZtMrC+5di70y0E9fWAWiQIO5VTCpSDLoRmhzg==","shasum":"4b01a9354be6a7d09a66707393bcf68ce3f72714","tarball":"http://localhost:4545/npm/registry/preact-render-to-string/preact-render-to-string-5.1.14.tgz","fileCount":32,"unpackedSize":282665,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgRd81CRA9TVsSAnZWagAA8v8QAI4WwVd1fD0xOGjiBZbm\nxm37JCzN5OH4j+M7gNKzNROE6HPoCf37MVgnjwp6OozEG0gm0AW1NjtkC8Gj\n++K+xuzthHIf8b2zYfTlfMKi0eWBwC9U70HEvEDqo2D7WfM4IkRK2CDt7PEb\nv4dO94rEQ0Rje2Ga2jLV8OqMMwiXKYvqeKHXI8UiLRq0ZFiTLHTGnA7wQADy\nX5nG3TRUu/EUnWZI+daLJnE9X97kl/2bEi16cssf20nPMk+UGhbferX7SUxI\nq7y4zrlipScujyD2ozlUk1OARjlL3TJk5VE+2S2si/S5UDpuy9LVR/yh7sf2\nBbT09X46i9XoEp2zK0dTFKnOxF+muazkYOg9huT/MPxhgXI54xY4qPuuPnK8\nYWgWJWO0qXmuAkSlIW2S8bqKJQLllWWmZcYYXipqmnwT8U4inF6PxKFpPwHb\nDMXi4l4fKY9W7WuAth5qwBGRhatGzllhk7/IoydBstc9uyUY+HtJJ1MQlUxr\nF/ogOb7MQ9Qx7sd25XfzkFHx62cEmlYTpTx0tk8EXNazNGlCuHLdceQid4xk\n0Yxoqg0bpyJz4R0+vXU3D0W2a0rJ16qsawvm9WyIiEVF2jul/KHMt1XcDY6i\nbtmkSj3SRPp15acbdBROlInq55bPUPl15IPOrK5kU+CYxZ34Pw/9Fbn8uv9+\nPyS6\r\n=fNGv\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCo/Am1944PtnP7OJD4FRVAw72fzYc9s5QzI3E/kzC6HQIhALSiQZT4V/EiWWLXJ2xX7cD0pDYhLSI9LBGL2BcSWlqC"}]},"_npmUser":{"name":"marvinhagemeister","email":"hello@marvinh.dev"},"directories":{},"maintainers":[{"name":"reznord","email":"allamsetty.anup@gmail.com"},{"name":"preactjs","email":"hello@preactjs.com"},{"name":"developit","email":"jason@developit.ca"},{"name":"lukeed","email":"luke@lukeed.com"},{"name":"prateekbh","email":"prateek89born@gmail.com"},{"name":"harmony","email":"npm.leah@hrmny.sh"},{"name":"marvinhagemeister","email":"hello@marvinh.dev"},{"name":"solarliner","email":"solarliner@gmail.com"},{"name":"jdecroock","email":"decroockjovi@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/preact-render-to-string_5.1.14_1615191861271_0.2325125310621492"},"_hasShrinkwrap":false},"5.1.15":{"name":"preact-render-to-string","amdName":"preactRenderToString","version":"5.1.15","description":"Render JSX to an HTML string, with support for Preact components.","main":"dist/index.js","umd:main":"dist/index.js","module":"dist/index.module.js","jsnext:main":"dist/index.module.js","exports":{".":{"import":"./dist/index.mjs","browser":"./dist/index.module.js","require":"./dist/index.js"},"./jsx":{"import":"./dist/jsx.mjs","browser":"./dist/jsx.module.js","require":"./dist/jsx.js"},"./package.json":"./package.json","./":"./"},"scripts":{"bench":"node -r @babel/register benchmarks index.js","build":"npm run -s transpile && npm run -s transpile:jsx && npm run -s copy-typescript-definition","postbuild":"node ./config/node-13-exports.js && node ./config/node-commonjs.js","transpile":"microbundle src/index.js -f es,umd --target web --external preact","transpile:jsx":"microbundle src/jsx.js -o dist/jsx.js --target web --external none && microbundle dist/jsx.js -o dist/jsx.js -f cjs","copy-typescript-definition":"copyfiles -f src/*.d.ts dist","test":"eslint src test && tsc && npm run test:mocha","test:mocha":"mocha -r @babel/register test/**/*.js","format":"prettier src/**/*.{d.ts,js} test/**/*.js --write","prepublishOnly":"npm run build","release":"npm run build && git commit -am $npm_package_version && git tag $npm_package_version && git push && git push --tags && npm publish"},"keywords":["preact","render","universal","isomorphic"],"eslintConfig":{"extends":"developit","rules":{"react/prefer-stateless-function":0,"react/jsx-no-bind":0,"react/no-danger":0,"jest/valid-expect":0,"new-cap":0,"curly":"off","brace-style":"off","indent":"off"},"settings":{"react":{"version":"16.8"}}},"babel":{"presets":["@babel/preset-env"],"plugins":[["@babel/plugin-transform-react-jsx",{"pragma":"h"}]]},"author":{"name":"Jason Miller","email":"jason@developit.ca"},"license":"MIT","typings":"src/index.d.ts","repository":{"type":"git","url":"git+https://github.com/developit/preact-render-to-string.git"},"bugs":{"url":"https://github.com/developit/preact-render-to-string/issues"},"homepage":"https://github.com/developit/preact-render-to-string","peerDependencies":{"preact":">=10"},"devDependencies":{"@babel/plugin-transform-react-jsx":"^7.12.12","@babel/preset-env":"^7.12.11","@babel/register":"^7.12.10","benchmarkjs-pretty":"^2.0.1","chai":"^4.2.0","copyfiles":"^2.4.1","eslint":"^7.16.0","eslint-config-developit":"^1.2.0","husky":"^4.3.6","lint-staged":"^10.5.3","microbundle":"^0.13.0","mocha":"^8.2.1","preact":"^10.5.7","prettier":"^2.2.1","sinon":"^9.2.2","sinon-chai":"^3.5.0","typescript":"^4.1.3"},"dependencies":{"pretty-format":"^3.8.0"},"prettier":{"singleQuote":true,"trailingComma":"none","useTabs":true,"tabWidth":2},"lint-staged":{"**/*.{js,jsx,ts,tsx,yml}":["prettier --write"]},"husky":{"hooks":{"pre-commit":"lint-staged"}},"gitHead":"9a5e74818bc96caf134a8b250cc9af9ab9e1bc14","_id":"preact-render-to-string@5.1.15","_nodeVersion":"15.10.0","_npmVersion":"7.6.1","dist":{"integrity":"sha512-xjtHq/RQGUISoptT24qFiEUp+lJJ+QlxeO69i9nJShPWQm8RY5syqi8sycY68MhfV8oGBx/rRq8LQ8rPp2ESZA==","shasum":"9d1dadcd5d7b403015b11a5a1fdb4885c3649a30","tarball":"http://localhost:4545/npm/registry/preact-render-to-string/preact-render-to-string-5.1.15.tgz","fileCount":31,"unpackedSize":281995,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgSJ1rCRA9TVsSAnZWagAAuagP/1NP+8ys+I3BlPtOaf+u\nZDA6Hsb8cJKdgLXNn3yMjBisPTDGXWTr0aRqNEFP9Yh5xYiJ+oNNpzITvxso\nappdl9vdruolhggqOb6qlUo3dT9/t1T7FhKdiebAT6sEfN/q+Sk7oCoV4SMZ\nWElm9TZhEUIoOm76jTwyuj5vYVKah75bVwta7HJl+YUQ/xszdcOCanO4xb0u\n5+c192L+XDwaZnIxIFCVNKwp1UOwf5QBabJI/vQF7HNTqW+iIKUgy1Pqb7tr\neONGU2KV/0BaVF+yYF8eEM7FNzatHFMPsGQsDwDPucS8Rd+6IwUU6hB4Lria\nUG/OvL5QUDoi8HYfIpiWrD4dXzUNCQaMJxlRjg9jgtwwHZAyAIVaJgXXRlNW\nUR5qsgOLN+4AWqJvPWzYZgbgts/a4svKo6CFBM6Ixv0tAAF7kXNQwqIQR6il\nhUH5ndgyy9oVwu/3KWWyYI8QMv5EHn19k3+b+R8w7r/5c/0Qa6ciJ/3qLWmY\nS+q59WhcNLa0dR28XJhlNA+rE1Amgpxnmdc4N+4VB3pIGysKC+TLHbOnsDEy\npMHbkgBF8xx90HK0W2DCWlLGSM1uibl4R+mR9S5gaP9LtXpXfmG8gFw8sVqv\n1n8S8lk69hGtYp9CwrIJIUuB8i/1fwRuPT3fHHCUZc19N4DvT/Ow59/pvqtp\nzCQx\r\n=1+t3\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCID3HcXqzr5nd0RbEKXlBof8TRRza34oetGJEtLGExOrkAiEAvS/BBo6sae5z9hA9EGdy7aBE8PPMCEAnd17ze8fsUdo="}]},"_npmUser":{"name":"marvinhagemeister","email":"hello@marvinh.dev"},"directories":{},"maintainers":[{"name":"reznord","email":"allamsetty.anup@gmail.com"},{"name":"preactjs","email":"hello@preactjs.com"},{"name":"developit","email":"jason@developit.ca"},{"name":"lukeed","email":"luke@lukeed.com"},{"name":"prateekbh","email":"prateek89born@gmail.com"},{"name":"harmony","email":"npm.leah@hrmny.sh"},{"name":"marvinhagemeister","email":"hello@marvinh.dev"},{"name":"solarliner","email":"solarliner@gmail.com"},{"name":"jdecroock","email":"decroockjovi@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/preact-render-to-string_5.1.15_1615371626754_0.41025866847543524"},"_hasShrinkwrap":false},"5.1.16":{"name":"preact-render-to-string","amdName":"preactRenderToString","version":"5.1.16","description":"Render JSX to an HTML string, with support for Preact components.","main":"dist/index.js","umd:main":"dist/index.js","module":"dist/index.module.js","jsnext:main":"dist/index.module.js","exports":{".":{"import":"./dist/index.mjs","browser":"./dist/index.module.js","require":"./dist/index.js"},"./jsx":{"import":"./dist/jsx.mjs","browser":"./dist/jsx.module.js","require":"./dist/jsx.js"},"./package.json":"./package.json","./":"./"},"scripts":{"bench":"node -r @babel/register benchmarks index.js","build":"npm run -s transpile && npm run -s transpile:jsx && npm run -s copy-typescript-definition","postbuild":"node ./config/node-13-exports.js && node ./config/node-commonjs.js","transpile":"microbundle src/index.js -f es,umd --target web --external preact","transpile:jsx":"microbundle src/jsx.js -o dist/jsx.js --target web --external none && microbundle dist/jsx.js -o dist/jsx.js -f cjs","copy-typescript-definition":"copyfiles -f src/*.d.ts dist","test":"eslint src test && tsc && npm run test:mocha","test:mocha":"mocha -r @babel/register test/**/*.js","format":"prettier src/**/*.{d.ts,js} test/**/*.js --write","prepublishOnly":"npm run build","release":"npm run build && git commit -am $npm_package_version && git tag $npm_package_version && git push && git push --tags && npm publish"},"keywords":["preact","render","universal","isomorphic"],"eslintConfig":{"extends":"developit","rules":{"react/prefer-stateless-function":0,"react/jsx-no-bind":0,"react/no-danger":0,"jest/valid-expect":0,"new-cap":0,"curly":"off","brace-style":"off","indent":"off"},"settings":{"react":{"version":"16.8"}}},"babel":{"presets":["@babel/preset-env"],"plugins":[["@babel/plugin-transform-react-jsx",{"pragma":"h"}]]},"author":{"name":"Jason Miller","email":"jason@developit.ca"},"license":"MIT","typings":"src/index.d.ts","repository":{"type":"git","url":"git+https://github.com/developit/preact-render-to-string.git"},"bugs":{"url":"https://github.com/developit/preact-render-to-string/issues"},"homepage":"https://github.com/developit/preact-render-to-string","peerDependencies":{"preact":">=10"},"devDependencies":{"@babel/plugin-transform-react-jsx":"^7.12.12","@babel/preset-env":"^7.12.11","@babel/register":"^7.12.10","benchmarkjs-pretty":"^2.0.1","chai":"^4.2.0","copyfiles":"^2.4.1","eslint":"^7.16.0","eslint-config-developit":"^1.2.0","husky":"^4.3.6","lint-staged":"^10.5.3","microbundle":"^0.13.0","mocha":"^8.2.1","preact":"^10.5.7","prettier":"^2.2.1","sinon":"^9.2.2","sinon-chai":"^3.5.0","typescript":"^4.1.3"},"dependencies":{"pretty-format":"^3.8.0"},"prettier":{"singleQuote":true,"trailingComma":"none","useTabs":true,"tabWidth":2},"lint-staged":{"**/*.{js,jsx,ts,tsx,yml}":["prettier --write"]},"husky":{"hooks":{"pre-commit":"lint-staged"}},"gitHead":"2a6f332fe2d7e30ec0e5121bfa62bfb9ca728763","_id":"preact-render-to-string@5.1.16","_nodeVersion":"15.10.0","_npmVersion":"7.6.1","dist":{"integrity":"sha512-HvO3W29Sziz9r5FZGwl2e34XJKzyRLvjhouv3cpkCGszNPdnvkO8p4B6CBpe0MT/tzR+QVbmsAKLrMK222UXew==","shasum":"379db30e51916d45a67c00163ef812ad376aa721","tarball":"http://localhost:4545/npm/registry/preact-render-to-string/preact-render-to-string-5.1.16.tgz","fileCount":31,"unpackedSize":278544,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgSmkkCRA9TVsSAnZWagAACqIP/2aymHaEWOL2SkED4j19\nwHe/fhs+p0QRYUAsJrMgxi1lJNyuu4EX7X1eFILaPp+51TuC+xgPoy/4Lrfj\nlQunrjczvnZ1DJgNvEtW3XPriTulUk/TbZuV8XApJb9u7KztXBiTnQvPbq9C\nvvDFTKmkHmcEbh4k2f+llTGVD6AvdRoK5P+2vF+okuKnG39EeewGyWzz97y/\nKvEqxJMd79+2QsdbMtWN6Ja4S6NE+JS9QZXeHRWrlNP4ZfDegXUWylrewKni\nR0JGgv8yDiPDxoGyvyo+12EqrvamSp9ha9Pk8SJaItFTmZkjDgo20K8WSZrY\nQYDFLU22u+rVbV2VzK6LuCU6hg4xy355nO+hRlkrKRKiTIh33vzRgCD0yBHE\nLqo7zWojbyJw0MuK+qNpEHF2FKQ/GvWpGvCBddNpeg2fOcCQgHxB/BTWGXEK\n0sO0bOuBmiIDKlSCk5CI8h4IdsbuJ6mst27j30JJqfkMxuShPE2WbF5920Zb\nQttXuOrvwNr/WPQ6SNern/Y0ldIj+7jEMzWDhHezHaO+e0q+Pvu8thJZoESl\nThZDswW0deTKUDTIqy1nzGuyB5OKvs+UPPcGEYlqFJ7gSqRgwF+CRF7vDfuO\ndJhvQsJo+6GkUKoatZ1kaiRhR2HM9Lm2cfq+dttkst0jlyW9kyD0FbCGu1x9\nrkK8\r\n=pLao\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIH151o+1eR/W0xkVkDJ5M6SgenN5frP/OKwDhxNE8QyiAiEA7dEnkhn8OVemYd4x8Fa4/G6xFNu/mokSvKVv+CzpEio="}]},"_npmUser":{"name":"marvinhagemeister","email":"hello@marvinh.dev"},"directories":{},"maintainers":[{"name":"reznord","email":"allamsetty.anup@gmail.com"},{"name":"preactjs","email":"hello@preactjs.com"},{"name":"developit","email":"jason@developit.ca"},{"name":"lukeed","email":"luke@lukeed.com"},{"name":"prateekbh","email":"prateek89born@gmail.com"},{"name":"harmony","email":"npm.leah@hrmny.sh"},{"name":"marvinhagemeister","email":"hello@marvinh.dev"},{"name":"solarliner","email":"solarliner@gmail.com"},{"name":"jdecroock","email":"decroockjovi@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/preact-render-to-string_5.1.16_1615489316312_0.5556560371907111"},"_hasShrinkwrap":false},"5.1.17":{"name":"preact-render-to-string","amdName":"preactRenderToString","version":"5.1.17","description":"Render JSX to an HTML string, with support for Preact components.","main":"dist/index.js","umd:main":"dist/index.js","module":"dist/index.module.js","jsnext:main":"dist/index.module.js","exports":{".":{"import":"./dist/index.mjs","browser":"./dist/index.module.js","require":"./dist/index.js"},"./jsx":{"import":"./dist/jsx.mjs","browser":"./dist/jsx.module.js","require":"./dist/jsx.js"},"./package.json":"./package.json","./":"./"},"scripts":{"bench":"BABEL_ENV=test node -r @babel/register benchmarks index.js","bench:v8":"BABEL_ENV=test microbundle benchmarks/index.js -f modern --alias benchmarkjs-pretty=benchmarks/lib/benchmark-lite.js --external none --target node --no-compress --no-sourcemap --raw -o benchmarks/.v8.js && v8 --module benchmarks/.v8.modern.js","build":"npm run -s transpile && npm run -s transpile:jsx && npm run -s copy-typescript-definition","postbuild":"node ./config/node-13-exports.js && node ./config/node-commonjs.js","transpile":"microbundle src/index.js -f es,umd --target web --external preact","transpile:jsx":"microbundle src/jsx.js -o dist/jsx.js --target web --external none && microbundle dist/jsx.js -o dist/jsx.js -f cjs","copy-typescript-definition":"copyfiles -f src/*.d.ts dist","test":"eslint src test && tsc && npm run test:mocha && npm run bench","test:mocha":"BABEL_ENV=test mocha -r @babel/register -r test/setup.js test/**/*.test.js","format":"prettier src/**/*.{d.ts,js} test/**/*.js --write","prepublishOnly":"npm run build","release":"npm run build && git commit -am $npm_package_version && git tag $npm_package_version && git push && git push --tags && npm publish"},"keywords":["preact","render","universal","isomorphic"],"eslintConfig":{"extends":"developit","rules":{"react/prefer-stateless-function":0,"react/jsx-no-bind":0,"react/no-danger":0,"jest/valid-expect":0,"new-cap":0,"curly":"off","brace-style":"off","indent":"off"},"settings":{"react":{"version":"16.8"}}},"babel":{"env":{"test":{"presets":[["@babel/preset-env",{"targets":{"node":true}}]],"plugins":[["@babel/plugin-transform-react-jsx",{"pragma":"h"}]]}}},"author":{"name":"Jason Miller","email":"jason@developit.ca"},"license":"MIT","typings":"src/index.d.ts","repository":{"type":"git","url":"git+https://github.com/developit/preact-render-to-string.git"},"bugs":{"url":"https://github.com/developit/preact-render-to-string/issues"},"homepage":"https://github.com/developit/preact-render-to-string","peerDependencies":{"preact":">=10"},"devDependencies":{"@babel/plugin-transform-react-jsx":"^7.12.12","@babel/preset-env":"^7.12.11","@babel/register":"^7.12.10","benchmarkjs-pretty":"^2.0.1","chai":"^4.2.0","copyfiles":"^2.4.1","eslint":"^7.16.0","eslint-config-developit":"^1.2.0","husky":"^4.3.6","lint-staged":"^10.5.3","microbundle":"^0.13.0","mocha":"^8.2.1","preact":"^10.5.7","prettier":"^2.2.1","sinon":"^9.2.2","sinon-chai":"^3.5.0","typescript":"^4.1.3"},"dependencies":{"pretty-format":"^3.8.0"},"prettier":{"singleQuote":true,"trailingComma":"none","useTabs":true,"tabWidth":2},"lint-staged":{"**/*.{js,jsx,ts,tsx,yml}":["prettier --write"]},"husky":{"hooks":{"pre-commit":"lint-staged"}},"gitHead":"74a851ffb48fece7536cde41fd3bc202cd63f415","_id":"preact-render-to-string@5.1.17","_nodeVersion":"15.12.0","_npmVersion":"7.6.3","dist":{"integrity":"sha512-njguygfbkOBSTG7O9L2pwXfLqmeBHCP6MKOUAus+tJNqBUbmYY1mOUK2MtkmIwjddBafafo48ylOFvXVQKushA==","shasum":"4ae85520928165cb725acba747017d1d1c77c636","tarball":"http://localhost:4545/npm/registry/preact-render-to-string/preact-render-to-string-5.1.17.tgz","fileCount":31,"unpackedSize":276259,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgYE39CRA9TVsSAnZWagAAfwwQAKQKQKf6CC4PM57Bjm/m\nHJl9SAcpYZMj4wQHw9wCLS1AKV1fX/14WA4Ll6QGXV/688wYeOVJZoVKpyK8\nRl+yt9TtSZbl5WLSa8mqrJdMgoCz359DMROUQbwuyhyigCGK14lC01xuqMES\nj3vxON7Q4FRYOKm/A3iVOlSjC+dNVJ0cPW3boL1uN1yUDUK4SpHjiPe8dsYF\nQLg7QJbWm/geRRSqwvVLLYxZL7yeVn0in8ZRXS4jweGegacqw8KY8VB5XABb\ne7li4se4gvN/jmLCKFk3j0bReFpgm0hExlZkeM6U+djDfy6ufOsRwR0EpDM5\nfzq9MwPfBi6eflil5LbaNbAulJ77eScVHPoBOjAn4Gg9bE3hb7H4VARi5hYL\na1AoXgo0kupfUlfnY8Fjavp73RUGFH3+qjStNpy9Hwgi6nAcuud2cuNuO2bw\nRp7cYTJvn/Hc+UUWYXhWyB/ylwzxmFsDEQl6ZkM6P3indl6FWhF78FwV3Ji/\nBOJlwEDnvI7GJumXPXMhAc3gzrFijN6jWA6bU1M3p1lMpxsOHSQAVEa7cHrB\ndFFLA7gTnHHIP8cL8avwDXhBCpak7ggOgFyu9ulhLrq9RjbRBPEsVEQflURm\nm7lfunWL4ezYoxu3GzdU1viga8gM65/CfiixzJtla2Zly99PjOXeVXB2jKqU\nMvIJ\r\n=BONO\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIH1/3rLmpBifKVOAVrzuXxAUaU7xvGc170mceSXxVV3MAiEA3mBp2bsIBNWOYIPfqSceqSnblYqkCIwYadfp2wO+wV4="}]},"_npmUser":{"name":"marvinhagemeister","email":"hello@marvinh.dev"},"directories":{},"maintainers":[{"name":"reznord","email":"allamsetty.anup@gmail.com"},{"name":"preactjs","email":"hello@preactjs.com"},{"name":"developit","email":"jason@developit.ca"},{"name":"lukeed","email":"luke@lukeed.com"},{"name":"prateekbh","email":"prateek89born@gmail.com"},{"name":"harmony","email":"npm.leah@hrmny.sh"},{"name":"marvinhagemeister","email":"hello@marvinh.dev"},{"name":"solarliner","email":"solarliner@gmail.com"},{"name":"jdecroock","email":"decroockjovi@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/preact-render-to-string_5.1.17_1616924156976_0.7972895702622527"},"_hasShrinkwrap":false},"5.1.18":{"name":"preact-render-to-string","amdName":"preactRenderToString","version":"5.1.18","description":"Render JSX to an HTML string, with support for Preact components.","main":"dist/index.js","umd:main":"dist/index.js","module":"dist/index.module.js","jsnext:main":"dist/index.module.js","exports":{".":{"import":"./dist/index.mjs","browser":"./dist/index.module.js","require":"./dist/index.js"},"./jsx":{"import":"./dist/jsx.mjs","browser":"./dist/jsx.module.js","require":"./dist/jsx.js"},"./package.json":"./package.json","./":"./"},"scripts":{"bench":"BABEL_ENV=test node -r @babel/register benchmarks index.js","bench:v8":"BABEL_ENV=test microbundle benchmarks/index.js -f modern --alias benchmarkjs-pretty=benchmarks/lib/benchmark-lite.js --external none --target node --no-compress --no-sourcemap --raw -o benchmarks/.v8.js && v8 --module benchmarks/.v8.modern.js","build":"npm run -s transpile && npm run -s transpile:jsx && npm run -s copy-typescript-definition","postbuild":"node ./config/node-13-exports.js && node ./config/node-commonjs.js","transpile":"microbundle src/index.js -f es,umd --target web --external preact","transpile:jsx":"microbundle src/jsx.js -o dist/jsx.js --target web --external none && microbundle dist/jsx.js -o dist/jsx.js -f cjs","copy-typescript-definition":"copyfiles -f src/*.d.ts dist","test":"eslint src test && tsc && npm run test:mocha && npm run bench","test:mocha":"BABEL_ENV=test mocha -r @babel/register -r test/setup.js test/**/*.test.js","format":"prettier src/**/*.{d.ts,js} test/**/*.js --write","prepublishOnly":"npm run build","release":"npm run build && git commit -am $npm_package_version && git tag $npm_package_version && git push && git push --tags && npm publish"},"keywords":["preact","render","universal","isomorphic"],"eslintConfig":{"extends":"developit","rules":{"react/prefer-stateless-function":0,"react/jsx-no-bind":0,"react/no-danger":0,"jest/valid-expect":0,"new-cap":0,"curly":"off","brace-style":"off","indent":"off"},"settings":{"react":{"version":"16.8"}}},"babel":{"env":{"test":{"presets":[["@babel/preset-env",{"targets":{"node":true}}]],"plugins":[["@babel/plugin-transform-react-jsx",{"pragma":"h"}]]}}},"author":{"name":"Jason Miller","email":"jason@developit.ca"},"license":"MIT","typings":"src/index.d.ts","repository":{"type":"git","url":"git+https://github.com/developit/preact-render-to-string.git"},"bugs":{"url":"https://github.com/developit/preact-render-to-string/issues"},"homepage":"https://github.com/developit/preact-render-to-string","peerDependencies":{"preact":">=10"},"devDependencies":{"@babel/plugin-transform-react-jsx":"^7.12.12","@babel/preset-env":"^7.12.11","@babel/register":"^7.12.10","benchmarkjs-pretty":"^2.0.1","chai":"^4.2.0","copyfiles":"^2.4.1","eslint":"^7.16.0","eslint-config-developit":"^1.2.0","husky":"^4.3.6","lint-staged":"^10.5.3","microbundle":"^0.13.0","mocha":"^8.2.1","preact":"^10.5.7","prettier":"^2.2.1","sinon":"^9.2.2","sinon-chai":"^3.5.0","typescript":"^4.1.3"},"dependencies":{"pretty-format":"^3.8.0"},"prettier":{"singleQuote":true,"trailingComma":"none","useTabs":true,"tabWidth":2},"lint-staged":{"**/*.{js,jsx,ts,tsx,yml}":["prettier --write"]},"husky":{"hooks":{"pre-commit":"lint-staged"}},"gitHead":"1a3ebd793310ef53536722ec8c405f72c4f17194","_id":"preact-render-to-string@5.1.18","_nodeVersion":"15.12.0","_npmVersion":"7.6.3","dist":{"integrity":"sha512-jTL6iTZeheYOhb54r7KuyrNCf33lc+Z52Wos5P1z2wGZ/dREfhBVwrK1qGOrl4fboBN1KxC1lxhBchDHNZr8Uw==","shasum":"c57fe62642981db47e95edda2354873e6b799a1a","tarball":"http://localhost:4545/npm/registry/preact-render-to-string/preact-render-to-string-5.1.18.tgz","fileCount":31,"unpackedSize":276606,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgYmtzCRA9TVsSAnZWagAAnscP/Ryq3Gu06asSHv3vQM+Y\nB10rGtBg7et0Qsnj85QGOEvyPHeClzg1RyFWDdmDWHgkiDXtnqgQC3Vg0Md0\noli+Qg4mbAeSXQe1+N6G5zhMQa2XXrjwRv0vgbqW9pd2FWrmNmItw0Z3zX8N\nlEYn6NsqW1i/u1e3KkY8UYE0uiCrZlDr3I97eOv10pQUuxNIa7tXatKzS8lg\nUdAvGxROuH3o/Tb6A2hFW/KXkj/WeBQ4Y7zU3XvJH7CXqMH6GlOjRffKaPlC\ngW2xdQuXtfOHxe2jlt/U6n50ZjI6aIPleC4O1yyLMdV6dVQ8ZS/k6Bw3veik\nZsXC6s4Pcf8yd0t7EFRv7aFszMHV89CZtoThjCqXiSEOHSUAnjshhCVwnqVR\nFUr56OlkF4eJud3DT3AhpVunzutCLMX5dIym4hiIN00/bp8z2+Q3S+FJjX/F\nZXLHo3khAS8Hvcdm2BiVuchYCcm6PbyWsKXGGKOskq5Wc5eRpI/UrxpP/ZGE\nXsRpe9JVuDJPfhN2ysFKeI94FOwEqG8XYSzWVxqP+y92ZHtmMpH5e30RZAk/\nQHQXshQkFAI6ZyCsQxoPYVOCNZ5UMeEPv8UDwjFEM7E3nNwz69XDHbbg3plr\n1vXCLvICR1YEU7Jrio3u/ww8Rs0nYAwfzsUn/wtbuj5FiNl+e17IufuUkt2O\n8alm\r\n=M8oD\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCCeh7M2IkyZ6zoPBqBhI65nbaR3/FrllUwNEpj9qi81AIhANoGiSyFEjt4kn9dJ9aiuAoOFkYnyxqdm6umj6R2h+0m"}]},"_npmUser":{"name":"developit","email":"jason@developit.ca"},"directories":{},"maintainers":[{"name":"reznord","email":"allamsetty.anup@gmail.com"},{"name":"preactjs","email":"hello@preactjs.com"},{"name":"developit","email":"jason@developit.ca"},{"name":"lukeed","email":"luke@lukeed.com"},{"name":"prateekbh","email":"prateek89born@gmail.com"},{"name":"harmony","email":"npm.leah@hrmny.sh"},{"name":"marvinhagemeister","email":"hello@marvinh.dev"},{"name":"solarliner","email":"solarliner@gmail.com"},{"name":"jdecroock","email":"decroockjovi@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/preact-render-to-string_5.1.18_1617062770757_0.5970383349923012"},"_hasShrinkwrap":false},"5.1.19":{"name":"preact-render-to-string","amdName":"preactRenderToString","version":"5.1.19","description":"Render JSX to an HTML string, with support for Preact components.","main":"dist/index.js","umd:main":"dist/index.js","module":"dist/index.module.js","jsnext:main":"dist/index.module.js","exports":{".":{"import":"./dist/index.mjs","browser":"./dist/index.module.js","require":"./dist/index.js"},"./jsx":{"import":"./dist/jsx.mjs","browser":"./dist/jsx.module.js","require":"./dist/jsx.js"},"./package.json":"./package.json","./":"./"},"scripts":{"bench":"BABEL_ENV=test node -r @babel/register benchmarks index.js","bench:v8":"BABEL_ENV=test microbundle benchmarks/index.js -f modern --alias benchmarkjs-pretty=benchmarks/lib/benchmark-lite.js --external none --target node --no-compress --no-sourcemap --raw -o benchmarks/.v8.js && v8 --module benchmarks/.v8.modern.js","build":"npm run -s transpile && npm run -s transpile:jsx && npm run -s copy-typescript-definition","postbuild":"node ./config/node-13-exports.js && node ./config/node-commonjs.js","transpile":"microbundle src/index.js -f es,umd --target web --external preact","transpile:jsx":"microbundle src/jsx.js -o dist/jsx.js --target web --external preact && microbundle dist/jsx.js -o dist/jsx.js -f cjs --external preact","copy-typescript-definition":"copyfiles -f src/*.d.ts dist","test":"eslint src test && tsc && npm run test:mocha && npm run bench","test:mocha":"BABEL_ENV=test mocha -r @babel/register -r test/setup.js test/**/*.test.js","format":"prettier src/**/*.{d.ts,js} test/**/*.js --write","prepublishOnly":"npm run build","release":"npm run build && git commit -am $npm_package_version && git tag $npm_package_version && git push && git push --tags && npm publish"},"keywords":["preact","render","universal","isomorphic"],"eslintConfig":{"extends":"developit","rules":{"react/prefer-stateless-function":0,"react/jsx-no-bind":0,"react/no-danger":0,"jest/valid-expect":0,"new-cap":0,"curly":"off","brace-style":"off","indent":"off"},"settings":{"react":{"version":"16.8"}}},"babel":{"env":{"test":{"presets":[["@babel/preset-env",{"targets":{"node":true}}]],"plugins":[["@babel/plugin-transform-react-jsx",{"pragma":"h"}]]}}},"author":{"name":"Jason Miller","email":"jason@developit.ca"},"license":"MIT","typings":"src/index.d.ts","repository":{"type":"git","url":"git+https://github.com/developit/preact-render-to-string.git"},"bugs":{"url":"https://github.com/developit/preact-render-to-string/issues"},"homepage":"https://github.com/developit/preact-render-to-string","peerDependencies":{"preact":">=10"},"devDependencies":{"@babel/plugin-transform-react-jsx":"^7.12.12","@babel/preset-env":"^7.12.11","@babel/register":"^7.12.10","benchmarkjs-pretty":"^2.0.1","chai":"^4.2.0","copyfiles":"^2.4.1","eslint":"^7.16.0","eslint-config-developit":"^1.2.0","husky":"^4.3.6","lint-staged":"^10.5.3","microbundle":"^0.13.0","mocha":"^8.2.1","preact":"^10.5.7","prettier":"^2.2.1","sinon":"^9.2.2","sinon-chai":"^3.5.0","typescript":"^4.1.3"},"dependencies":{"pretty-format":"^3.8.0"},"prettier":{"singleQuote":true,"trailingComma":"none","useTabs":true,"tabWidth":2},"lint-staged":{"**/*.{js,jsx,ts,tsx,yml}":["prettier --write"]},"husky":{"hooks":{"pre-commit":"lint-staged"}},"gitHead":"c9bd4bb9100f4bbaa76006bd42be024204cb4cf2","_id":"preact-render-to-string@5.1.19","_nodeVersion":"15.12.0","_npmVersion":"7.6.3","dist":{"integrity":"sha512-bj8sn/oytIKO6RtOGSS/1+5CrQyRSC99eLUnEVbqUa6MzJX5dYh7wu9bmT0d6lm/Vea21k9KhCQwvr2sYN3rrQ==","shasum":"ffae7c3bd1680be5ecf5991d41fe3023b3051e0e","tarball":"http://localhost:4545/npm/registry/preact-render-to-string/preact-render-to-string-5.1.19.tgz","fileCount":31,"unpackedSize":252646,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgaurtCRA9TVsSAnZWagAADVAP/2NDDVrjN7KnZJ9lasB7\nJct+y0YtWD3ljPLLdmaJBIQ1LOu9vFfj1ZQo7ckUnzRwsNzHYLiNK93d787Y\nYLqdz9G9kIovPukzbCTEHeTHQya1vrMrCqAfzXu2BYTtECHVrTgIvVJa/7S7\nraLoYu4CsnvgQWt/XT/2kyiiUzxQtxfY+d2zav5i9JulcD8KMG/eg4alE/+2\nCsB0sjPOiILTKVuJ8L+v1N4u4o8donSjnFYQ9Kvf3bqbF1rOCWWpAfpz1ysR\nNwbDn24jX6BBzeP4IhWIbL3UXchih3bijZYHaumGUgUPgNI20CcGJPrHYr92\nlMaLSZfIXPFEHm1Ceff8GopA/BZhAKnW3RpE0kY1EC0mCkKKx9vb22CKZSF4\n3I2LoWYKuA9s5ZB69hEBzu9H2efuWXqzzGZWBTt22sUe95J85S1RkuMEbuxT\ngRi+Daux0i5F2ZBRhT9unqAu5k0yh7jqYsbOEjrz8ZgS5J5M4rLbQFue6LSc\ntkvJRqwnVrOximM3omatbUx8u+uxVTzSlAZ9f0y93YfJ7vzmGZd1ZoaSLvzQ\n1jKC8FJ+JJbQFbiApqQu0rzAPmXs4hHxtpnO7OHrW0ctzhgxeSp4dUEhjCfk\nug2aKwLo0PAX08WdF8vrMZLOabl7N9T98PtCQzj23xoKvTZtKJmkTYIhEPOU\nORsH\r\n=fR+c\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDAtSunCRkx2gDElAo4fDEmWDjgigRdEfz9e1Z45wMU0AiEA4IX8K9KmJDrYI4U2hP9bAPJ9D08aiM6gwqU3SpI9CR4="}]},"_npmUser":{"name":"marvinhagemeister","email":"hello@marvinh.dev"},"directories":{},"maintainers":[{"name":"reznord","email":"allamsetty.anup@gmail.com"},{"name":"preactjs","email":"hello@preactjs.com"},{"name":"developit","email":"jason@developit.ca"},{"name":"lukeed","email":"luke@lukeed.com"},{"name":"prateekbh","email":"prateek89born@gmail.com"},{"name":"harmony","email":"npm.leah@hrmny.sh"},{"name":"marvinhagemeister","email":"hello@marvinh.dev"},{"name":"solarliner","email":"solarliner@gmail.com"},{"name":"jdecroock","email":"decroockjovi@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/preact-render-to-string_5.1.19_1617619692760_0.7190066335924823"},"_hasShrinkwrap":false},"6.0.0-experimental.0":{"name":"preact-render-to-string","amdName":"preactRenderToString","version":"6.0.0-experimental.0","description":"Render JSX to an HTML string, with support for Preact components.","main":"dist/index.js","umd:main":"dist/index.js","module":"dist/index.module.js","jsnext:main":"dist/index.module.js","exports":{".":{"import":"./dist/index.mjs","browser":"./dist/index.module.js","require":"./dist/index.js"},"./jsx":{"import":"./dist/jsx.mjs","browser":"./dist/jsx.module.js","require":"./dist/jsx.js"},"./package.json":"./package.json","./":"./"},"scripts":{"bench":"BABEL_ENV=test node -r @babel/register benchmarks index.js","bench:v8":"BABEL_ENV=test microbundle benchmarks/index.js -f modern --alias benchmarkjs-pretty=benchmarks/lib/benchmark-lite.js --external none --target node --no-compress --no-sourcemap --raw -o benchmarks/.v8.js && v8 --module benchmarks/.v8.modern.js","build":"npm run -s transpile && npm run -s transpile:jsx && npm run -s copy-typescript-definition","postbuild":"node ./config/node-13-exports.js && node ./config/node-commonjs.js","transpile":"microbundle src/index.js -f es,umd --target web --external preact","transpile:jsx":"microbundle src/jsx.js -o dist/jsx.js --target web --external preact && microbundle dist/jsx.js -o dist/jsx.js -f cjs --external preact","copy-typescript-definition":"copyfiles -f src/*.d.ts dist","test":"eslint src test && tsc && npm run test:mocha && npm run bench","test:mocha":"BABEL_ENV=test mocha -r @babel/register -r test/setup.js test/**/[!compat]*.test.js && npm run test:mocha:compat","test:mocha:compat":"BABEL_ENV=test mocha -r @babel/register -r test/setup.js test/compat.test.js","format":"prettier src/**/*.{d.ts,js} test/**/*.js --write","prepublishOnly":"npm run build","release":"npm run build && git commit -am $npm_package_version && git tag $npm_package_version && git push && git push --tags && npm publish"},"keywords":["preact","render","universal","isomorphic"],"eslintConfig":{"extends":"developit","rules":{"react/prefer-stateless-function":0,"react/jsx-no-bind":0,"react/no-danger":0,"jest/valid-expect":0,"new-cap":0,"curly":"off","brace-style":"off","indent":"off"},"settings":{"react":{"version":"16.8"}}},"babel":{"env":{"test":{"presets":[["@babel/preset-env",{"targets":{"node":true}}]],"plugins":[["@babel/plugin-transform-react-jsx",{"pragma":"h"}]]}}},"author":{"name":"Jason Miller","email":"jason@developit.ca"},"license":"MIT","typings":"src/index.d.ts","repository":{"type":"git","url":"git+https://github.com/developit/preact-render-to-string.git"},"bugs":{"url":"https://github.com/developit/preact-render-to-string/issues"},"homepage":"https://github.com/developit/preact-render-to-string","peerDependencies":{"preact":">=11"},"devDependencies":{"@babel/plugin-transform-react-jsx":"^7.12.12","@babel/preset-env":"^7.12.11","@babel/register":"^7.12.10","@changesets/cli":"^2.18.0","@changesets/changelog-github":"^0.4.1","benchmarkjs-pretty":"^2.0.1","chai":"^4.2.0","copyfiles":"^2.4.1","eslint":"^7.16.0","eslint-config-developit":"^1.2.0","husky":"^4.3.6","lint-staged":"^10.5.3","microbundle":"^0.13.0","mocha":"^8.2.1","preact":"^11.0.0-experimental.0","prettier":"^2.2.1","sinon":"^9.2.2","sinon-chai":"^3.5.0","typescript":"^4.1.3"},"dependencies":{"pretty-format":"^3.8.0"},"prettier":{"singleQuote":true,"trailingComma":"none","useTabs":true,"tabWidth":2},"lint-staged":{"**/*.{js,jsx,ts,tsx,yml}":["prettier --write"]},"husky":{"hooks":{"pre-commit":"lint-staged"}},"readme":"# preact-render-to-string\n\n[![NPM](http://img.shields.io/npm/v/preact-render-to-string.svg)](https://www.npmjs.com/package/preact-render-to-string)\n[![Build status](https://github.com/preactjs/preact-render-to-string/actions/workflows/ci.yml/badge.svg)](https://github.com/preactjs/preact-render-to-string/actions/workflows/ci.yml)\n\nRender JSX and [Preact] components to an HTML string.\n\nWorks in Node & the browser, making it useful for universal/isomorphic rendering.\n\n\\>\\> **[Cute Fox-Related Demo](http://codepen.io/developit/pen/dYZqjE?editors=001)** _(@ CodePen)_ <<\n\n\n---\n\n\n### Render JSX/VDOM to HTML\n\n```js\nimport render from 'preact-render-to-string';\nimport { h } from 'preact';\n/** @jsx h */\n\nlet vdom =
content
;\n\nlet html = render(vdom);\nconsole.log(html);\n//
content
\n```\n\n\n### Render Preact Components to HTML\n\n```js\nimport render from 'preact-render-to-string';\nimport { h, Component } from 'preact';\n/** @jsx h */\n\n// Classical components work\nclass Fox extends Component {\n\trender({ name }) {\n\t\treturn { name };\n\t}\n}\n\n// ... and so do pure functional components:\nconst Box = ({ type, children }) => (\n\t
{ children }
\n);\n\nlet html = render(\n\t\n\t\t\n\t\n);\n\nconsole.log(html);\n//
Finn
\n```\n\n\n---\n\n\n### Render JSX / Preact / Whatever via Express!\n\n```js\nimport express from 'express';\nimport { h } from 'preact';\nimport render from 'preact-render-to-string';\n/** @jsx h */\n\n// silly example component:\nconst Fox = ({ name }) => (\n\t
\n\t\t
{ name }
\n\t\t
This page is all about {name}.
\n\t
\n);\n\n// basic HTTP server via express:\nconst app = express();\napp.listen(8080);\n\n// on each request, render and return a component:\napp.get('/:fox', (req, res) => {\n\tlet html = render();\n\t// send it back wrapped up as an HTML5 document:\n\tres.send(`${html}`);\n});\n```\n\n\n---\n\n\n### License\n\n[MIT]\n\n\n[Preact]: https://github.com/developit/preact\n[MIT]: http://choosealicense.com/licenses/mit/\n","readmeFilename":"README.md","gitHead":"b5d8fff8bb9dac48573abb4f73d8984a82219956","_id":"preact-render-to-string@6.0.0-experimental.0","_nodeVersion":"14.18.3","_npmVersion":"8.3.2","dist":{"integrity":"sha512-MV07FCJSoZNT6g7sGB1fagkQaro54DXEwbQJ9Qztq5YRPAw7kNi8VXWRMNufGHXVYBMK9WudY54K8/HXJXxySg==","shasum":"1eb2fbfacf4a72c3c107fbb56aa815bbfd59c940","tarball":"http://localhost:4545/npm/registry/preact-render-to-string/preact-render-to-string-6.0.0-experimental.0.tgz","fileCount":31,"unpackedSize":256660,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiEkPmACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmrH6A//dbtt5SiaEPaVRmy4Q2W2vC1/7p88iDWQbe690VtdizYxpeV0\r\nQcKwK4XBCQjEbnqIA3W8TA308oI/I2sHUsZWc1GwqizqPO/O+A7Tr178U03f\r\nzk3kXQi8XsJs4DrcYVtNrv12Fy5zs7PGQqyGYS8WNxUE+b/TQn2DTed/bRXQ\r\nW0uh6g6Qz9P2ONd1Fz95mVZ5mFqhisetOQiGjbKIlA4t0dUpTj0MPpamqj+r\r\n/6ko9I8ubuoZJOKahmTETBovNx1I415dz59ehRZkNlQsWKQ8czs/4t64/Qc0\r\nKNSTAVl8oWFQKH0m781eKDk8n07zjhNGxzwL0pwqJD/iATapuXOOdvv3k0G1\r\nsS4FEjFjJcjv5CJof9Z3WyXn+aj3RablpI0J8Ytt8eoKYTPOQRtiwRXfkgGE\r\nW9m7AJUaqxlWGt7XzQj5O2kDRxbs8n+BQ+QPH2xFLgCijeQ+MxVYO9L0cg+U\r\nspBDFU9/owoWL4bF2sdVu1h2XvCbZHtkPUQpMMoSh0n8h6HLqFFnkdjZunNc\r\n0HLHqPvS8E6/piqtApWl+2rM+KW2Af5/TKXhpqAcuQAvnrIupzda0z6K1CNM\r\n7Q4QBccGhmUllVKKn6qovxsBzi+zuakBrVBzAZdKxg2zQxsszib84GROI8AC\r\n8F8aqh2kLJMOdPrNVL3n+V4CVY42CDXkdkw=\r\n=W8OC\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEIsHGVCufvVMRWB8LS78azwtTIuAcon+m1l2kAl/zZOAiBn2mXGGTYSqWSFRtjt37CXejE+RdVw1UNENLZj2ejwzw=="}]},"_npmUser":{"name":"jdecroock","email":"decroockjovi@gmail.com"},"directories":{},"maintainers":[{"name":"reznord","email":"allamsetty.anup@gmail.com"},{"name":"preactjs","email":"hello@preactjs.com"},{"name":"developit","email":"jason@developit.ca"},{"name":"lukeed","email":"luke@lukeed.com"},{"name":"prateekbh","email":"prateek89born@gmail.com"},{"name":"harmony","email":"npm.leah@hrmny.sh"},{"name":"marvinhagemeister","email":"hello@marvinh.dev"},{"name":"solarliner","email":"solarliner@gmail.com"},{"name":"jdecroock","email":"decroockjovi@gmail.com"},{"name":"sventschui","email":"sventschui@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/preact-render-to-string_6.0.0-experimental.0_1645364198246_0.41300613404371367"},"_hasShrinkwrap":false},"5.1.20":{"name":"preact-render-to-string","amdName":"preactRenderToString","version":"5.1.20","description":"Render JSX to an HTML string, with support for Preact components.","main":"dist/index.js","umd:main":"dist/index.js","module":"dist/index.module.js","jsnext:main":"dist/index.module.js","exports":{".":{"import":"./dist/index.mjs","browser":"./dist/index.module.js","require":"./dist/index.js"},"./jsx":{"import":"./dist/jsx.mjs","browser":"./dist/jsx.module.js","require":"./dist/jsx.js"},"./package.json":"./package.json","./":"./"},"scripts":{"bench":"BABEL_ENV=test node -r @babel/register benchmarks index.js","bench:v8":"BABEL_ENV=test microbundle benchmarks/index.js -f modern --alias benchmarkjs-pretty=benchmarks/lib/benchmark-lite.js --external none --target node --no-compress --no-sourcemap --raw -o benchmarks/.v8.js && v8 --module benchmarks/.v8.modern.js","build":"npm run -s transpile && npm run -s transpile:jsx && npm run -s copy-typescript-definition","postbuild":"node ./config/node-13-exports.js && node ./config/node-commonjs.js","transpile":"microbundle src/index.js -f es,umd --target web --external preact","transpile:jsx":"microbundle src/jsx.js -o dist/jsx.js --target web --external preact && microbundle dist/jsx.js -o dist/jsx.js -f cjs --external preact","copy-typescript-definition":"copyfiles -f src/*.d.ts dist","test":"eslint src test && tsc && npm run test:mocha && npm run bench","test:mocha":"BABEL_ENV=test mocha -r @babel/register -r test/setup.js test/**/[!compat]*.test.js && npm run test:mocha:compat","test:mocha:compat":"BABEL_ENV=test mocha -r @babel/register -r test/setup.js test/compat.test.js","format":"prettier src/**/*.{d.ts,js} test/**/*.js --write","prepublishOnly":"npm run build","release":"npm run build && git commit -am $npm_package_version && git tag $npm_package_version && git push && git push --tags && npm publish"},"keywords":["preact","render","universal","isomorphic"],"eslintConfig":{"extends":"developit","rules":{"react/prefer-stateless-function":0,"react/jsx-no-bind":0,"react/no-danger":0,"jest/valid-expect":0,"new-cap":0,"curly":"off","brace-style":"off","indent":"off"},"settings":{"react":{"version":"16.8"}}},"babel":{"env":{"test":{"presets":[["@babel/preset-env",{"targets":{"node":true}}]],"plugins":[["@babel/plugin-transform-react-jsx",{"pragma":"h"}]]}}},"author":{"name":"Jason Miller","email":"jason@developit.ca"},"license":"MIT","typings":"src/index.d.ts","repository":{"type":"git","url":"git+https://github.com/developit/preact-render-to-string.git"},"bugs":{"url":"https://github.com/developit/preact-render-to-string/issues"},"homepage":"https://github.com/developit/preact-render-to-string","peerDependencies":{"preact":">=10"},"devDependencies":{"@babel/plugin-transform-react-jsx":"^7.12.12","@babel/preset-env":"^7.12.11","@babel/register":"^7.12.10","@changesets/cli":"^2.18.0","@changesets/changelog-github":"^0.4.1","benchmarkjs-pretty":"^2.0.1","chai":"^4.2.0","copyfiles":"^2.4.1","eslint":"^7.16.0","eslint-config-developit":"^1.2.0","husky":"^4.3.6","lint-staged":"^10.5.3","microbundle":"^0.13.0","mocha":"^8.2.1","preact":"^10.5.7","prettier":"^2.2.1","sinon":"^9.2.2","sinon-chai":"^3.5.0","typescript":"^4.1.3"},"dependencies":{"pretty-format":"^3.8.0"},"prettier":{"singleQuote":true,"trailingComma":"none","useTabs":true,"tabWidth":2},"lint-staged":{"**/*.{js,jsx,ts,tsx,yml}":["prettier --write"]},"husky":{"hooks":{"pre-commit":"lint-staged"}},"gitHead":"936f71d60a67336bc2639de15dd1c323aa4ff669","_id":"preact-render-to-string@5.1.20","_nodeVersion":"14.18.3","_npmVersion":"8.3.2","dist":{"integrity":"sha512-ivh2oOGzth0o7XqbatWUQ81WQGoJwSqDKP5z917SoqTWYCAr7dlBzMv3SAMTAu3Gr5g47BJwrvyO44H2Y10ubg==","shasum":"9e61a478e8514e5c4140282c7c43d9747a6d32a9","tarball":"http://localhost:4545/npm/registry/preact-render-to-string/preact-render-to-string-5.1.20.tgz","fileCount":31,"unpackedSize":253587,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiE5YuACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmpZ3Q/9EAMSg8mhKl78MsSvPmtqHac4E8Rt+u5+ipoScPAnYTUSonCa\r\nWJnm5MGxmSiFK52uuUtGDmJ0HHpZRW1uh+CnswWqEeTK3r7S6ROXh2CfLpGa\r\nYLohSJJWPK35npVBqvusggh3Qzjos/+ZWLMhc+u2ffbJ+tpECG4waom9qNqR\r\nICDzyInQbqEyrIDOaprCbUe+3OW6v8SmRQKsj9LYtI7K/+aemzSVSy9B4QKU\r\nnalbPAH3cqERcMkgmjn2SLBTHLVEskmRbXBInGDxw23HHicsxse57I2uebCE\r\nKOA/rdUagpFgNr1s9io9g7HGZ/ja+pR2UCi4Fu2bg9ZTOor3MGIxf1uKWnV+\r\nnbSE46+WZtebHxLQPfSVO5WOlHhLAYtqfMZnhIhlc+2d5QaN5WfZtc19dqCn\r\n6uegFL57KxkS7QkN2p5sXTgneiyRzz2O1dhpBoDo7py6bGpphEYRhSPr/X0K\r\n9qBs8zkjHyo0AdHrPFz+Hk6IurvO8/J5HjrHQxCxhcv7+xBspqUkHrANn7hs\r\nTJqxKN7Wl+OCLaBojF0KnHY0kezvV+492I54+E8O/FbwIZN6u2Ro5dBbkqtq\r\nIprCHA8dfITpCHP8NnZMdZg6kN6Jc5Ym5kZgPYLpFY4Z8vwfdakIWL9+zGsg\r\nbUVQe2gAxzq3Ekskb6kK9ajmxBjsaeMa2zU=\r\n=Okbu\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDETCw5QVIvLI5Oc+dtMYFVag6avYyd1w/1RkFzpRhYEwIgXSTBGPz5gqWDo2TQUWZpCruHq9NIR2uD3knnXzfnVx8="}]},"_npmUser":{"name":"jdecroock","email":"decroockjovi@gmail.com"},"directories":{},"maintainers":[{"name":"reznord","email":"allamsetty.anup@gmail.com"},{"name":"preactjs","email":"hello@preactjs.com"},{"name":"developit","email":"jason@developit.ca"},{"name":"lukeed","email":"luke@lukeed.com"},{"name":"prateekbh","email":"prateek89born@gmail.com"},{"name":"harmony","email":"npm.leah@hrmny.sh"},{"name":"marvinhagemeister","email":"hello@marvinh.dev"},{"name":"solarliner","email":"solarliner@gmail.com"},{"name":"jdecroock","email":"decroockjovi@gmail.com"},{"name":"sventschui","email":"sventschui@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/preact-render-to-string_5.1.20_1645450798022_0.4303015005590567"},"_hasShrinkwrap":false},"5.1.21":{"name":"preact-render-to-string","amdName":"preactRenderToString","version":"5.1.21","description":"Render JSX to an HTML string, with support for Preact components.","main":"dist/index.js","umd:main":"dist/index.js","module":"dist/index.module.js","jsnext:main":"dist/index.module.js","exports":{".":{"import":"./dist/index.mjs","browser":"./dist/index.module.js","require":"./dist/index.js"},"./jsx":{"import":"./dist/jsx.mjs","browser":"./dist/jsx.module.js","require":"./dist/jsx.js"},"./package.json":"./package.json","./":"./"},"scripts":{"bench":"BABEL_ENV=test node -r @babel/register benchmarks index.js","bench:v8":"BABEL_ENV=test microbundle benchmarks/index.js -f modern --alias benchmarkjs-pretty=benchmarks/lib/benchmark-lite.js --external none --target node --no-compress --no-sourcemap --raw -o benchmarks/.v8.js && v8 --module benchmarks/.v8.modern.js","build":"npm run -s transpile && npm run -s transpile:jsx && npm run -s copy-typescript-definition","postbuild":"node ./config/node-13-exports.js && node ./config/node-commonjs.js","transpile":"microbundle src/index.js -f es,umd --target web --external preact","transpile:jsx":"microbundle src/jsx.js -o dist/jsx.js --target web --external preact && microbundle dist/jsx.js -o dist/jsx.js -f cjs --external preact","copy-typescript-definition":"copyfiles -f src/*.d.ts dist","test":"eslint src test && tsc && npm run test:mocha && npm run bench","test:mocha":"BABEL_ENV=test mocha -r @babel/register -r test/setup.js test/**/[!compat]*.test.js && npm run test:mocha:compat","test:mocha:compat":"BABEL_ENV=test mocha -r @babel/register -r test/setup.js test/compat.test.js","format":"prettier src/**/*.{d.ts,js} test/**/*.js --write","prepublishOnly":"npm run build","release":"npm run build && git commit -am $npm_package_version && git tag $npm_package_version && git push && git push --tags && npm publish"},"keywords":["preact","render","universal","isomorphic"],"eslintConfig":{"extends":"developit","rules":{"react/prefer-stateless-function":0,"react/jsx-no-bind":0,"react/no-danger":0,"jest/valid-expect":0,"new-cap":0,"curly":"off","brace-style":"off","indent":"off"},"settings":{"react":{"version":"16.8"}}},"babel":{"env":{"test":{"presets":[["@babel/preset-env",{"targets":{"node":true}}]],"plugins":[["@babel/plugin-transform-react-jsx",{"pragma":"h"}]]}}},"author":{"name":"Jason Miller","email":"jason@developit.ca"},"license":"MIT","typings":"src/index.d.ts","repository":{"type":"git","url":"git+https://github.com/developit/preact-render-to-string.git"},"bugs":{"url":"https://github.com/developit/preact-render-to-string/issues"},"homepage":"https://github.com/developit/preact-render-to-string","peerDependencies":{"preact":">=10"},"devDependencies":{"@babel/plugin-transform-react-jsx":"^7.12.12","@babel/preset-env":"^7.12.11","@babel/register":"^7.12.10","@changesets/cli":"^2.18.0","@changesets/changelog-github":"^0.4.1","benchmarkjs-pretty":"^2.0.1","chai":"^4.2.0","copyfiles":"^2.4.1","eslint":"^7.16.0","eslint-config-developit":"^1.2.0","husky":"^4.3.6","lint-staged":"^10.5.3","microbundle":"^0.13.0","mocha":"^8.2.1","preact":"^10.5.7","prettier":"^2.2.1","sinon":"^9.2.2","sinon-chai":"^3.5.0","typescript":"^4.1.3"},"dependencies":{"pretty-format":"^3.8.0"},"prettier":{"singleQuote":true,"trailingComma":"none","useTabs":true,"tabWidth":2},"lint-staged":{"**/*.{js,jsx,ts,tsx,yml}":["prettier --write"]},"husky":{"hooks":{"pre-commit":"lint-staged"}},"gitHead":"c1eb8c41666d58c29f33a0ae315838ea9130ce89","_id":"preact-render-to-string@5.1.21","_nodeVersion":"14.18.3","_npmVersion":"8.3.2","dist":{"integrity":"sha512-wbMtNU4JpfvbE04iCe7BZ1yLYN8i6NRrq+NhR0fUINjPXGu3ZIc4GM5ScOiwdIP1sPXv9SVETuud/tmQGMvdNQ==","shasum":"7329a59191d2ca7a40635828c7058f64ffe17639","tarball":"http://localhost:4545/npm/registry/preact-render-to-string/preact-render-to-string-5.1.21.tgz","fileCount":31,"unpackedSize":255417,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDND5AqiRxAolrJ0iUlqLZ8CIjK+Vyf3oGUEpSvlDE2DwIgYGhZWHU+l+rNr94XurwQlwJzryOKP6/2lGfZVWC6wsU="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiT+8AACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmomUA//Qzhug95UqxxQhjQ4SzuymhHAemwRKKozd6fAcyLOMZR1/PM6\r\nUhWPXBZ86HZkcX7AwRQio3fSqrug/2cOlOyXEA4OLoH+UuV25pexnbIe1HBm\r\n98W/VPEmkYrjcS1RxNtfLqlAt/w+QNXHHXp6eczTUDXLLntCEbdErgL9TgVT\r\nSa5TpuFZZfSwZDZf7LAooeMVCSbJXfYJ2sZR/cvH9zxlgyHG+DkHAeF643Jq\r\neuCtCH9Ra3wld32CJq+Ena4mJlsjdnxKOe5rtqlvWZRLgWi95Mwu/o4796la\r\neCM3LApkVIOpLOq9o0JhybOddrxtt1ALLkKEs2vEljzKl/VnVSOMRRna8424\r\nCWm/re/NHoQXC7lA+IIToK00nZfhgn/yH9QC94BZDSjowhoZdDtxTUTiycft\r\nVK2k8nRBjsJu05/YmVY45fod+NORPVlZbTjfiaqEASXKoVytVDmNfRteoWfc\r\nrgYM5jQvRuOqcSZfO+IHOLr8pTh+XCgg5KdaloqRl/YSzJSsS1ndrhXKzj9p\r\n9nJ+ydd/VGPPhRrwoGAAoM7yVJydgmfMp0I5oYspvzQ8z6OqfBJgcx2myP7I\r\n37C2NOoLagUN7jb1ibv2ZxuD93rahXjMjqZ/ZzhfYugkFto0UZIwTalVmk58\r\nRAa/5uPnkCbc8TgkWbTzKD3p0qU9u4JS2SY=\r\n=dHTs\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"jdecroock","email":"decroockjovi@gmail.com"},"directories":{},"maintainers":[{"name":"reznord","email":"allamsetty.anup@gmail.com"},{"name":"preactjs","email":"hello@preactjs.com"},{"name":"developit","email":"jason@developit.ca"},{"name":"lukeed","email":"luke@lukeed.com"},{"name":"prateekbh","email":"prateek89born@gmail.com"},{"name":"harmony","email":"npm.leah@hrmny.sh"},{"name":"marvinhagemeister","email":"hello@marvinh.dev"},{"name":"solarliner","email":"solarliner@gmail.com"},{"name":"jdecroock","email":"decroockjovi@gmail.com"},{"name":"sventschui","email":"sventschui@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/preact-render-to-string_5.1.21_1649405696267_0.966178565171063"},"_hasShrinkwrap":false},"5.2.0":{"name":"preact-render-to-string","amdName":"preactRenderToString","version":"5.2.0","description":"Render JSX to an HTML string, with support for Preact components.","main":"dist/index.js","umd:main":"dist/index.js","module":"dist/index.module.js","jsnext:main":"dist/index.module.js","exports":{".":{"import":"./dist/index.mjs","browser":"./dist/index.module.js","require":"./dist/index.js"},"./jsx":{"import":"./dist/jsx.mjs","browser":"./dist/jsx.module.js","require":"./dist/jsx.js"},"./package.json":"./package.json","./":"./"},"scripts":{"bench":"BABEL_ENV=test node -r @babel/register benchmarks index.js","bench:v8":"BABEL_ENV=test microbundle benchmarks/index.js -f modern --alias benchmarkjs-pretty=benchmarks/lib/benchmark-lite.js --external none --target node --no-compress --no-sourcemap --raw -o benchmarks/.v8.js && v8 --module benchmarks/.v8.modern.js","build":"npm run -s transpile && npm run -s transpile:jsx && npm run -s copy-typescript-definition","postbuild":"node ./config/node-13-exports.js && node ./config/node-commonjs.js","transpile":"microbundle src/index.js -f es,umd --target web --external preact","transpile:jsx":"microbundle src/jsx.js -o dist/jsx.js --target web --external preact && microbundle dist/jsx.js -o dist/jsx.js -f cjs --external preact","copy-typescript-definition":"copyfiles -f src/*.d.ts dist","test":"eslint src test && tsc && npm run test:mocha && npm run bench","test:mocha":"BABEL_ENV=test mocha -r @babel/register -r test/setup.js test/**/[!compat]*.test.js && npm run test:mocha:compat","test:mocha:compat":"BABEL_ENV=test mocha -r @babel/register -r test/setup.js test/compat.test.js","format":"prettier src/**/*.{d.ts,js} test/**/*.js --write","prepublishOnly":"npm run build","release":"npm run build && git commit -am $npm_package_version && git tag $npm_package_version && git push && git push --tags && npm publish"},"keywords":["preact","render","universal","isomorphic"],"eslintConfig":{"extends":"developit","rules":{"react/prefer-stateless-function":0,"react/jsx-no-bind":0,"react/no-danger":0,"jest/valid-expect":0,"new-cap":0,"curly":"off","brace-style":"off","indent":"off"},"settings":{"react":{"version":"16.8"}}},"babel":{"env":{"test":{"presets":[["@babel/preset-env",{"targets":{"node":true}}]],"plugins":[["@babel/plugin-transform-react-jsx",{"pragma":"h"}]]}}},"author":{"name":"Jason Miller","email":"jason@developit.ca"},"license":"MIT","typings":"src/index.d.ts","repository":{"type":"git","url":"git+https://github.com/developit/preact-render-to-string.git"},"bugs":{"url":"https://github.com/developit/preact-render-to-string/issues"},"homepage":"https://github.com/developit/preact-render-to-string","peerDependencies":{"preact":">=10"},"devDependencies":{"@babel/plugin-transform-react-jsx":"^7.12.12","@babel/preset-env":"^7.12.11","@babel/register":"^7.12.10","@changesets/cli":"^2.18.0","@changesets/changelog-github":"^0.4.1","benchmarkjs-pretty":"^2.0.1","chai":"^4.2.0","copyfiles":"^2.4.1","eslint":"^7.16.0","eslint-config-developit":"^1.2.0","husky":"^4.3.6","lint-staged":"^10.5.3","microbundle":"^0.13.0","mocha":"^8.2.1","preact":"^10.5.7","prettier":"^2.2.1","sinon":"^9.2.2","sinon-chai":"^3.5.0","typescript":"^4.1.3"},"dependencies":{"pretty-format":"^3.8.0"},"prettier":{"singleQuote":true,"trailingComma":"none","useTabs":true,"tabWidth":2},"lint-staged":{"**/*.{js,jsx,ts,tsx,yml}":["prettier --write"]},"husky":{"hooks":{"pre-commit":"lint-staged"}},"gitHead":"99925a0c11eb8edaceea2dc15f899608edafb853","_id":"preact-render-to-string@5.2.0","_nodeVersion":"14.18.3","_npmVersion":"8.3.2","dist":{"integrity":"sha512-+RGwSW78Cl+NsZRUbFW1MGB++didsfqRk+IyRVTaqy+3OjtpKK/6HgBtfszUX0YXMfo41k2iaQSseAHGKEwrbg==","shasum":"3d3c4f9c570229b76d33353ed02ce662bd13dec1","tarball":"http://localhost:4545/npm/registry/preact-render-to-string/preact-render-to-string-5.2.0.tgz","fileCount":31,"unpackedSize":260904,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCwTfOL5XmgUHdmXPRJdDWVObDxluspaJAozqQuQ6N7fAIhAN9gKvnl7AomBq9u+ha1L15Orixy63KY8DgU2olxZZBL"}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJia5xMACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmp0ww/8DZr4VKc1ae5pNm33xXr40kDsBWK58byGzVJ0IIUKwrfkV+ms\r\nXuKngH2RK3gtRr1pg5d0jZI2veWCPXTTEbm2jQjfSth1404ARxaPrOQVGZ5t\r\n1zWYUxaMpLTOJ0wKjeKRP8/OA/gqKCRRJBbJp1Dqyhl2qBM9YZcn/v9bHcU5\r\nHLl1LTgwJgPlzWFHRmm4Zn0PU28GRd6oWX/dGQ/maZeuYWAs0VJSIfOgqpDK\r\nYeaCqnXS1XcAlG7f7XZSX17NJTL6jolDssAvA51q0mS743+jVY9FCsSAv6tu\r\nfy9JJPKTL0KD6/fvxNx0/FpBsEBZDossdwTy57Dj/0BEHIpsPqQgTax4nY9V\r\nZbLe4j3EJ8c791mdy7SRI54KkeaaaeyHte/T71OnsbUOTOmmbP4njoJnPqXb\r\nW1t4BPrPdIjCG4b3jr8IJ9j64ZjBxcNIYFUkA4cxb0SZRuQshOscmAo+NJz4\r\nurhpfCq355XVZSySBiyHTyzH/s8ZJ6qz50HwHZN9VxFTgyaTZ3no4Cq8ZtkV\r\nvy7uYRBCc8coPU/NdXuzrb7t53AB65hybPC1ZHLzo0MM1lRnhf+p99moM7QZ\r\nF4TFbzudrc4dujlODwz05ftrq45hz+afJ/CemEtxwqAeVi+vEtF9O8UOEz+w\r\nvxXDpFa7dTalD7WKJc+3ozb5Zbiw3+W4GMo=\r\n=Rkle\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"jdecroock","email":"decroockjovi@gmail.com"},"directories":{},"maintainers":[{"name":"reznord","email":"allamsetty.anup@gmail.com"},{"name":"preactjs","email":"hello@preactjs.com"},{"name":"developit","email":"jason@developit.ca"},{"name":"lukeed","email":"luke@lukeed.com"},{"name":"prateekbh","email":"prateek89born@gmail.com"},{"name":"harmony","email":"npm.leah@hrmny.sh"},{"name":"marvinhagemeister","email":"hello@marvinh.dev"},{"name":"solarliner","email":"solarliner@gmail.com"},{"name":"jdecroock","email":"decroockjovi@gmail.com"},{"name":"sventschui","email":"sventschui@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/preact-render-to-string_5.2.0_1651219531819_0.17887241923623143"},"_hasShrinkwrap":false},"5.2.1":{"name":"preact-render-to-string","amdName":"preactRenderToString","version":"5.2.1","description":"Render JSX to an HTML string, with support for Preact components.","main":"dist/index.js","umd:main":"dist/index.js","module":"dist/index.module.js","jsnext:main":"dist/index.module.js","exports":{".":{"import":"./dist/index.mjs","browser":"./dist/index.module.js","require":"./dist/index.js"},"./jsx":{"import":"./dist/jsx.mjs","browser":"./dist/jsx.module.js","require":"./dist/jsx.js"},"./package.json":"./package.json","./":"./"},"scripts":{"bench":"BABEL_ENV=test node -r @babel/register benchmarks index.js","bench:v8":"BABEL_ENV=test microbundle benchmarks/index.js -f modern --alias benchmarkjs-pretty=benchmarks/lib/benchmark-lite.js --external none --target node --no-compress --no-sourcemap --raw -o benchmarks/.v8.js && v8 --module benchmarks/.v8.modern.js","build":"npm run -s transpile && npm run -s transpile:jsx && npm run -s copy-typescript-definition","postbuild":"node ./config/node-13-exports.js && node ./config/node-commonjs.js","transpile":"microbundle src/index.js -f es,umd --target web --external preact","transpile:jsx":"microbundle src/jsx.js -o dist/jsx.js --target web --external preact && microbundle dist/jsx.js -o dist/jsx.js -f cjs --external preact","copy-typescript-definition":"copyfiles -f src/*.d.ts dist","test":"eslint src test && tsc && npm run test:mocha && npm run bench","test:mocha":"BABEL_ENV=test mocha -r @babel/register -r test/setup.js test/**/[!compat]*.test.js && npm run test:mocha:compat","test:mocha:compat":"BABEL_ENV=test mocha -r @babel/register -r test/setup.js test/compat.test.js","format":"prettier src/**/*.{d.ts,js} test/**/*.js --write","prepublishOnly":"npm run build","release":"npm run build && git commit -am $npm_package_version && git tag $npm_package_version && git push && git push --tags && npm publish"},"keywords":["preact","render","universal","isomorphic"],"eslintConfig":{"extends":"developit","rules":{"react/prefer-stateless-function":0,"react/jsx-no-bind":0,"react/no-danger":0,"jest/valid-expect":0,"new-cap":0,"curly":"off","brace-style":"off","indent":"off"},"settings":{"react":{"version":"16.8"}}},"babel":{"env":{"test":{"presets":[["@babel/preset-env",{"targets":{"node":true}}]],"plugins":[["@babel/plugin-transform-react-jsx",{"pragma":"h"}]]}}},"author":{"name":"Jason Miller","email":"jason@developit.ca"},"license":"MIT","typings":"src/index.d.ts","repository":{"type":"git","url":"git+https://github.com/developit/preact-render-to-string.git"},"bugs":{"url":"https://github.com/developit/preact-render-to-string/issues"},"homepage":"https://github.com/developit/preact-render-to-string","peerDependencies":{"preact":">=10"},"devDependencies":{"@babel/plugin-transform-react-jsx":"^7.12.12","@babel/preset-env":"^7.12.11","@babel/register":"^7.12.10","@changesets/cli":"^2.18.0","@changesets/changelog-github":"^0.4.1","benchmarkjs-pretty":"^2.0.1","chai":"^4.2.0","copyfiles":"^2.4.1","eslint":"^7.16.0","eslint-config-developit":"^1.2.0","husky":"^4.3.6","lint-staged":"^10.5.3","microbundle":"^0.13.0","mocha":"^8.2.1","preact":"^10.5.7","prettier":"^2.2.1","sinon":"^9.2.2","sinon-chai":"^3.5.0","typescript":"^4.1.3"},"dependencies":{"pretty-format":"^3.8.0"},"prettier":{"singleQuote":true,"trailingComma":"none","useTabs":true,"tabWidth":2},"lint-staged":{"**/*.{js,jsx,ts,tsx,yml}":["prettier --write"]},"husky":{"hooks":{"pre-commit":"lint-staged"}},"gitHead":"13b68cfc4600b809bf2dcbcea96e3b11ce59ff9d","_id":"preact-render-to-string@5.2.1","_nodeVersion":"14.18.3","_npmVersion":"8.3.2","dist":{"integrity":"sha512-Wp3ner1aIVBpKg02C4AoLdBiw4kNaiFSYHr4wUF+fR7FWKAQzNri+iPfPp31sEhAtBfWoJrSxiEFzd5wp5zCgQ==","shasum":"71f3e8cda65f33dbc8ad8d904ff58e3f532e59f3","tarball":"http://localhost:4545/npm/registry/preact-render-to-string/preact-render-to-string-5.2.1.tgz","fileCount":31,"unpackedSize":262966,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIB4OaFHj79opVK0QMkIQE7rP5XPc+AkM9yocO5v6QlTSAiAp2kfidvp+BlDuXuvntSHu3yprLo2Gqq6shNUyHxZZbg=="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJizdcqACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmrLzBAAnKGn9w+0mNpSBWXNTqG2wgnIfQpclKxewkB3IIrPj/TOpJUb\r\nx+hJVutqqsKHTL81QBB7ODnyfJcT0grKZnttN7P9K32PfrXRaplIdLe6PISE\r\n/KfsMgnztxY4W23vUpIDI6q58uL8Sghf80KMHuldhyK17gFZ6GzB8SnSEMoC\r\nHsmAg37tMoJ9xrTLn1FsW28EqBFu1CtThBUnWJo4W8cNFcQ8FRGdyuh5FArG\r\nhbdZgkv3qw8KHhWURtFpGP8eXagsTLnMeOhwOyAQ/QUsaW0qe4FN2qfvQk3y\r\nrbLRDm5eSHhi6Xm5+s+4Sww7wAbRP2z9jESAT3Iq+wVX9AK/LQYgJg5TQstx\r\n3w0qJK059Hk9h0dXlo9/SvNqpmymm6IEiyqg+MG68mxEer7pW8jywsoMRsc1\r\nE+MNOptpH7HPFM+9t7JBxmgpqGOr8D+kvxDKvP2U9Fm1OEWL4n/1pBL2sEZ/\r\nhV2Da70GA/b7ACQuzPwHhYvbzt+fPQ2dJMXFz43kSt7DzF2VamYQamvhrWpx\r\n+8v9yK2XmV4lca9Vc0q2K10ehQQW2FWGsSrV5Ad1QspA3884Jx5I1ntn+/4P\r\nn/CXOW1ml4Mdhr0NQHvfPxZRMoVn8Wo4BVG+t3m6GKCqN6u5wxWzLerf5oCM\r\nDIptIU9Dvx+Y2l483bsK0zgE+DxPkQkheFc=\r\n=76gU\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"jdecroock","email":"decroockjovi@gmail.com"},"directories":{},"maintainers":[{"name":"reznord","email":"allamsetty.anup@gmail.com"},{"name":"preactjs","email":"hello@preactjs.com"},{"name":"developit","email":"jason@developit.ca"},{"name":"lukeed","email":"luke@lukeed.com"},{"name":"prateekbh","email":"prateek89born@gmail.com"},{"name":"harmony","email":"npm.leah@hrmny.sh"},{"name":"marvinhagemeister","email":"hello@marvinh.dev"},{"name":"solarliner","email":"solarliner@gmail.com"},{"name":"jdecroock","email":"decroockjovi@gmail.com"},{"name":"sventschui","email":"sventschui@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/preact-render-to-string_5.2.1_1657657130501_0.2390131702852969"},"_hasShrinkwrap":false},"5.2.2":{"name":"preact-render-to-string","amdName":"preactRenderToString","version":"5.2.2","description":"Render JSX to an HTML string, with support for Preact components.","main":"dist/index.js","umd:main":"dist/index.js","module":"dist/index.module.js","jsnext:main":"dist/index.module.js","types":"src/index.d.ts","exports":{".":{"types":"./src/index.d.ts","import":"./dist/index.mjs","browser":"./dist/index.module.js","require":"./dist/index.js"},"./jsx":{"types":"./jsx.d.ts","import":"./dist/jsx.mjs","browser":"./dist/jsx.module.js","require":"./dist/jsx.js"},"./package.json":"./package.json"},"scripts":{"bench":"BABEL_ENV=test node -r @babel/register benchmarks index.js","bench:v8":"BABEL_ENV=test microbundle benchmarks/index.js -f modern --alias benchmarkjs-pretty=benchmarks/lib/benchmark-lite.js --external none --target node --no-compress --no-sourcemap --raw -o benchmarks/.v8.js && v8 --module benchmarks/.v8.modern.js","build":"npm run -s transpile && npm run -s transpile:jsx && npm run -s copy-typescript-definition","postbuild":"node ./config/node-13-exports.js && node ./config/node-commonjs.js","transpile":"microbundle src/index.js -f es,umd --target web --external preact","transpile:jsx":"microbundle src/jsx.js -o dist/jsx.js --target web --external preact && microbundle dist/jsx.js -o dist/jsx.js -f cjs --external preact","copy-typescript-definition":"copyfiles -f src/*.d.ts dist","test":"eslint src test && tsc && npm run test:mocha && npm run bench","test:mocha":"BABEL_ENV=test mocha -r @babel/register -r test/setup.js test/**/[!compat]*.test.js && npm run test:mocha:compat","test:mocha:compat":"BABEL_ENV=test mocha -r @babel/register -r test/setup.js test/compat.test.js","format":"prettier src/**/*.{d.ts,js} test/**/*.js --write","prepublishOnly":"npm run build","release":"npm run build && git commit -am $npm_package_version && git tag $npm_package_version && git push && git push --tags && npm publish"},"keywords":["preact","render","universal","isomorphic"],"eslintConfig":{"extends":"developit","rules":{"react/prefer-stateless-function":0,"react/jsx-no-bind":0,"react/no-danger":0,"jest/valid-expect":0,"new-cap":0,"curly":"off","brace-style":"off","indent":"off"},"settings":{"react":{"version":"16.8"}}},"babel":{"env":{"test":{"presets":[["@babel/preset-env",{"targets":{"node":true}}]],"plugins":[["@babel/plugin-transform-react-jsx",{"pragma":"h"}]]}}},"author":{"name":"Jason Miller","email":"jason@developit.ca"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/developit/preact-render-to-string.git"},"bugs":{"url":"https://github.com/developit/preact-render-to-string/issues"},"homepage":"https://github.com/developit/preact-render-to-string","peerDependencies":{"preact":">=10"},"devDependencies":{"@babel/plugin-transform-react-jsx":"^7.12.12","@babel/preset-env":"^7.12.11","@babel/register":"^7.12.10","@changesets/cli":"^2.18.0","@changesets/changelog-github":"^0.4.1","benchmarkjs-pretty":"^2.0.1","chai":"^4.2.0","copyfiles":"^2.4.1","eslint":"^7.16.0","eslint-config-developit":"^1.2.0","husky":"^4.3.6","lint-staged":"^10.5.3","microbundle":"^0.13.0","mocha":"^8.2.1","preact":"^10.5.7","prettier":"^2.2.1","sinon":"^9.2.2","sinon-chai":"^3.5.0","typescript":"^4.1.3"},"dependencies":{"pretty-format":"^3.8.0"},"prettier":{"singleQuote":true,"trailingComma":"none","useTabs":true,"tabWidth":2},"lint-staged":{"**/*.{js,jsx,ts,tsx,yml}":["prettier --write"]},"husky":{"hooks":{"pre-commit":"lint-staged"}},"gitHead":"43689d38933f790a36542bed191f5ce27a284bb0","_id":"preact-render-to-string@5.2.2","_nodeVersion":"16.6.2","_npmVersion":"7.20.3","dist":{"integrity":"sha512-ZBPfzWmHjasQIzysj72VYJ6oa2bphpxNvzLRdRj/XGFKyeTBJIDmoiKJlBGfxzU4TYL2CjpAWmcFIXcV+HQEBg==","shasum":"865174418f2e4e8e37fc40f1a20c5a23dfdc0971","tarball":"http://localhost:4545/npm/registry/preact-render-to-string/preact-render-to-string-5.2.2.tgz","fileCount":31,"unpackedSize":357370,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD6PGAOJb14XQNBedgReL8xUSW26eLMDKdZ38ViXTv4rQIhALpQqZg7FhRgSFmzxichTLXGXHgxoN70PKCzGHmkyGfn"}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJi+/jkACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmoong/+NAs06abi0lNyolL4mHJ5HkXGIFUisHMhPv3apcr1T++SKRaf\r\neTMrCYe0gBSVjT9YdPfBHk4yZFKPQq2dTkXnkT52cMjPmIWTG7bZx1PMzD1J\r\nBPpzdMyjZOlG5jx+J15Shni3RaRa0JN+aR1CyTiaQhtCK2/It/+4qwXIhRj0\r\nsitmS7W7XokkghIC55/42wlkeICziFHhSYwDpvz+k+oYMKn0uFhss5fGNAkK\r\no7hFKQzNyI32HEITFFKL4zNIEEE7kIgTfOEbLd/JaQBz/mHOxBqJ85XwanPj\r\n9k6FOhfkAUptJkQyaS39Hx1cdIsg1T5njnSndJyWKan2xOXKJXiFfI/9AP9w\r\n4q3Gu9fTUd1ZJGdX++TtZOf6lRKnqYN5727qnQwdPLAgrq5JkU/qEpJ0jOBn\r\nKXPdASP5qmjtXuHWPxy43ABP0yLg7IQQjG4b0iMszu1mJPOH4MdPETjOuf8N\r\nGRfiRxgBcPKktEsT4Okz6bFX+k/Jil2u7Noz797FpdKCqlMIcGKapWJgOibP\r\nLPLNLmDVYmAtTRmX5QCgJ5FG8aG+GOBRwGq2pGKdMSK2W6jnx2lv49jBPdLv\r\nkXc4/ean24P9CGmymAnt3juIPEKTQdPetTTtPpTC/FqwWqh2EnbEAcSxwmdM\r\neZZOIhFy+uBT9wqxM63zvt0LA1W8ojJeZxY=\r\n=/C3m\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"marvinhagemeister","email":"hello@marvinh.dev"},"directories":{},"maintainers":[{"name":"reznord","email":"allamsetty.anup@gmail.com"},{"name":"preactjs","email":"hello@preactjs.com"},{"name":"developit","email":"jason@developit.ca"},{"name":"lukeed","email":"luke@lukeed.com"},{"name":"prateekbh","email":"prateek89born@gmail.com"},{"name":"harmony","email":"npm.leah@hrmny.sh"},{"name":"marvinhagemeister","email":"hello@marvinh.dev"},{"name":"solarliner","email":"solarliner@gmail.com"},{"name":"jdecroock","email":"decroockjovi@gmail.com"},{"name":"sventschui","email":"sventschui@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/preact-render-to-string_5.2.2_1660680419800_0.8874039652156072"},"_hasShrinkwrap":false},"5.2.3":{"name":"preact-render-to-string","amdName":"preactRenderToString","version":"5.2.3","description":"Render JSX to an HTML string, with support for Preact components.","main":"dist/index.js","umd:main":"dist/index.js","module":"dist/index.module.js","jsnext:main":"dist/index.module.js","types":"src/index.d.ts","exports":{".":{"types":"./src/index.d.ts","import":"./dist/index.mjs","browser":"./dist/index.module.js","require":"./dist/index.js"},"./jsx":{"types":"./jsx.d.ts","import":"./dist/jsx.mjs","browser":"./dist/jsx.module.js","require":"./dist/jsx.js"},"./package.json":"./package.json"},"scripts":{"bench":"BABEL_ENV=test node -r @babel/register benchmarks index.js","bench:v8":"BABEL_ENV=test microbundle benchmarks/index.js -f modern --alias benchmarkjs-pretty=benchmarks/lib/benchmark-lite.js --external none --target node --no-compress --no-sourcemap --raw -o benchmarks/.v8.js && v8 --module benchmarks/.v8.modern.js","build":"npm run -s transpile && npm run -s transpile:jsx && npm run -s copy-typescript-definition","postbuild":"node ./config/node-13-exports.js && node ./config/node-commonjs.js","transpile":"microbundle src/index.js -f es,umd --target web --external preact","transpile:jsx":"microbundle src/jsx.js -o dist/jsx.js --target web --external preact && microbundle dist/jsx.js -o dist/jsx.js -f cjs --external preact","copy-typescript-definition":"copyfiles -f src/*.d.ts dist","test":"eslint src test && tsc && npm run test:mocha && npm run bench","test:mocha":"BABEL_ENV=test mocha -r @babel/register -r test/setup.js test/**/[!compat]*.test.js && npm run test:mocha:compat","test:mocha:compat":"BABEL_ENV=test mocha -r @babel/register -r test/setup.js test/compat.test.js","format":"prettier src/**/*.{d.ts,js} test/**/*.js --write","prepublishOnly":"npm run build","release":"npm run build && git commit -am $npm_package_version && git tag $npm_package_version && git push && git push --tags && npm publish"},"keywords":["preact","render","universal","isomorphic"],"eslintConfig":{"extends":"developit","rules":{"react/prefer-stateless-function":0,"react/jsx-no-bind":0,"react/no-danger":0,"jest/valid-expect":0,"new-cap":0,"curly":"off","brace-style":"off","indent":"off"},"settings":{"react":{"version":"16.8"}}},"babel":{"env":{"test":{"presets":[["@babel/preset-env",{"targets":{"node":true}}]],"plugins":[["@babel/plugin-transform-react-jsx",{"pragma":"h"}]]}}},"author":{"name":"Jason Miller","email":"jason@developit.ca"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/developit/preact-render-to-string.git"},"bugs":{"url":"https://github.com/developit/preact-render-to-string/issues"},"homepage":"https://github.com/developit/preact-render-to-string","peerDependencies":{"preact":">=10"},"devDependencies":{"@babel/plugin-transform-react-jsx":"^7.12.12","@babel/preset-env":"^7.12.11","@babel/register":"^7.12.10","@changesets/cli":"^2.18.0","@changesets/changelog-github":"^0.4.1","benchmarkjs-pretty":"^2.0.1","chai":"^4.2.0","copyfiles":"^2.4.1","eslint":"^7.16.0","eslint-config-developit":"^1.2.0","husky":"^4.3.6","lint-staged":"^10.5.3","microbundle":"^0.13.0","mocha":"^8.2.1","preact":"^10.5.7","prettier":"^2.2.1","sinon":"^9.2.2","sinon-chai":"^3.5.0","typescript":"^4.1.3"},"dependencies":{"pretty-format":"^3.8.0"},"prettier":{"singleQuote":true,"trailingComma":"none","useTabs":true,"tabWidth":2},"lint-staged":{"**/*.{js,jsx,ts,tsx,yml}":["prettier --write"]},"husky":{"hooks":{"pre-commit":"lint-staged"}},"mangle":{"compress":{"reduce_funcs":false}},"gitHead":"2d0cd1decb7e24fdf6facc0d169c7f893e1827eb","_id":"preact-render-to-string@5.2.3","_nodeVersion":"16.16.0","_npmVersion":"8.11.0","dist":{"integrity":"sha512-aPDxUn5o3GhWdtJtW0svRC2SS/l8D9MAgo2+AWml+BhDImb27ALf04Q2d+AHqUUOc6RdSXFIBVa2gxzgMKgtZA==","shasum":"23d17376182af720b1060d5a4099843c7fe92fe4","tarball":"http://localhost:4545/npm/registry/preact-render-to-string/preact-render-to-string-5.2.3.tgz","fileCount":33,"unpackedSize":358613,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD0U5usNx5XyQEnEQpG3K8RhNzVNJpgtGF+SHbdVFToPAIgMNF/dFPLQtzIb8uqqzgRDCSEG3H2ffmghr12WAfT4SE="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjF7oVACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmrwvQ/+KsSc300mTbg+rxl+roSSVoM7GXfeZg06OFifEzatTB3HPYKW\r\nbD1OgOVlPTfp0/iDNnDpCYKDLY3YO0IIXk+1KACp8Z9jmsnujJdebTnSnYjC\r\nOmmL5OgpaSu2+ay3+QU2RiodL1jlaE4thddHFWauf3t7/32D7JoSDicMA/ce\r\nYrnrzK+aK/GpuYw6C+2dFXLWuZhqZRNyjenF20QZ09Q7yk+Uv1/RtZq5VG+o\r\nHohOZyO/dyyoEZ3XR6SgReLvGQVp7FhUkBw1KayOqjBbBlEZPKKzS5Mw+Ese\r\nyhGyGE7x8sKTR5AeO32ZCLiCSLrsgTXXg5sFmKV7BOsRNBbGpssJUVefmskG\r\nqUSa7Ky8OFJSzpx7BZto0rZvEUjGK56P2Kb+Whro1jk5ptOtYu5rVbHiPeMp\r\nH6/DpV+5AXzeMuRHu4bb4LmzAcamFlGF1U6dMVBQnyTASzv7jJhasWecZzss\r\nn7ZmIj2Xccq3BxrvWS4KO/xzeNt3LpCWPX5l0hyHdxZI4dLy0lrgp5c29mO7\r\nyXfFmtgbN4heHf2gMd6BjHl2qrTCe5R4zfoSKEuRdtGmUgRBVLurL69fVUgg\r\nHJd4+vixjLbmPaYcDXKKBHXOBdRLydluvOOblw5dlAGWiwEHho0AzegDVtgs\r\nt5Julw5ZgdsqjaaUVywRZNsSxzGSsKzEn1w=\r\n=Z4/H\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"jdecroock","email":"decroockjovi@gmail.com"},"directories":{},"maintainers":[{"name":"reznord","email":"allamsetty.anup@gmail.com"},{"name":"preactjs","email":"hello@preactjs.com"},{"name":"developit","email":"jason@developit.ca"},{"name":"lukeed","email":"luke@lukeed.com"},{"name":"prateekbh","email":"prateek89born@gmail.com"},{"name":"harmony","email":"npm.leah@hrmny.sh"},{"name":"marvinhagemeister","email":"hello@marvinh.dev"},{"name":"solarliner","email":"solarliner@gmail.com"},{"name":"jdecroock","email":"decroockjovi@gmail.com"},{"name":"sventschui","email":"sventschui@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/preact-render-to-string_5.2.3_1662499349397_0.7006311306214803"},"_hasShrinkwrap":false},"5.2.4":{"name":"preact-render-to-string","amdName":"preactRenderToString","version":"5.2.4","description":"Render JSX to an HTML string, with support for Preact components.","main":"dist/index.js","umd:main":"dist/index.js","module":"dist/index.module.js","jsnext:main":"dist/index.module.js","types":"src/index.d.ts","exports":{".":{"types":"./src/index.d.ts","import":"./dist/index.mjs","browser":"./dist/index.module.js","require":"./dist/index.js"},"./jsx":{"types":"./jsx.d.ts","import":"./dist/jsx.mjs","browser":"./dist/jsx.module.js","require":"./dist/jsx.js"},"./package.json":"./package.json"},"scripts":{"bench":"BABEL_ENV=test node -r @babel/register benchmarks index.js","bench:v8":"BABEL_ENV=test microbundle benchmarks/index.js -f modern --alias benchmarkjs-pretty=benchmarks/lib/benchmark-lite.js --external none --target node --no-compress --no-sourcemap --raw -o benchmarks/.v8.js && v8 --module benchmarks/.v8.modern.js","build":"npm run -s transpile && npm run -s transpile:jsx && npm run -s copy-typescript-definition","postbuild":"node ./config/node-13-exports.js && node ./config/node-commonjs.js","transpile":"microbundle src/index.js -f es,umd --target web --external preact","transpile:jsx":"microbundle src/jsx.js -o dist/jsx.js --target web --external preact && microbundle dist/jsx.js -o dist/jsx.js -f cjs --external preact","copy-typescript-definition":"copyfiles -f src/*.d.ts dist","test":"eslint src test && tsc && npm run test:mocha && npm run bench","test:mocha":"BABEL_ENV=test mocha -r @babel/register -r test/setup.js test/**/[!compat]*.test.js && npm run test:mocha:compat","test:mocha:compat":"BABEL_ENV=test mocha -r @babel/register -r test/setup.js test/compat.test.js","format":"prettier src/**/*.{d.ts,js} test/**/*.js --write","prepublishOnly":"npm run build","release":"npm run build && git commit -am $npm_package_version && git tag $npm_package_version && git push && git push --tags && npm publish"},"keywords":["preact","render","universal","isomorphic"],"eslintConfig":{"extends":"developit","rules":{"react/prefer-stateless-function":0,"react/jsx-no-bind":0,"react/no-danger":0,"jest/valid-expect":0,"new-cap":0,"curly":"off","brace-style":"off","indent":"off"},"settings":{"react":{"version":"16.8"}}},"babel":{"env":{"test":{"presets":[["@babel/preset-env",{"targets":{"node":true}}]],"plugins":[["@babel/plugin-transform-react-jsx",{"pragma":"h"}]]}}},"author":{"name":"Jason Miller","email":"jason@developit.ca"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/developit/preact-render-to-string.git"},"bugs":{"url":"https://github.com/developit/preact-render-to-string/issues"},"homepage":"https://github.com/developit/preact-render-to-string","peerDependencies":{"preact":">=10"},"devDependencies":{"@babel/plugin-transform-react-jsx":"^7.12.12","@babel/preset-env":"^7.12.11","@babel/register":"^7.12.10","@changesets/cli":"^2.18.0","@changesets/changelog-github":"^0.4.1","benchmarkjs-pretty":"^2.0.1","chai":"^4.2.0","copyfiles":"^2.4.1","eslint":"^7.16.0","eslint-config-developit":"^1.2.0","husky":"^4.3.6","lint-staged":"^10.5.3","microbundle":"^0.13.0","mocha":"^8.2.1","preact":"^10.5.7","prettier":"^2.2.1","sinon":"^9.2.2","sinon-chai":"^3.5.0","typescript":"^4.1.3"},"dependencies":{"pretty-format":"^3.8.0"},"prettier":{"singleQuote":true,"trailingComma":"none","useTabs":true,"tabWidth":2},"lint-staged":{"**/*.{js,jsx,ts,tsx,yml}":["prettier --write"]},"husky":{"hooks":{"pre-commit":"lint-staged"}},"mangle":{"compress":{"reduce_funcs":false}},"gitHead":"60075a5a7389d638d535c85f3706739e9ba932bc","_id":"preact-render-to-string@5.2.4","_nodeVersion":"16.13.1","_npmVersion":"8.1.4","dist":{"integrity":"sha512-iIPHb3BXUQ3Za6KNhkjN/waq11Oh+QWWtAgN3id3LrL+cszH3DYh8TxJPNQ6Aogsbu4JsqdJLBZltwPFpG6N6w==","shasum":"7d6a3f76e13fa9df8e81ccdef2f2b02489e5a3fd","tarball":"http://localhost:4545/npm/registry/preact-render-to-string/preact-render-to-string-5.2.4.tgz","fileCount":33,"unpackedSize":375314,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDy7ajI/8pGmXCSyE3y1Vus7g1XufHmo4fHPdd1w96CQQIhAMZj+QxcbpH88RTgrwjpn3SZqsK3PCApv+3XZ8fM1SBU"}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjHObSACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmrwAQ/8CdMloOw1z02DMDHSQEcfmI3payzCCTk+1mBukMu5xIJvhZ3Q\r\n1+QaI0EGIx90d9XzCRlkqghSmy4A0qlYB8w/KTwG/oeeOioHAWsqM+mxl5N7\r\nvtbTFRdVVZHc0xVQ2I6x7gUhcCA3N1gQlmmAApcRYusH2i4tER4u4vl6qUr4\r\n+X3A33oc9qfBFblcaDeuxGnltlfNogm2sN0lEkQec3AyBOV+/OGpD1ZoiGjK\r\n0a/8HfwSDxR/W6vnXuZDyztp20oIfNWfJA80X09sE11+CN6JD8okdscFIF2y\r\n+hU/sfWDcc+JVvR9BpSfjzBOCglF/K7vlJCt2VDR698gvxRAXpbQhjzVuIho\r\nlw9cM7nlvsify+aEa7KaawftuLKq8UXWI0+J/iHRG0QtF9MnJU6lRukRHoVX\r\nt9k793pN4Ua2pydes+Id/JduQW676PAs6YREBphNamvZpOR96G8qCyclaUlI\r\nutvsRWM49hJj5NISX3METk3T95BnLVn++tiTLzHyoaqF1JlxCfoP1NTKDCfk\r\nG508DLQ7n6PoH6s5IBdUGgKsrv/+uCTnCnz470uObFk6NPCjqxtmxzJ9vfk/\r\nP8f+Nk4SaqJdvJZ6ur4qhXi5Xl8TtbmS+0kOsNUfl5GTGCYQZhVozxBWneCa\r\nss1Pemd4G+cF/W/glG4K397iUgRsbtV97fE=\r\n=P48j\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"jdecroock","email":"decroockjovi@gmail.com"},"directories":{},"maintainers":[{"name":"reznord","email":"allamsetty.anup@gmail.com"},{"name":"preactjs","email":"hello@preactjs.com"},{"name":"developit","email":"jason@developit.ca"},{"name":"lukeed","email":"luke@lukeed.com"},{"name":"prateekbh","email":"prateek89born@gmail.com"},{"name":"harmony","email":"npm.leah@hrmny.sh"},{"name":"marvinhagemeister","email":"hello@marvinh.dev"},{"name":"solarliner","email":"solarliner@gmail.com"},{"name":"jdecroock","email":"decroockjovi@gmail.com"},{"name":"sventschui","email":"sventschui@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/preact-render-to-string_5.2.4_1662838482496_0.25384632073230495"},"_hasShrinkwrap":false},"5.2.5":{"name":"preact-render-to-string","amdName":"preactRenderToString","version":"5.2.5","description":"Render JSX to an HTML string, with support for Preact components.","main":"dist/index.js","umd:main":"dist/index.js","module":"dist/index.module.js","jsnext:main":"dist/index.module.js","types":"src/index.d.ts","exports":{".":{"types":"./src/index.d.ts","import":"./dist/index.mjs","browser":"./dist/index.module.js","require":"./dist/index.js"},"./jsx":{"types":"./jsx.d.ts","import":"./dist/jsx.mjs","browser":"./dist/jsx.module.js","require":"./dist/jsx.js"},"./package.json":"./package.json"},"scripts":{"bench":"BABEL_ENV=test node -r @babel/register benchmarks index.js","bench:v8":"BABEL_ENV=test microbundle benchmarks/index.js -f modern --alias benchmarkjs-pretty=benchmarks/lib/benchmark-lite.js --external none --target node --no-compress --no-sourcemap --raw -o benchmarks/.v8.js && v8 --module benchmarks/.v8.modern.js","build":"npm run -s transpile && npm run -s transpile:jsx && npm run -s copy-typescript-definition","postbuild":"node ./config/node-13-exports.js && node ./config/node-commonjs.js","transpile":"microbundle src/index.js -f es,umd --target web --external preact","transpile:jsx":"microbundle src/jsx.js -o dist/jsx.js --target web --external preact && microbundle dist/jsx.js -o dist/jsx.js -f cjs --external preact","copy-typescript-definition":"copyfiles -f src/*.d.ts dist","test":"eslint src test && tsc && npm run test:mocha && npm run bench","test:mocha":"BABEL_ENV=test mocha -r @babel/register -r test/setup.js test/**/[!compat]*.test.js && npm run test:mocha:compat","test:mocha:compat":"BABEL_ENV=test mocha -r @babel/register -r test/setup.js test/compat.test.js","format":"prettier src/**/*.{d.ts,js} test/**/*.js --write","prepublishOnly":"npm run build","release":"npm run build && git commit -am $npm_package_version && git tag $npm_package_version && git push && git push --tags && npm publish"},"keywords":["preact","render","universal","isomorphic"],"eslintConfig":{"extends":"developit","rules":{"react/prefer-stateless-function":0,"react/jsx-no-bind":0,"react/no-danger":0,"jest/valid-expect":0,"new-cap":0,"curly":"off","brace-style":"off","indent":"off"},"settings":{"react":{"version":"16.8"}}},"babel":{"env":{"test":{"presets":[["@babel/preset-env",{"targets":{"node":true}}]],"plugins":[["@babel/plugin-transform-react-jsx",{"pragma":"h"}]]}}},"author":{"name":"Jason Miller","email":"jason@developit.ca"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/developit/preact-render-to-string.git"},"bugs":{"url":"https://github.com/developit/preact-render-to-string/issues"},"homepage":"https://github.com/developit/preact-render-to-string","peerDependencies":{"preact":">=10"},"devDependencies":{"@babel/plugin-transform-react-jsx":"^7.12.12","@babel/preset-env":"^7.12.11","@babel/register":"^7.12.10","@changesets/cli":"^2.18.0","@changesets/changelog-github":"^0.4.1","benchmarkjs-pretty":"^2.0.1","chai":"^4.2.0","copyfiles":"^2.4.1","eslint":"^7.16.0","eslint-config-developit":"^1.2.0","husky":"^4.3.6","lint-staged":"^10.5.3","microbundle":"^0.13.0","mocha":"^8.2.1","preact":"^10.11.1","prettier":"^2.2.1","sinon":"^9.2.2","sinon-chai":"^3.5.0","typescript":"^4.1.3"},"dependencies":{"pretty-format":"^3.8.0"},"prettier":{"singleQuote":true,"trailingComma":"none","useTabs":true,"tabWidth":2},"lint-staged":{"**/*.{js,jsx,ts,tsx,yml}":["prettier --write"]},"husky":{"hooks":{"pre-commit":"lint-staged"}},"mangle":{"compress":{"reduce_funcs":false}},"gitHead":"359a58e8f1f6c501f7087710335d2addba818d90","_id":"preact-render-to-string@5.2.5","_nodeVersion":"16.6.2","_npmVersion":"7.20.3","dist":{"integrity":"sha512-rEBn42C3Wh+AjPxXUbDkb6xw0cTJQgxdYlp6ytUR1uBZF647Wn6ykkopMeQlRl7ggX+qnYYjZ4Hs1abZENl7ww==","shasum":"359b14a45bea2a7b5c0ed2a9c6eb7ea915cf7d5a","tarball":"http://localhost:4545/npm/registry/preact-render-to-string/preact-render-to-string-5.2.5.tgz","fileCount":33,"unpackedSize":371073,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDToZNJsfwcwPfVz1ML2G0ISkFtRYWkLxuxArEX/NLv7gIgD8IEdIIKCN5RK2RsCITmmu+/BaUkMjAMr2L2FKz9slo="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjPynqACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmoV8A/9Eb5ToEr537zf/spGjYKZoLp4LCzEqz4JFBZ69Ljx/auJ+uDR\r\nurHjhJkqvwmYonA3mxDqjB/6lQ8FXa79GZDoFK63dSNL0bX7qcat8JlAmoP3\r\nj479Ne4AGI8NWiRszbEMGni9t3+M2G/AfAIsEN0PCWcWkDrSesFKoLUbUyMS\r\n4pOSwG15HdAPzZD33C9l0Phe8cnV+6qGslpViiQQeNN+UtlQ9u0lEaxSrEIU\r\nw6kqSb0Mk6oW1D9H4/WKetIr1w54pvBI/9hrmbbxj6Sv9NWCt3jzXuMcjYeR\r\ntBCnN5z70NL/+ymh6cofwdJbs2AftRAE8ZIvhsXjTiNadeaMzLKW7Q3ne9ra\r\nR7s+AZdGaKapRJvQu3Y7ZTXt3Sp8QsWNThUr55RhFV6mjmLuW1ZbIS6OK/34\r\ndxpspTmfrQRZeHWz0R9UUXWfj0lMNBb+kqAk/L65siJz7ONCFvZ9msGhTtVL\r\nYpF2IyAMvQyh2ZwpF+ZfiVFtKXSBPTcGI3aez0pBBOoIwtxZRIaTRlh9VZpV\r\nHvVGZ1Xk8AfcCrde7k2+iD/ySL4970BGT3mH9ehGM/iUN84mcMdQ46BDyAf7\r\nACOXuvRV6CbU9yDn1aGuhCNslzry5ltvMz8wkGYu2IcZmRcrqWZ1WjXiZJf4\r\nhc7flnC75N2r3ZKwMuBeVdO0+iQUpqwDU4k=\r\n=I0lE\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"marvinhagemeister","email":"hello@marvinh.dev"},"directories":{},"maintainers":[{"name":"drewigg","email":"drewigg@gmail.com"},{"name":"reznord","email":"allamsetty.anup@gmail.com"},{"name":"preactjs","email":"hello@preactjs.com"},{"name":"developit","email":"jason@developit.ca"},{"name":"lukeed","email":"luke@lukeed.com"},{"name":"prateekbh","email":"prateek89born@gmail.com"},{"name":"harmony","email":"npm.leah@hrmny.sh"},{"name":"marvinhagemeister","email":"hello@marvinh.dev"},{"name":"solarliner","email":"solarliner@gmail.com"},{"name":"jdecroock","email":"decroockjovi@gmail.com"},{"name":"sventschui","email":"sventschui@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/preact-render-to-string_5.2.5_1665083882345_0.5509972528849694"},"_hasShrinkwrap":false},"5.2.6":{"name":"preact-render-to-string","amdName":"preactRenderToString","version":"5.2.6","description":"Render JSX to an HTML string, with support for Preact components.","main":"dist/index.js","umd:main":"dist/index.js","module":"dist/index.module.js","jsnext:main":"dist/index.module.js","types":"src/index.d.ts","exports":{".":{"types":"./src/index.d.ts","import":"./dist/index.mjs","browser":"./dist/index.module.js","require":"./dist/index.js"},"./jsx":{"types":"./jsx.d.ts","import":"./dist/jsx.mjs","browser":"./dist/jsx.module.js","require":"./dist/jsx.js"},"./package.json":"./package.json"},"scripts":{"bench":"BABEL_ENV=test node -r @babel/register benchmarks index.js","bench:v8":"BABEL_ENV=test microbundle benchmarks/index.js -f modern --alias benchmarkjs-pretty=benchmarks/lib/benchmark-lite.js --external none --target node --no-compress --no-sourcemap --raw -o benchmarks/.v8.js && v8 --module benchmarks/.v8.modern.js","build":"npm run -s transpile && npm run -s transpile:jsx && npm run -s copy-typescript-definition","postbuild":"node ./config/node-13-exports.js && node ./config/node-commonjs.js","transpile":"microbundle src/index.js -f es,umd --target web --external preact","transpile:jsx":"microbundle src/jsx.js -o dist/jsx.js --target web --external preact && microbundle dist/jsx.js -o dist/jsx.js -f cjs --external preact","copy-typescript-definition":"copyfiles -f src/*.d.ts dist","test":"eslint src test && tsc && npm run test:mocha && npm run test:mocha:compat && npm run test:mocha:debug && npm run bench","test:mocha":"BABEL_ENV=test mocha -r @babel/register -r test/setup.js test/**/[!compat][!debug]*.test.js","test:mocha:compat":"BABEL_ENV=test mocha -r @babel/register -r test/setup.js test/compat.test.js 'test/compat-*.test.js'","test:mocha:debug":"BABEL_ENV=test mocha -r @babel/register -r test/setup.js test/debug.test.js 'test/debug-*.test.js'","format":"prettier src/**/*.{d.ts,js} test/**/*.js --write","prepublishOnly":"npm run build","release":"npm run build && git commit -am $npm_package_version && git tag $npm_package_version && git push && git push --tags && npm publish"},"keywords":["preact","render","universal","isomorphic"],"eslintConfig":{"extends":"developit","rules":{"react/prefer-stateless-function":0,"react/jsx-no-bind":0,"react/no-danger":0,"jest/valid-expect":0,"new-cap":0,"curly":"off","brace-style":"off","indent":"off"},"settings":{"react":{"version":"16.8"}}},"babel":{"env":{"test":{"presets":[["@babel/preset-env",{"targets":{"node":true}}]],"plugins":[["@babel/plugin-transform-react-jsx",{"pragma":"h"}]]}}},"author":{"name":"Jason Miller","email":"jason@developit.ca"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/developit/preact-render-to-string.git"},"bugs":{"url":"https://github.com/developit/preact-render-to-string/issues"},"homepage":"https://github.com/developit/preact-render-to-string","peerDependencies":{"preact":">=10"},"devDependencies":{"@babel/plugin-transform-react-jsx":"^7.12.12","@babel/preset-env":"^7.12.11","@babel/register":"^7.12.10","@changesets/cli":"^2.18.0","@changesets/changelog-github":"^0.4.1","benchmarkjs-pretty":"^2.0.1","chai":"^4.2.0","copyfiles":"^2.4.1","eslint":"^7.16.0","eslint-config-developit":"^1.2.0","husky":"^4.3.6","lint-staged":"^10.5.3","microbundle":"^0.13.0","mocha":"^8.2.1","preact":"^10.11.1","prettier":"^2.2.1","sinon":"^9.2.2","sinon-chai":"^3.5.0","typescript":"^4.1.3"},"dependencies":{"pretty-format":"^3.8.0"},"prettier":{"singleQuote":true,"trailingComma":"none","useTabs":true,"tabWidth":2},"lint-staged":{"**/*.{js,jsx,ts,tsx,yml}":["prettier --write"]},"husky":{"hooks":{"pre-commit":"lint-staged"}},"mangle":{"compress":{"reduce_funcs":false}},"gitHead":"2dbc28fe25d613976630b0cb64b0c1e4ac69a3e3","_id":"preact-render-to-string@5.2.6","_nodeVersion":"16.6.2","_npmVersion":"7.20.3","dist":{"integrity":"sha512-JyhErpYOvBV1hEPwIxc/fHWXPfnEGdRKxc8gFdAZ7XV4tlzyzG847XAyEZqoDnynP88akM4eaHcSOzNcLWFguw==","shasum":"0ff0c86cd118d30affb825193f18e92bd59d0604","tarball":"http://localhost:4545/npm/registry/preact-render-to-string/preact-render-to-string-5.2.6.tgz","fileCount":33,"unpackedSize":380306,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDOqus2dnYWSoeCUxxDeVYYTQix4WP1oUsCPMTFWZ69lAIgVypxTPX89MgzXAYr+LsUZldpY1hgg+c2nSamNqAa5dg="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjVWHuACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmqYqA//Xm6//23IHRJET3yuyzcwK5AhIZ4nH0lrRrkdu/wZF9V97pdJ\r\nvNSd5lxym+FF/ESgIBX2YECnlmAIfpDZMrOmquct5ZK9kMGfps+QqbBMpfyW\r\niy2TPK819BVX+p154or6E42S6yDRCayLpPfXYVBZSW0+UHCI8uFkhOtiAUWi\r\ntdjr0zdKg9LbxJtbwqwHvnniYpJjkKZtnszo2Q2LWZp8s1h7e07MBnwL4tyf\r\nYeBM29iuvuY8k64qqrR54gGOZn5ehliQHA4iOv5vTYnpN4FK5HPAUKXJjWqn\r\nqnSL/MJLP+iYkIefqOS/rrmcsNdqaa+cugarNsAQ0KOKM4v3iC5lfTAY9jU9\r\nd6ck0bRf3Cg1IyDt93kgiiCcLrEhWBa3pziK88U89oBmU3aBR20tgmgJ8HKF\r\nn/1qjvdGh1c29c6hGwGO4LrZsayFaUqFXxVgCgXDmaTkD09BIcpcPSbmtIGB\r\nqNG/EZH51n4wTr24anNfCUqxALEjNRhvQMhPc1MlLX1lrLwMbBgbZzJOJiT5\r\nuXe+yc668NFKzTex9imWAcxSCAY9NsbDfBn40iiAXfHCdfzbsht7lDd1QgsR\r\nwain5mnJs49zrl/lYiveO68sZI8YYL1qhVQWYxiuzxbhyHaeLBEnv20gKW1L\r\nWHwCuG6l4HxmoKS9aoBzVG/KjxJfpgxHmK8=\r\n=FIBj\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"marvinhagemeister","email":"hello@marvinh.dev"},"directories":{},"maintainers":[{"name":"jviide","email":"jviide@iki.fi"},{"name":"drewigg","email":"drewigg@gmail.com"},{"name":"reznord","email":"allamsetty.anup@gmail.com"},{"name":"preactjs","email":"hello@preactjs.com"},{"name":"developit","email":"jason@developit.ca"},{"name":"lukeed","email":"luke@lukeed.com"},{"name":"prateekbh","email":"prateek89born@gmail.com"},{"name":"harmony","email":"npm.leah@hrmny.sh"},{"name":"marvinhagemeister","email":"hello@marvinh.dev"},{"name":"solarliner","email":"solarliner@gmail.com"},{"name":"jdecroock","email":"decroockjovi@gmail.com"},{"name":"sventschui","email":"sventschui@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/preact-render-to-string_5.2.6_1666540014517_0.8406006287395256"},"_hasShrinkwrap":false},"6.0.0":{"name":"preact-render-to-string","amdName":"preactRenderToString","version":"6.0.0","description":"Render JSX to an HTML string, with support for Preact components.","main":"dist/index.js","umd:main":"dist/index.umd.js","module":"dist/index.module.js","jsnext:main":"dist/index.module.js","types":"src/index.d.ts","exports":{".":{"types":"./src/index.d.ts","browser":"./dist/index.module.js","umd":"./dist/index.umd.js","import":"./dist/index.mjs","require":"./dist/index.js"},"./jsx":{"types":"./jsx.d.ts","browser":"./dist/jsx.module.js","umd":"./dist/jsx.umd.js","import":"./dist/jsx.mjs","require":"./dist/jsx.js"},"./package.json":"./package.json"},"scripts":{"bench":"BABEL_ENV=test node -r @babel/register benchmarks index.js","bench:v8":"BABEL_ENV=test microbundle benchmarks/index.js -f modern --alias benchmarkjs-pretty=benchmarks/lib/benchmark-lite.js --external none --target node --no-compress --no-sourcemap --raw -o benchmarks/.v8.mjs && v8 --module benchmarks/.v8.mjs","build":"npm run -s transpile && npm run -s transpile:jsx && npm run -s copy-typescript-definition","postbuild":"node ./config/node-13-exports.js && node ./config/node-commonjs.js","transpile":"microbundle src/index.js -f es,cjs,umd --target web --external preact","transpile:jsx":"microbundle src/jsx.js -o dist/jsx.js --target web --external preact && microbundle dist/jsx.js -o dist/jsx.js -f cjs --external preact","copy-typescript-definition":"copyfiles -f src/*.d.ts dist","test":"eslint src test && tsc && npm run test:mocha && npm run test:mocha:compat && npm run test:mocha:debug && npm run bench","test:mocha":"BABEL_ENV=test mocha -r @babel/register -r test/setup.js test/*.test.js","test:mocha:compat":"BABEL_ENV=test mocha -r @babel/register -r test/setup.js 'test/compat/index.test.js'","test:mocha:debug":"BABEL_ENV=test mocha -r @babel/register -r test/setup.js 'test/debug/index.test.js'","format":"prettier src/**/*.{d.ts,js} test/**/*.js --write","prepublishOnly":"npm run build","release":"npm run build && git commit -am $npm_package_version && git tag $npm_package_version && git push && git push --tags && npm publish"},"keywords":["preact","render","universal","isomorphic"],"eslintConfig":{"extends":"developit","rules":{"react/prefer-stateless-function":0,"react/jsx-no-bind":0,"react/no-danger":0,"jest/valid-expect":0,"new-cap":0,"curly":"off","brace-style":"off","indent":"off"},"settings":{"react":{"version":"16.8"}}},"babel":{"env":{"test":{"presets":[["@babel/preset-env",{"targets":{"node":true}}]],"plugins":[["@babel/plugin-transform-react-jsx",{"pragma":"h"}]]}}},"minify":{"compress":{"reduce_funcs":false}},"author":{"name":"Jason Miller","email":"jason@developit.ca"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/developit/preact-render-to-string.git"},"bugs":{"url":"https://github.com/developit/preact-render-to-string/issues"},"homepage":"https://github.com/developit/preact-render-to-string","peerDependencies":{"preact":">=10"},"devDependencies":{"@babel/plugin-transform-react-jsx":"^7.12.12","@babel/preset-env":"^7.12.11","@babel/register":"^7.12.10","@changesets/changelog-github":"^0.4.1","@changesets/cli":"^2.18.0","benchmarkjs-pretty":"^2.0.1","chai":"^4.2.0","copyfiles":"^2.4.1","eslint":"^7.16.0","eslint-config-developit":"^1.2.0","husky":"^4.3.6","lint-staged":"^10.5.3","microbundle":"^0.15.1","mocha":"^8.2.1","baseline-rts":"npm:preact-render-to-string@latest","preact":"^10.13.0","prettier":"^2.2.1","sinon":"^9.2.2","sinon-chai":"^3.5.0","typescript":"^5.0.0"},"dependencies":{"pretty-format":"^3.8.0"},"prettier":{"singleQuote":true,"trailingComma":"none","useTabs":true,"tabWidth":2},"lint-staged":{"**/*.{js,jsx,ts,tsx,yml}":["prettier --write"]},"husky":{"hooks":{"pre-commit":"lint-staged"}},"gitHead":"2484cd4a975eafd3af95da6031aa0c85b58ceba5","_id":"preact-render-to-string@6.0.0","_nodeVersion":"16.13.1","_npmVersion":"8.1.4","dist":{"integrity":"sha512-ROmdw0igiAlXW+XtLBBLkesI55dpBwo7i+LIRBEJDK4AyQv7rKaFZKb3SZ3YfurRH3wPb47xYvf+NMzlPdJ5mA==","shasum":"18f75530099f323b56098b8b8e25643a394fd4f2","tarball":"http://localhost:4545/npm/registry/preact-render-to-string/preact-render-to-string-6.0.0.tgz","fileCount":37,"unpackedSize":355731,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIC6SofN8o/9KcKgQOgF9aGxLjMLF8KYlq+IK/zlxFdhKAiEAjVqKlwKx0XGvx3vEUixpbWstZ80Edx4GVn9ZwXP+ypE="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJkIT6BACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmqm7hAAibswxSKryriu+M7sBRj7I7mw/T8bMuv95lShAXxwsYyF+Lgg\r\n37kNs23UC/yNMjjaBfdLFVzt0K79ccUW14YXw7u+dP6OjvdCevet0zO9F3x/\r\ng7fjonffK5gBaE0sUdRddavRmdLXrq8KqwEhugtELqBd/e3wMLwol+KeaLur\r\nbYCCmSrCKHiniClIaFac1bBpq6Vjm1uLNe8MtG5u881ga1BwwzR+zE8bgIRc\r\nCiIuKOHBAFmc5lEoLYHgFx6rBcqd5GdRxrFhwXwBkRlwfp+BwsbRrvyKy1nS\r\nM6k5h8mRc94XAl4vU/4LvECjpbH9F+g8m+Nm3FIDJrLAzBsZOXIFXQNu+Xlz\r\nqj0TCinTTmFzxc+VTaED8wOhAkG+RgeBR+yikpG4QoCzRGU4CbYCV7KLqKlC\r\nybCieE5D0GuarUSbsL6N94OQx8EBDOpZUwAYpXUrv/TvRH5IIQYkzFrgsZ7q\r\nniCt6zx8GysI5lbXy5rR0OHYHoFrDShfeh6q74XZn6j86ETBUq86CStIin9e\r\nyK3/L+rfYLL6f6BqVrFafrw7vF+KFBSwemddp6UowbkxT5yquAhgJJqeaaS+\r\nV0qTNYshD+u0AHg8PxzK5Itzfw9RMxlcMv8vytpMYReJKg5+re02GoTOrtJ9\r\nYt1PC5940p8nbrOIbNU1r4aebUVgHvZfkdE=\r\n=OlbJ\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"jdecroock","email":"decroockjovi@gmail.com"},"directories":{},"maintainers":[{"name":"drewigg","email":"drewigg@gmail.com"},{"name":"reznord","email":"allamsetty.anup@gmail.com"},{"name":"preactjs","email":"hello@preactjs.com"},{"name":"developit","email":"jason@developit.ca"},{"name":"lukeed","email":"luke@lukeed.com"},{"name":"prateekbh","email":"prateek89born@gmail.com"},{"name":"harmony","email":"npm.leah@hrmny.sh"},{"name":"marvinhagemeister","email":"hello@marvinh.dev"},{"name":"solarliner","email":"solarliner@gmail.com"},{"name":"jdecroock","email":"decroockjovi@gmail.com"},{"name":"sventschui","email":"sventschui@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/preact-render-to-string_6.0.0_1679900288834_0.22463317544315808"},"_hasShrinkwrap":false},"6.0.1":{"name":"preact-render-to-string","amdName":"preactRenderToString","version":"6.0.1","description":"Render JSX to an HTML string, with support for Preact components.","main":"dist/index.js","umd:main":"dist/index.umd.js","module":"dist/index.module.js","jsnext:main":"dist/index.module.js","types":"src/index.d.ts","exports":{".":{"types":"./src/index.d.ts","browser":"./dist/index.module.js","umd":"./dist/index.umd.js","import":"./dist/index.mjs","require":"./dist/index.js"},"./jsx":{"types":"./jsx.d.ts","browser":"./dist/jsx.module.js","umd":"./dist/jsx.umd.js","import":"./dist/jsx.mjs","require":"./dist/jsx.js"},"./package.json":"./package.json"},"scripts":{"bench":"BABEL_ENV=test node -r @babel/register benchmarks index.js","bench:v8":"BABEL_ENV=test microbundle benchmarks/index.js -f modern --alias benchmarkjs-pretty=benchmarks/lib/benchmark-lite.js --external none --target node --no-compress --no-sourcemap --raw -o benchmarks/.v8.mjs && v8 --module benchmarks/.v8.mjs","build":"npm run -s transpile && npm run -s transpile:jsx && npm run -s copy-typescript-definition","postbuild":"node ./config/node-13-exports.js && node ./config/node-commonjs.js","transpile":"microbundle src/index.js -f es,cjs,umd --target web --external preact","transpile:jsx":"microbundle src/jsx.js -o dist/jsx.js --target web --external preact && microbundle dist/jsx.js -o dist/jsx.js -f cjs --external preact","copy-typescript-definition":"copyfiles -f src/*.d.ts dist","test":"eslint src test && tsc && npm run test:mocha && npm run test:mocha:compat && npm run test:mocha:debug && npm run bench","test:mocha":"BABEL_ENV=test mocha -r @babel/register -r test/setup.js test/*.test.js","test:mocha:compat":"BABEL_ENV=test mocha -r @babel/register -r test/setup.js 'test/compat/index.test.js'","test:mocha:debug":"BABEL_ENV=test mocha -r @babel/register -r test/setup.js 'test/debug/index.test.js'","format":"prettier src/**/*.{d.ts,js} test/**/*.js --write","prepublishOnly":"npm run build","release":"npm run build && git commit -am $npm_package_version && git tag $npm_package_version && git push && git push --tags && npm publish"},"keywords":["preact","render","universal","isomorphic"],"eslintConfig":{"extends":"developit","rules":{"react/prefer-stateless-function":0,"react/jsx-no-bind":0,"react/no-danger":0,"jest/valid-expect":0,"new-cap":0,"curly":"off","brace-style":"off","indent":"off"},"settings":{"react":{"version":"16.8"}}},"babel":{"env":{"test":{"presets":[["@babel/preset-env",{"targets":{"node":true}}]],"plugins":[["@babel/plugin-transform-react-jsx",{"pragma":"h"}]]}}},"minify":{"compress":{"reduce_funcs":false}},"author":{"name":"Jason Miller","email":"jason@developit.ca"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/developit/preact-render-to-string.git"},"bugs":{"url":"https://github.com/developit/preact-render-to-string/issues"},"homepage":"https://github.com/developit/preact-render-to-string","peerDependencies":{"preact":">=10"},"devDependencies":{"@babel/plugin-transform-react-jsx":"^7.12.12","@babel/preset-env":"^7.12.11","@babel/register":"^7.12.10","@changesets/changelog-github":"^0.4.1","@changesets/cli":"^2.18.0","benchmarkjs-pretty":"^2.0.1","chai":"^4.2.0","copyfiles":"^2.4.1","eslint":"^7.16.0","eslint-config-developit":"^1.2.0","husky":"^4.3.6","lint-staged":"^10.5.3","microbundle":"^0.15.1","mocha":"^8.2.1","baseline-rts":"npm:preact-render-to-string@latest","preact":"^10.13.0","prettier":"^2.2.1","sinon":"^9.2.2","sinon-chai":"^3.5.0","typescript":"^5.0.0"},"dependencies":{"pretty-format":"^3.8.0"},"prettier":{"singleQuote":true,"trailingComma":"none","useTabs":true,"tabWidth":2},"lint-staged":{"**/*.{js,jsx,ts,tsx,yml}":["prettier --write"]},"husky":{"hooks":{"pre-commit":"lint-staged"}},"gitHead":"2e1c08cc3856310cfaffee1563e7a3e0ef8013d3","_id":"preact-render-to-string@6.0.1","_nodeVersion":"18.15.0","_npmVersion":"9.5.0","dist":{"integrity":"sha512-G/dkCl1x6qSNoah1EZAf/0Q7Fmqiz44mZbFyyvL1ZYXYrMbOBY28NWO6kCLKSrqZSsvNz6IcMa01EmI+o191RA==","shasum":"1f25bb728dceb6a3579ce9d8e3da72aa898088cc","tarball":"http://localhost:4545/npm/registry/preact-render-to-string/preact-render-to-string-6.0.1.tgz","fileCount":37,"unpackedSize":381214,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCFthgMtnZxnZMz02k2FHbfWFlrxoZn5yfge08HKUtkfgIgSDtkhhl/116Mb6fqFk7DkFj/TzjfLx8nyeCE3Md51PM="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJkIsCPACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmoyWw/8CL9DZAEVHIlL9r2LIxFvD4jfr5ffrw5n7tr/6RutE9yMUFju\r\n+Y63maeQCtDsCz3UiZ4DOdFjaKG7/xxHoVcYJfpHjGEPdLxwJOg6u9DRLqXf\r\nBJLi10JmXIIBxfiUK960XHTXrS5KlNCWru8WgO7n/S5trxNQyb0oKs6uGDzv\r\nmrgEJ7YA7P1+3AYSqX/F0ZUOduU8wqQSR6s2ON3LeF/LOPQrAD++0p/xplJv\r\nmj6NBLUbTQHBOZVC75ZewV3ZiN1N2g61Y88vYtyEKQFOw7Wyx++RoVrzanwq\r\nn1EnEOcPO6R/0xfBTDV4rHYf/VZB5Pm5s58z15dE+OfzeUqmvJ+TWqL73cmZ\r\ni5wcWLdHEmz3GcgR2IIkxwzspII9qbygKFwIicOSPsk6lN0aXN19S+kobNe9\r\nqeCEVXoqpJ+GaAjXJxXCiNqiaH+FH7o4kwmSyfhlyfE16Dfxttf2OIZk7EHy\r\nqjKjZk1jfv7TUEbju2L//kiFtW8fUYeJ+i0xGq1JCw22GWxE7DOe10/UhBgH\r\n1hZbnKA8Vn/Z6y5S7x4BfAifsSdQfeDIi/zy0Qvg57gBy2ipWtM1l9l3uAQf\r\nigQM92/59nUdp9LRqVB1PVRjCzvv/2Vh9CC0itSw42z3LkvjmWXS0GJHNksl\r\n9FY3I/3wr1PSZKi2e0JMIF/BvAX3ztYhbag=\r\n=d5Co\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"marvinhagemeister","email":"hello@marvinh.dev"},"directories":{},"maintainers":[{"name":"drewigg","email":"drewigg@gmail.com"},{"name":"reznord","email":"allamsetty.anup@gmail.com"},{"name":"preactjs","email":"hello@preactjs.com"},{"name":"developit","email":"jason@developit.ca"},{"name":"lukeed","email":"luke@lukeed.com"},{"name":"prateekbh","email":"prateek89born@gmail.com"},{"name":"harmony","email":"npm.leah@hrmny.sh"},{"name":"marvinhagemeister","email":"hello@marvinh.dev"},{"name":"solarliner","email":"solarliner@gmail.com"},{"name":"jdecroock","email":"decroockjovi@gmail.com"},{"name":"sventschui","email":"sventschui@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/preact-render-to-string_6.0.1_1679999119562_0.67529308141194"},"_hasShrinkwrap":false},"6.0.2":{"name":"preact-render-to-string","amdName":"preactRenderToString","version":"6.0.2","description":"Render JSX to an HTML string, with support for Preact components.","main":"dist/index.js","umd:main":"dist/index.umd.js","module":"dist/index.module.js","jsnext:main":"dist/index.module.js","types":"src/index.d.ts","exports":{".":{"types":"./src/index.d.ts","browser":"./dist/index.module.js","umd":"./dist/index.umd.js","import":"./dist/index.mjs","require":"./dist/index.js"},"./jsx":{"types":"./jsx.d.ts","browser":"./dist/jsx.module.js","umd":"./dist/jsx.umd.js","import":"./dist/jsx.mjs","require":"./dist/jsx.js"},"./package.json":"./package.json"},"scripts":{"bench":"BABEL_ENV=test node -r @babel/register benchmarks index.js","bench:v8":"BABEL_ENV=test microbundle benchmarks/index.js -f modern --alias benchmarkjs-pretty=benchmarks/lib/benchmark-lite.js --external none --target node --no-compress --no-sourcemap --raw -o benchmarks/.v8.mjs && v8 --module benchmarks/.v8.mjs","build":"npm run -s transpile && npm run -s transpile:jsx && npm run -s copy-typescript-definition","postbuild":"node ./config/node-13-exports.js && node ./config/node-commonjs.js && node ./config/node-verify-exports.js","transpile":"microbundle src/index.js -f es,cjs,umd --target web --external preact","transpile:jsx":"microbundle src/jsx.js -o dist/jsx.js --target web --external preact && microbundle dist/jsx.js -o dist/jsx.js -f cjs --external preact","copy-typescript-definition":"copyfiles -f src/*.d.ts dist","test":"eslint src test && tsc && npm run test:mocha && npm run test:mocha:compat && npm run test:mocha:debug && npm run bench","test:mocha":"BABEL_ENV=test mocha -r @babel/register -r test/setup.js test/*.test.js","test:mocha:compat":"BABEL_ENV=test mocha -r @babel/register -r test/setup.js 'test/compat/index.test.js'","test:mocha:debug":"BABEL_ENV=test mocha -r @babel/register -r test/setup.js 'test/debug/index.test.js'","format":"prettier src/**/*.{d.ts,js} test/**/*.js --write","prepublishOnly":"npm run build","release":"npm run build && git commit -am $npm_package_version && git tag $npm_package_version && git push && git push --tags && npm publish"},"keywords":["preact","render","universal","isomorphic"],"eslintConfig":{"extends":"developit","rules":{"react/prefer-stateless-function":0,"react/jsx-no-bind":0,"react/no-danger":0,"jest/valid-expect":0,"new-cap":0,"curly":"off","brace-style":"off","indent":"off"},"settings":{"react":{"version":"16.8"}}},"babel":{"env":{"test":{"presets":[["@babel/preset-env",{"targets":{"node":true}}]],"plugins":[["@babel/plugin-transform-react-jsx",{"pragma":"h"}]]}}},"minify":{"compress":{"reduce_funcs":false}},"author":{"name":"Jason Miller","email":"jason@developit.ca"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/developit/preact-render-to-string.git"},"bugs":{"url":"https://github.com/developit/preact-render-to-string/issues"},"homepage":"https://github.com/developit/preact-render-to-string","peerDependencies":{"preact":">=10"},"devDependencies":{"@babel/plugin-transform-react-jsx":"^7.12.12","@babel/preset-env":"^7.12.11","@babel/register":"^7.12.10","@changesets/changelog-github":"^0.4.1","@changesets/cli":"^2.18.0","benchmarkjs-pretty":"^2.0.1","chai":"^4.2.0","copyfiles":"^2.4.1","eslint":"^7.16.0","eslint-config-developit":"^1.2.0","husky":"^4.3.6","lint-staged":"^10.5.3","microbundle":"^0.15.1","mocha":"^8.2.1","baseline-rts":"npm:preact-render-to-string@latest","preact":"^10.13.0","prettier":"^2.2.1","sinon":"^9.2.2","sinon-chai":"^3.5.0","typescript":"^5.0.0"},"dependencies":{"pretty-format":"^3.8.0"},"prettier":{"singleQuote":true,"trailingComma":"none","useTabs":true,"tabWidth":2},"lint-staged":{"**/*.{js,jsx,ts,tsx,yml}":["prettier --write"]},"husky":{"hooks":{"pre-commit":"lint-staged"}},"gitHead":"a9817ff0f177d58f5c8401bd3fce9d9c948a8eec","_id":"preact-render-to-string@6.0.2","_nodeVersion":"18.15.0","_npmVersion":"9.5.0","dist":{"integrity":"sha512-/dls6xmcFc8PvnCVke5Hu5ll70pZZu+jZuvw3i/ya2CNu6B0ev9F937+oFyzdlNKVp68III89oYMbE6dcmuyRA==","shasum":"79fa4840757cd91ab9e8a119429609552e2057f9","tarball":"http://localhost:4545/npm/registry/preact-render-to-string/preact-render-to-string-6.0.2.tgz","fileCount":38,"unpackedSize":405695,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEeEH1/UsqwachML4/r/7qrfEnYtYUr1T2T2cpV1MCTDAiEAqxxo0A4WoDTP8uZIGIuVKhLVw7Exz53U8xvHX7fUl88="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJkJCVoACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmqN0w//cU2JZSl/69hhZEvsYmuXf6QiwJBZiiuGHjD1j77+mHe73rV0\r\ncW+zo794W8WaSC/SZKf8Fadib1rw5M+OQkxEHbVgsB+e2XwbbXydeeF1Yvqk\r\nZGErwIPx6k7ZRKDD6IMQ7EfBZsLUIuZqjUoDgRPaFekR3b/FENCjMUbTtlNt\r\ncV16Kep2clrjolvmgLx7fSxChADCvrt5g8m+aCTwWwxUrTtKcH7z2SbRw7wj\r\nMj8qPsqMMf4D9qJ2giShjmgSyKM7aEsnqPNP9z42pcgI7aLkXQ97V0ZzsW0f\r\nwJr6beELQWeXxlI+m5WSVL8KwyCepdedOrGKbuTqdXwHpedND98ev5h/fwTQ\r\nxHW2YfLrLjqKTJZbjkb80jPXBivhskRvNk22zB50m1MYLFTd9pqPaEfUMhAA\r\ng/p8yegZrTPQ/bRNgd4fxud3bRujoyqonTk9ScSwUIaJzUsMDQnJuFu/nilJ\r\nw/G9mZca4Gy41D8wOv4NCgiV44OqGaai7x6vbDQh+qtRM11AyDisaPxB16Og\r\nDndL1eQNNGBEusRbj3dx00ectNAppFRrOtoLmuelOjirBQK4gJlVvlORzo+e\r\nPf8TvAVVZfSWUQwrWgJmkxEAvMc2vO5eAqq9kFu8icdW+pslF/gE0uR0+epk\r\n8+c7c8HLn1MbUnkwfaCcGYGfpxKkaKBTTrI=\r\n=FQcJ\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"marvinhagemeister","email":"hello@marvinh.dev"},"directories":{},"maintainers":[{"name":"drewigg","email":"drewigg@gmail.com"},{"name":"reznord","email":"allamsetty.anup@gmail.com"},{"name":"preactjs","email":"hello@preactjs.com"},{"name":"developit","email":"jason@developit.ca"},{"name":"lukeed","email":"luke@lukeed.com"},{"name":"prateekbh","email":"prateek89born@gmail.com"},{"name":"harmony","email":"npm.leah@hrmny.sh"},{"name":"marvinhagemeister","email":"hello@marvinh.dev"},{"name":"solarliner","email":"solarliner@gmail.com"},{"name":"jdecroock","email":"decroockjovi@gmail.com"},{"name":"sventschui","email":"sventschui@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/preact-render-to-string_6.0.2_1680090472084_0.5432064131542036"},"_hasShrinkwrap":false},"6.0.3":{"name":"preact-render-to-string","amdName":"preactRenderToString","version":"6.0.3","description":"Render JSX to an HTML string, with support for Preact components.","main":"dist/index.js","umd:main":"dist/index.umd.js","module":"dist/index.module.js","jsnext:main":"dist/index.module.js","types":"src/index.d.ts","exports":{".":{"types":"./src/index.d.ts","browser":"./dist/index.module.js","umd":"./dist/index.umd.js","import":"./dist/index.mjs","require":"./dist/index.js"},"./jsx":{"types":"./jsx.d.ts","browser":"./dist/jsx.module.js","umd":"./dist/jsx.umd.js","import":"./dist/jsx.mjs","require":"./dist/jsx.js"},"./package.json":"./package.json"},"scripts":{"bench":"BABEL_ENV=test node -r @babel/register benchmarks index.js","bench:v8":"BABEL_ENV=test microbundle benchmarks/index.js -f modern --alias benchmarkjs-pretty=benchmarks/lib/benchmark-lite.js --external none --target node --no-compress --no-sourcemap --raw -o benchmarks/.v8.mjs && v8 --module benchmarks/.v8.mjs","build":"npm run -s transpile && npm run -s transpile:jsx && npm run -s copy-typescript-definition","postbuild":"node ./config/node-13-exports.js && node ./config/node-commonjs.js && node ./config/node-verify-exports.js","transpile":"microbundle src/index.js -f es,cjs,umd --target web --external preact","transpile:jsx":"microbundle src/jsx.js -o dist/jsx.js --target web --external preact && microbundle dist/jsx.js -o dist/jsx.js -f cjs --external preact","copy-typescript-definition":"copyfiles -f src/*.d.ts dist","test":"eslint src test && tsc && npm run test:mocha && npm run test:mocha:compat && npm run test:mocha:debug && npm run bench","test:mocha":"BABEL_ENV=test mocha -r @babel/register -r test/setup.js test/*.test.js","test:mocha:compat":"BABEL_ENV=test mocha -r @babel/register -r test/setup.js 'test/compat/index.test.js'","test:mocha:debug":"BABEL_ENV=test mocha -r @babel/register -r test/setup.js 'test/debug/index.test.js'","format":"prettier src/**/*.{d.ts,js} test/**/*.js --write","prepublishOnly":"npm run build","release":"npm run build && git commit -am $npm_package_version && git tag $npm_package_version && git push && git push --tags && npm publish"},"keywords":["preact","render","universal","isomorphic"],"eslintConfig":{"extends":"developit","rules":{"react/prefer-stateless-function":0,"react/jsx-no-bind":0,"react/no-danger":0,"jest/valid-expect":0,"new-cap":0,"curly":"off","brace-style":"off","indent":"off"},"settings":{"react":{"version":"16.8"}}},"babel":{"env":{"test":{"presets":[["@babel/preset-env",{"targets":{"node":true}}]],"plugins":[["@babel/plugin-transform-react-jsx",{"pragma":"h"}]]}}},"minify":{"compress":{"reduce_funcs":false}},"author":{"name":"Jason Miller","email":"jason@developit.ca"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/developit/preact-render-to-string.git"},"bugs":{"url":"https://github.com/developit/preact-render-to-string/issues"},"homepage":"https://github.com/developit/preact-render-to-string","peerDependencies":{"preact":">=10"},"devDependencies":{"@babel/plugin-transform-react-jsx":"^7.12.12","@babel/preset-env":"^7.12.11","@babel/register":"^7.12.10","@changesets/changelog-github":"^0.4.1","@changesets/cli":"^2.18.0","benchmarkjs-pretty":"^2.0.1","chai":"^4.2.0","copyfiles":"^2.4.1","eslint":"^7.16.0","eslint-config-developit":"^1.2.0","husky":"^4.3.6","lint-staged":"^10.5.3","microbundle":"^0.15.1","mocha":"^8.2.1","baseline-rts":"npm:preact-render-to-string@latest","preact":"^10.13.0","prettier":"^2.2.1","sinon":"^9.2.2","sinon-chai":"^3.5.0","typescript":"^5.0.0"},"dependencies":{"pretty-format":"^3.8.0"},"prettier":{"singleQuote":true,"trailingComma":"none","useTabs":true,"tabWidth":2},"lint-staged":{"**/*.{js,jsx,ts,tsx,yml}":["prettier --write"]},"husky":{"hooks":{"pre-commit":"lint-staged"}},"gitHead":"bf9575539f97427200a685fe61c31606464e4290","_id":"preact-render-to-string@6.0.3","_nodeVersion":"18.15.0","_npmVersion":"9.5.0","dist":{"integrity":"sha512-UUP+EtmLw5ns0fT9C7+CTdLawm1wLmlrZ6WKzJ4Jwhb4EBu4vy5ufIZKlrfvWNnPl1JFoJzZwzfKs97H4N0Vug==","shasum":"ee4d8e6fd386489af3f2360c454fe28ec3210ff0","tarball":"http://localhost:4545/npm/registry/preact-render-to-string/preact-render-to-string-6.0.3.tgz","fileCount":40,"unpackedSize":426484,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFq+ay58RzcfABOsfoZD4drd86U/HpMUZSEKxI8gkFtuAiBT/FwralUNm3z8x2f9LaUpweAQN/PiwLHBCVdLXatciQ=="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJkT/QlACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmqdvQ//azJpgfAb5aJxo1joTQbzJTPezpLvt7PUWrgVUPSGkcJj1ibV\r\nGu7Al7XwsI+KoJzWnfTaCFmSE2ALD/ifmRCtvhugDPoaCdBaCKfyOibqjKEV\r\nY4PhE07NZMwWXlBBWZWJJlX5yJ9HGeR9e+VcP5m3kdxg/JVpphCeuMTQJrOv\r\nUhJQLZ37jqpVScmxDZFj2Ju0JWguAzAtPtrUfqf1YV00YOpZMQlCMlwfg5or\r\nxV3BsZVy7spurGgkDgxF3sf6RqF49JVvnCA9yhCL5p7F/sDmrydLQ8cgd1nZ\r\noNlEq8J6HUeiYm8MtVHcxDXQrGB0O4buxyThO/6a3eifZM3/JEvXLtk8QJFf\r\nxiXMhYz6QEmerdUyv50T96vuiz4W26eK5GdqvROP7aRo9uP47ubBBiXaJUox\r\nwKju82pqGz8QnD5gGGVm0C+lE6VQ4UzPM+NFUz4NMLGN9sSMDIsDdo0sb+/b\r\n7epAePU/hnMxnOw88Lk9j7i+o2sOkHy/t7J4k7cRzA4hmVm4LcybWn+vtSoy\r\nvi2OFRKbY+NdUUiFQWrlSGXcRiQ8FYoLqS2WRSZGXiHkdfIcl5jWa9Ha9wiJ\r\nwyuwK/0z6+7XrWJOQL/BDbI4vT3zTeAL5AiEn1dmnWg7wbka5OncNzOeeKf/\r\noQRC8jUzt2PVLSBS+1uNPqUuhG/Lf90Rm2I=\r\n=mmkb\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"marvinhagemeister","email":"hello@marvinh.dev"},"directories":{},"maintainers":[{"name":"drewigg","email":"drewigg@gmail.com"},{"name":"reznord","email":"allamsetty.anup@gmail.com"},{"name":"preactjs","email":"hello@preactjs.com"},{"name":"developit","email":"jason@developit.ca"},{"name":"lukeed","email":"luke@lukeed.com"},{"name":"prateekbh","email":"prateek89born@gmail.com"},{"name":"harmony","email":"npm.leah@hrmny.sh"},{"name":"marvinhagemeister","email":"hello@marvinh.dev"},{"name":"solarliner","email":"solarliner@gmail.com"},{"name":"jdecroock","email":"decroockjovi@gmail.com"},{"name":"sventschui","email":"sventschui@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/preact-render-to-string_6.0.3_1682961444767_0.4715686904428935"},"_hasShrinkwrap":false},"6.1.0":{"name":"preact-render-to-string","amdName":"preactRenderToString","version":"6.1.0","description":"Render JSX to an HTML string, with support for Preact components.","main":"dist/index.js","umd:main":"dist/index.umd.js","module":"dist/index.module.js","jsnext:main":"dist/index.module.js","types":"src/index.d.ts","exports":{".":{"types":"./src/index.d.ts","browser":"./dist/index.module.js","umd":"./dist/index.umd.js","import":"./dist/index.mjs","require":"./dist/index.js"},"./jsx":{"types":"./jsx.d.ts","browser":"./dist/jsx.module.js","umd":"./dist/jsx.umd.js","import":"./dist/jsx.mjs","require":"./dist/jsx.js"},"./package.json":"./package.json"},"scripts":{"bench":"BABEL_ENV=test node -r @babel/register benchmarks index.js","bench:v8":"BABEL_ENV=test microbundle benchmarks/index.js -f modern --alias benchmarkjs-pretty=benchmarks/lib/benchmark-lite.js --external none --target node --no-compress --no-sourcemap --raw -o benchmarks/.v8.mjs && v8 --module benchmarks/.v8.mjs","build":"npm run -s transpile && npm run -s transpile:jsx && npm run -s copy-typescript-definition","postbuild":"node ./config/node-13-exports.js && node ./config/node-commonjs.js && node ./config/node-verify-exports.js","transpile":"microbundle src/index.js -f es,cjs,umd --target web --external preact","transpile:jsx":"microbundle src/jsx.js -o dist/jsx.js --target web --external preact && microbundle dist/jsx.js -o dist/jsx.js -f cjs --external preact","copy-typescript-definition":"copyfiles -f src/*.d.ts dist","test":"eslint src test && tsc && npm run test:mocha && npm run test:mocha:compat && npm run test:mocha:debug && npm run bench","test:mocha":"BABEL_ENV=test mocha -r @babel/register -r test/setup.js test/*.test.js","test:mocha:compat":"BABEL_ENV=test mocha -r @babel/register -r test/setup.js 'test/compat/index.test.js'","test:mocha:debug":"BABEL_ENV=test mocha -r @babel/register -r test/setup.js 'test/debug/index.test.js'","format":"prettier src/**/*.{d.ts,js} test/**/*.js --write","prepublishOnly":"npm run build","release":"npm run build && git commit -am $npm_package_version && git tag $npm_package_version && git push && git push --tags && npm publish"},"keywords":["preact","render","universal","isomorphic"],"eslintConfig":{"extends":"developit","rules":{"react/prefer-stateless-function":0,"react/jsx-no-bind":0,"react/no-danger":0,"jest/valid-expect":0,"new-cap":0,"curly":"off","brace-style":"off","indent":"off"},"settings":{"react":{"version":"16.8"}}},"babel":{"env":{"test":{"presets":[["@babel/preset-env",{"targets":{"node":true}}]],"plugins":[["@babel/plugin-transform-react-jsx",{"pragma":"h"}]]}}},"minify":{"compress":{"reduce_funcs":false}},"author":{"name":"Jason Miller","email":"jason@developit.ca"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/developit/preact-render-to-string.git"},"bugs":{"url":"https://github.com/developit/preact-render-to-string/issues"},"homepage":"https://github.com/developit/preact-render-to-string","peerDependencies":{"preact":">=10"},"devDependencies":{"@babel/plugin-transform-react-jsx":"^7.12.12","@babel/preset-env":"^7.12.11","@babel/register":"^7.12.10","@changesets/changelog-github":"^0.4.1","@changesets/cli":"^2.18.0","benchmarkjs-pretty":"^2.0.1","chai":"^4.2.0","copyfiles":"^2.4.1","eslint":"^7.16.0","eslint-config-developit":"^1.2.0","husky":"^4.3.6","lint-staged":"^10.5.3","microbundle":"^0.15.1","mocha":"^8.2.1","baseline-rts":"npm:preact-render-to-string@latest","preact":"^10.13.0","prettier":"^2.2.1","sinon":"^9.2.2","sinon-chai":"^3.5.0","typescript":"^5.0.0"},"dependencies":{"pretty-format":"^3.8.0"},"prettier":{"singleQuote":true,"trailingComma":"none","useTabs":true,"tabWidth":2},"lint-staged":{"**/*.{js,jsx,ts,tsx,yml}":["prettier --write"]},"husky":{"hooks":{"pre-commit":"lint-staged"}},"gitHead":"cbe881a1f603a1b3cfb498306439ed9e389c5d5a","_id":"preact-render-to-string@6.1.0","_nodeVersion":"16.20.0","_npmVersion":"8.19.4","dist":{"integrity":"sha512-/AsKU4Q4R8r4aKwwNQrkQQNUVEDmTeZr6IwesDffobFRPcTk4dSQrfo1VOcXjtlcUss6QYEe7JShUGbQIhaw+A==","shasum":"6e3c70dbb9662962b626836566b091c53b6d19ae","tarball":"http://localhost:4545/npm/registry/preact-render-to-string/preact-render-to-string-6.1.0.tgz","fileCount":40,"unpackedSize":428522,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDBbRmNvrZvLq/S0cFROIRqbHwS2ReeyXdcqbLfXO4PuwIhAM9tVm2acwkbV+0HlO/ejgcB+1b9SwwiUIecR9TKDooK"}]},"_npmUser":{"name":"marvinhagemeister","email":"hello@marvinh.dev"},"directories":{},"maintainers":[{"name":"rschristian","email":"rchristian@ryanchristian.dev"},{"name":"drewigg","email":"drewigg@gmail.com"},{"name":"reznord","email":"allamsetty.anup@gmail.com"},{"name":"preactjs","email":"hello@preactjs.com"},{"name":"developit","email":"jason@developit.ca"},{"name":"lukeed","email":"luke@lukeed.com"},{"name":"prateekbh","email":"prateek89born@gmail.com"},{"name":"harmony","email":"npm.leah@hrmny.sh"},{"name":"marvinhagemeister","email":"hello@marvinh.dev"},{"name":"solarliner","email":"solarliner@gmail.com"},{"name":"jdecroock","email":"decroockjovi@gmail.com"},{"name":"sventschui","email":"sventschui@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/preact-render-to-string_6.1.0_1686296775445_0.96896723900164"},"_hasShrinkwrap":false},"6.2.0":{"name":"preact-render-to-string","amdName":"preactRenderToString","version":"6.2.0","description":"Render JSX to an HTML string, with support for Preact components.","main":"dist/index.js","umd:main":"dist/index.umd.js","module":"dist/index.module.js","jsnext:main":"dist/index.module.js","types":"src/index.d.ts","exports":{".":{"types":"./src/index.d.ts","browser":"./dist/index.module.js","umd":"./dist/index.umd.js","import":"./dist/index.mjs","require":"./dist/index.js"},"./jsx":{"types":"./jsx.d.ts","browser":"./dist/jsx.module.js","umd":"./dist/jsx.umd.js","import":"./dist/jsx.mjs","require":"./dist/jsx.js"},"./package.json":"./package.json"},"scripts":{"bench":"BABEL_ENV=test node -r @babel/register benchmarks index.js","bench:v8":"BABEL_ENV=test microbundle benchmarks/index.js -f modern --alias benchmarkjs-pretty=benchmarks/lib/benchmark-lite.js --external none --target node --no-compress --no-sourcemap --raw -o benchmarks/.v8.mjs && v8 --module benchmarks/.v8.mjs","build":"npm run -s transpile && npm run -s transpile:jsx && npm run -s copy-typescript-definition","postbuild":"node ./config/node-13-exports.js && node ./config/node-commonjs.js && node ./config/node-verify-exports.js","transpile":"microbundle src/index.js -f es,cjs,umd --target web --external preact","transpile:jsx":"microbundle src/jsx.js -o dist/jsx.js --target web --external preact && microbundle dist/jsx.js -o dist/jsx.js -f cjs --external preact","copy-typescript-definition":"copyfiles -f src/*.d.ts dist","test":"eslint src test && tsc && npm run test:mocha && npm run test:mocha:compat && npm run test:mocha:debug && npm run bench","test:mocha":"BABEL_ENV=test mocha -r @babel/register -r test/setup.js test/*.test.js","test:mocha:compat":"BABEL_ENV=test mocha -r @babel/register -r test/setup.js 'test/compat/index.test.js'","test:mocha:debug":"BABEL_ENV=test mocha -r @babel/register -r test/setup.js 'test/debug/index.test.js'","format":"prettier src/**/*.{d.ts,js} test/**/*.js --write","prepublishOnly":"npm run build","release":"npm run build && git commit -am $npm_package_version && git tag $npm_package_version && git push && git push --tags && npm publish"},"keywords":["preact","render","universal","isomorphic"],"eslintConfig":{"extends":"developit","rules":{"react/prefer-stateless-function":0,"react/jsx-no-bind":0,"react/no-danger":0,"jest/valid-expect":0,"new-cap":0,"curly":"off","brace-style":"off","indent":"off"},"settings":{"react":{"version":"16.8"}}},"babel":{"env":{"test":{"presets":[["@babel/preset-env",{"targets":{"node":true}}]],"plugins":[["@babel/plugin-transform-react-jsx",{"pragma":"h"}]]}}},"minify":{"compress":{"reduce_funcs":false}},"author":{"name":"Jason Miller","email":"jason@developit.ca"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/developit/preact-render-to-string.git"},"bugs":{"url":"https://github.com/developit/preact-render-to-string/issues"},"homepage":"https://github.com/developit/preact-render-to-string","peerDependencies":{"preact":">=10"},"devDependencies":{"@babel/plugin-transform-react-jsx":"^7.12.12","@babel/preset-env":"^7.12.11","@babel/register":"^7.12.10","@changesets/changelog-github":"^0.4.1","@changesets/cli":"^2.18.0","benchmarkjs-pretty":"^2.0.1","chai":"^4.2.0","copyfiles":"^2.4.1","eslint":"^7.16.0","eslint-config-developit":"^1.2.0","husky":"^4.3.6","lint-staged":"^10.5.3","microbundle":"^0.15.1","mocha":"^8.2.1","baseline-rts":"npm:preact-render-to-string@latest","preact":"^10.13.0","prettier":"^2.2.1","sinon":"^9.2.2","sinon-chai":"^3.5.0","typescript":"^5.0.0"},"dependencies":{"pretty-format":"^3.8.0"},"prettier":{"singleQuote":true,"trailingComma":"none","useTabs":true,"tabWidth":2},"lint-staged":{"**/*.{js,jsx,ts,tsx,yml}":["prettier --write"]},"husky":{"hooks":{"pre-commit":"lint-staged"}},"gitHead":"e02629e2f3a8ea087a0c75789080269169037c80","_id":"preact-render-to-string@6.2.0","_nodeVersion":"20.2.0","_npmVersion":"9.6.6","dist":{"integrity":"sha512-51HDkgWGssQvWhAXE6xWGSFgqXx+qzQPKatLBVm5Uxl2Bq8RHz+CcNMTWz3kjGNM8PL+9GZZfTLGHyR1wu6ZuA==","shasum":"88e3e1fa4b9b8a3ada2ff66c7f4389d687e51c96","tarball":"http://localhost:4545/npm/registry/preact-render-to-string/preact-render-to-string-6.2.0.tgz","fileCount":37,"unpackedSize":366088,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCYggGVmGuwmdT0rshtha9uYLPu/L1yYebGNL/NkKuzmAIhAJIIA8YO5TwKUUdsxZq+B9DkFmiaoKTkurT/EH6M6qUd"}]},"_npmUser":{"name":"marvinhagemeister","email":"hello@marvinh.dev"},"directories":{},"maintainers":[{"name":"rschristian","email":"rchristian@ryanchristian.dev"},{"name":"drewigg","email":"drewigg@gmail.com"},{"name":"reznord","email":"allamsetty.anup@gmail.com"},{"name":"preactjs","email":"hello@preactjs.com"},{"name":"developit","email":"jason@developit.ca"},{"name":"lukeed","email":"luke@lukeed.com"},{"name":"prateekbh","email":"prateek89born@gmail.com"},{"name":"harmony","email":"npm.leah@hrmny.sh"},{"name":"marvinhagemeister","email":"hello@marvinh.dev"},{"name":"solarliner","email":"solarliner@gmail.com"},{"name":"jdecroock","email":"decroockjovi@gmail.com"},{"name":"sventschui","email":"sventschui@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/preact-render-to-string_6.2.0_1688980383939_0.25383912583788937"},"_hasShrinkwrap":false},"6.2.1":{"name":"preact-render-to-string","amdName":"preactRenderToString","version":"6.2.1","description":"Render JSX to an HTML string, with support for Preact components.","main":"dist/index.js","umd:main":"dist/index.umd.js","module":"dist/index.module.js","jsnext:main":"dist/index.module.js","types":"src/index.d.ts","exports":{".":{"types":"./src/index.d.ts","browser":"./dist/index.module.js","umd":"./dist/index.umd.js","import":"./dist/index.mjs","require":"./dist/index.js"},"./jsx":{"types":"./jsx.d.ts","browser":"./dist/jsx.module.js","umd":"./dist/jsx.umd.js","import":"./dist/jsx.mjs","require":"./dist/jsx.js"},"./package.json":"./package.json"},"scripts":{"bench":"BABEL_ENV=test node -r @babel/register benchmarks index.js","bench:v8":"BABEL_ENV=test microbundle benchmarks/index.js -f modern --alias benchmarkjs-pretty=benchmarks/lib/benchmark-lite.js --external none --target node --no-compress --no-sourcemap --raw -o benchmarks/.v8.mjs && v8 --module benchmarks/.v8.mjs","build":"npm run -s transpile && npm run -s transpile:jsx && npm run -s copy-typescript-definition","postbuild":"node ./config/node-13-exports.js && node ./config/node-commonjs.js && node ./config/node-verify-exports.js","transpile":"microbundle src/index.js -f es,cjs,umd --target web --external preact","transpile:jsx":"microbundle src/jsx.js -o dist/jsx.js --target web --external preact && microbundle dist/jsx.js -o dist/jsx.js -f cjs --external preact","copy-typescript-definition":"copyfiles -f src/*.d.ts dist","test":"eslint src test && tsc && npm run test:mocha && npm run test:mocha:compat && npm run test:mocha:debug && npm run bench","test:mocha":"BABEL_ENV=test mocha -r @babel/register -r test/setup.js test/*.test.js","test:mocha:compat":"BABEL_ENV=test mocha -r @babel/register -r test/setup.js 'test/compat/index.test.js'","test:mocha:debug":"BABEL_ENV=test mocha -r @babel/register -r test/setup.js 'test/debug/index.test.js'","format":"prettier src/**/*.{d.ts,js} test/**/*.js --write","prepublishOnly":"npm run build","release":"npm run build && git commit -am $npm_package_version && git tag $npm_package_version && git push && git push --tags && npm publish"},"keywords":["preact","render","universal","isomorphic"],"eslintConfig":{"extends":"developit","rules":{"react/prefer-stateless-function":0,"react/jsx-no-bind":0,"react/no-danger":0,"jest/valid-expect":0,"new-cap":0,"curly":"off","brace-style":"off","indent":"off"},"settings":{"react":{"version":"16.8"}}},"babel":{"env":{"test":{"presets":[["@babel/preset-env",{"targets":{"node":true}}]],"plugins":[["@babel/plugin-transform-react-jsx",{"pragma":"h"}]]}}},"minify":{"compress":{"reduce_funcs":false}},"author":{"name":"Jason Miller","email":"jason@developit.ca"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/developit/preact-render-to-string.git"},"bugs":{"url":"https://github.com/developit/preact-render-to-string/issues"},"homepage":"https://github.com/developit/preact-render-to-string","peerDependencies":{"preact":">=10"},"devDependencies":{"@babel/plugin-transform-react-jsx":"^7.12.12","@babel/preset-env":"^7.12.11","@babel/register":"^7.12.10","@changesets/changelog-github":"^0.4.1","@changesets/cli":"^2.18.0","benchmarkjs-pretty":"^2.0.1","chai":"^4.2.0","copyfiles":"^2.4.1","eslint":"^7.16.0","eslint-config-developit":"^1.2.0","husky":"^4.3.6","lint-staged":"^10.5.3","microbundle":"^0.15.1","mocha":"^8.2.1","baseline-rts":"npm:preact-render-to-string@latest","preact":"^10.13.0","prettier":"^2.2.1","sinon":"^9.2.2","sinon-chai":"^3.5.0","typescript":"^5.0.0"},"dependencies":{"pretty-format":"^3.8.0"},"prettier":{"singleQuote":true,"trailingComma":"none","useTabs":true,"tabWidth":2},"lint-staged":{"**/*.{js,jsx,ts,tsx,yml}":["prettier --write"]},"husky":{"hooks":{"pre-commit":"lint-staged"}},"gitHead":"bd818dcdeb521f75d316546d102e1f0998405929","_id":"preact-render-to-string@6.2.1","_nodeVersion":"18.16.0","_npmVersion":"9.5.1","dist":{"integrity":"sha512-5t7nFeMUextd53igL3GAakAAMaUD+dVWDHaRYaeh1tbPIjQIBtgJnMw6vf8VS/lviV0ggFtkgebatPxvtJsXyQ==","shasum":"bd4f01f9a6b91b16b281343e665d110487f68d67","tarball":"http://localhost:4545/npm/registry/preact-render-to-string/preact-render-to-string-6.2.1.tgz","fileCount":40,"unpackedSize":459963,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEzP8WsRmsqfxzxgQQDI9bnfA0LfQ6DzKJjLy07jbe3RAiBhQ+Kdgsas3xfFk5VOStKXAqU+N/mJWqChNKT47UENWA=="}]},"_npmUser":{"name":"marvinhagemeister","email":"hello@marvinh.dev"},"directories":{},"maintainers":[{"name":"rschristian","email":"rchristian@ryanchristian.dev"},{"name":"drewigg","email":"drewigg@gmail.com"},{"name":"reznord","email":"allamsetty.anup@gmail.com"},{"name":"preactjs","email":"hello@preactjs.com"},{"name":"developit","email":"jason@developit.ca"},{"name":"marvinhagemeister","email":"hello@marvinh.dev"},{"name":"jdecroock","email":"decroockjovi@gmail.com"},{"name":"sventschui","email":"sventschui@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/preact-render-to-string_6.2.1_1691605910796_0.5076442540658272"},"_hasShrinkwrap":false},"6.2.2":{"name":"preact-render-to-string","amdName":"preactRenderToString","version":"6.2.2","description":"Render JSX to an HTML string, with support for Preact components.","main":"dist/index.js","umd:main":"dist/index.umd.js","module":"dist/index.module.js","jsnext:main":"dist/index.module.js","types":"src/index.d.ts","exports":{".":{"types":"./src/index.d.ts","browser":"./dist/index.module.js","umd":"./dist/index.umd.js","import":"./dist/index.mjs","require":"./dist/index.js"},"./jsx":{"types":"./jsx.d.ts","browser":"./dist/jsx.module.js","umd":"./dist/jsx.umd.js","import":"./dist/jsx.mjs","require":"./dist/jsx.js"},"./package.json":"./package.json"},"scripts":{"bench":"BABEL_ENV=test node -r @babel/register benchmarks index.js","bench:v8":"BABEL_ENV=test microbundle benchmarks/index.js -f modern --alias benchmarkjs-pretty=benchmarks/lib/benchmark-lite.js --external none --target node --no-compress --no-sourcemap --raw -o benchmarks/.v8.mjs && v8 --module benchmarks/.v8.mjs","build":"npm run -s transpile && npm run -s transpile:jsx && npm run -s copy-typescript-definition","postbuild":"node ./config/node-13-exports.js && node ./config/node-commonjs.js && node ./config/node-verify-exports.js","transpile":"microbundle src/index.js -f es,cjs,umd --target web --external preact","transpile:jsx":"microbundle src/jsx.js -o dist/jsx.js --target web --external preact && microbundle dist/jsx.js -o dist/jsx.js -f cjs --external preact","copy-typescript-definition":"copyfiles -f src/*.d.ts dist","test":"eslint src test && tsc && npm run test:mocha && npm run test:mocha:compat && npm run test:mocha:debug && npm run bench","test:mocha":"BABEL_ENV=test mocha -r @babel/register -r test/setup.js test/*.test.js","test:mocha:compat":"BABEL_ENV=test mocha -r @babel/register -r test/setup.js 'test/compat/index.test.js'","test:mocha:debug":"BABEL_ENV=test mocha -r @babel/register -r test/setup.js 'test/debug/index.test.js'","format":"prettier src/**/*.{d.ts,js} test/**/*.js --write","prepublishOnly":"npm run build","release":"npm run build && git commit -am $npm_package_version && git tag $npm_package_version && git push && git push --tags && npm publish"},"keywords":["preact","render","universal","isomorphic"],"eslintConfig":{"extends":"developit","rules":{"react/prefer-stateless-function":0,"react/jsx-no-bind":0,"react/no-danger":0,"jest/valid-expect":0,"new-cap":0,"curly":"off","brace-style":"off","indent":"off"},"settings":{"react":{"version":"16.8"}}},"babel":{"env":{"test":{"presets":[["@babel/preset-env",{"targets":{"node":true}}]],"plugins":[["@babel/plugin-transform-react-jsx",{"pragma":"h"}]]}}},"minify":{"compress":{"reduce_funcs":false}},"author":{"name":"Jason Miller","email":"jason@developit.ca"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/developit/preact-render-to-string.git"},"bugs":{"url":"https://github.com/developit/preact-render-to-string/issues"},"homepage":"https://github.com/developit/preact-render-to-string","peerDependencies":{"preact":">=10"},"devDependencies":{"@babel/plugin-transform-react-jsx":"^7.12.12","@babel/preset-env":"^7.12.11","@babel/register":"^7.12.10","@changesets/changelog-github":"^0.4.1","@changesets/cli":"^2.18.0","benchmarkjs-pretty":"^2.0.1","chai":"^4.2.0","copyfiles":"^2.4.1","eslint":"^7.16.0","eslint-config-developit":"^1.2.0","husky":"^4.3.6","lint-staged":"^10.5.3","microbundle":"^0.15.1","mocha":"^8.2.1","baseline-rts":"npm:preact-render-to-string@latest","preact":"^10.13.0","prettier":"^2.2.1","sinon":"^9.2.2","sinon-chai":"^3.5.0","typescript":"^5.0.0"},"dependencies":{"pretty-format":"^3.8.0"},"prettier":{"singleQuote":true,"trailingComma":"none","useTabs":true,"tabWidth":2},"lint-staged":{"**/*.{js,jsx,ts,tsx,yml}":["prettier --write"]},"husky":{"hooks":{"pre-commit":"lint-staged"}},"gitHead":"ba4f4eb1f81e01ac15aef377ae609059e9b2ffce","_id":"preact-render-to-string@6.2.2","_nodeVersion":"18.15.0","_npmVersion":"9.5.0","dist":{"integrity":"sha512-YDfXQiVeYZutFR8/DpxLSbW3W6b7GgjBExRBxOOqcjrGq5rA9cziitQdNPMZe4RVMSdfBnf4hYqyeLs/KvtIuA==","shasum":"eb086b6db5d57468ab2c184896884fb0a818245d","tarball":"http://localhost:4545/npm/registry/preact-render-to-string/preact-render-to-string-6.2.2.tgz","fileCount":37,"unpackedSize":382446,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDelkAul5H10vKT7jkuif/RzToOmEJ6OBcnSdX4/yw1MAIgKN9XYmM94m73Rr0kmGRDHq3AbAqnPE5iJHHRugoP9vk="}]},"_npmUser":{"name":"jdecroock","email":"decroockjovi@gmail.com"},"directories":{},"maintainers":[{"name":"rschristian","email":"rchristian@ryanchristian.dev"},{"name":"drewigg","email":"drewigg@gmail.com"},{"name":"reznord","email":"allamsetty.anup@gmail.com"},{"name":"preactjs","email":"hello@preactjs.com"},{"name":"developit","email":"jason@developit.ca"},{"name":"marvinhagemeister","email":"hello@marvinh.dev"},{"name":"jdecroock","email":"decroockjovi@gmail.com"},{"name":"sventschui","email":"sventschui@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/preact-render-to-string_6.2.2_1696315854662_0.9285066483298523"},"_hasShrinkwrap":false},"6.3.0":{"name":"preact-render-to-string","amdName":"preactRenderToString","version":"6.3.0","description":"Render JSX to an HTML string, with support for Preact components.","main":"dist/index.js","umd:main":"dist/index.umd.js","module":"dist/index.module.js","jsnext:main":"dist/index.module.js","types":"src/index.d.ts","exports":{".":{"types":"./src/index.d.ts","browser":"./dist/index.module.js","umd":"./dist/index.umd.js","import":"./dist/index.mjs","require":"./dist/index.js"},"./jsx":{"types":"./jsx.d.ts","browser":"./dist/jsx.module.js","umd":"./dist/jsx.umd.js","import":"./dist/jsx.mjs","require":"./dist/jsx.js"},"./package.json":"./package.json"},"scripts":{"bench":"BABEL_ENV=test node -r @babel/register benchmarks index.js","bench:v8":"BABEL_ENV=test microbundle benchmarks/index.js -f modern --alias benchmarkjs-pretty=benchmarks/lib/benchmark-lite.js --external none --target node --no-compress --no-sourcemap --raw -o benchmarks/.v8.mjs && v8 --module benchmarks/.v8.mjs","build":"npm run -s transpile && npm run -s transpile:jsx && npm run -s copy-typescript-definition","postbuild":"node ./config/node-13-exports.js && node ./config/node-commonjs.js && node ./config/node-verify-exports.js","transpile":"microbundle src/index.js -f es,cjs,umd --target web --external preact","transpile:jsx":"microbundle src/jsx.js -o dist/jsx.js --target web --external preact && microbundle dist/jsx.js -o dist/jsx.js -f cjs --external preact","copy-typescript-definition":"copyfiles -f src/*.d.ts dist","test":"eslint src test && tsc && npm run test:mocha && npm run test:mocha:compat && npm run test:mocha:debug && npm run bench","test:mocha":"BABEL_ENV=test mocha -r @babel/register -r test/setup.js test/*.test.js","test:mocha:compat":"BABEL_ENV=test mocha -r @babel/register -r test/setup.js 'test/compat/index.test.js'","test:mocha:debug":"BABEL_ENV=test mocha -r @babel/register -r test/setup.js 'test/debug/index.test.js'","format":"prettier src/**/*.{d.ts,js} test/**/*.js --write","prepublishOnly":"npm run build","release":"npm run build && git commit -am $npm_package_version && git tag $npm_package_version && git push && git push --tags && npm publish"},"keywords":["preact","render","universal","isomorphic"],"eslintConfig":{"extends":"developit","rules":{"react/prefer-stateless-function":0,"react/jsx-no-bind":0,"react/no-danger":0,"jest/valid-expect":0,"new-cap":0,"curly":"off","brace-style":"off","indent":"off"},"settings":{"react":{"version":"16.8"}}},"babel":{"env":{"test":{"presets":[["@babel/preset-env",{"targets":{"node":true}}]],"plugins":[["@babel/plugin-transform-react-jsx",{"pragma":"h"}]]}}},"minify":{"compress":{"reduce_funcs":false}},"author":{"name":"Jason Miller","email":"jason@developit.ca"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/developit/preact-render-to-string.git"},"bugs":{"url":"https://github.com/developit/preact-render-to-string/issues"},"homepage":"https://github.com/developit/preact-render-to-string","peerDependencies":{"preact":">=10"},"devDependencies":{"@babel/plugin-transform-react-jsx":"^7.22.15","@babel/preset-env":"^7.23.2","@babel/register":"^7.22.15","@changesets/changelog-github":"^0.4.1","@changesets/cli":"^2.18.0","benchmarkjs-pretty":"^2.0.1","chai":"^4.3.10","copyfiles":"^2.4.1","eslint":"^7.16.0","eslint-config-developit":"^1.2.0","husky":"^4.3.6","lint-staged":"^10.5.3","microbundle":"^0.15.1","mocha":"^10.2.0","baseline-rts":"npm:preact-render-to-string@latest","preact":"^10.13.0","prettier":"^2.2.1","sinon":"^9.2.2","sinon-chai":"^3.5.0","typescript":"^5.0.0"},"dependencies":{"pretty-format":"^3.8.0"},"prettier":{"singleQuote":true,"trailingComma":"none","useTabs":true,"tabWidth":2},"lint-staged":{"**/*.{js,jsx,ts,tsx,yml}":["prettier --write"]},"husky":{"hooks":{"pre-commit":"lint-staged"}},"gitHead":"fd435502ebc487dce305d4ecf63dcd1d4cb86bf0","_id":"preact-render-to-string@6.3.0","_nodeVersion":"18.16.0","_npmVersion":"9.5.1","dist":{"integrity":"sha512-7t5Zd8PUPeTt0+e/S16ffJBLM8+ZDsvYrt71sbMquKND/5NWtHOSZdURCvfYFyNwbXJOlWMuEjk3qzmdIFdebw==","shasum":"e39a686a5ae2905778f92cc51049852e8c050d7f","tarball":"http://localhost:4545/npm/registry/preact-render-to-string/preact-render-to-string-6.3.0.tgz","fileCount":37,"unpackedSize":388719,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDKbDu8Lr8ffOr2+jFGWiKP8rRvYUKzQrflzA04r/ynKAiAqd4Umd8cb6+IcCvTkcC4PHeVzNLVDKkZPsniYqSSCRQ=="}]},"_npmUser":{"name":"marvinhagemeister","email":"hello@marvinh.dev"},"directories":{},"maintainers":[{"name":"rschristian","email":"rchristian@ryanchristian.dev"},{"name":"drewigg","email":"drewigg@gmail.com"},{"name":"reznord","email":"allamsetty.anup@gmail.com"},{"name":"preactjs","email":"hello@preactjs.com"},{"name":"developit","email":"jason@developit.ca"},{"name":"marvinhagemeister","email":"hello@marvinh.dev"},{"name":"jdecroock","email":"decroockjovi@gmail.com"},{"name":"sventschui","email":"sventschui@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/preact-render-to-string_6.3.0_1699484499708_0.08420910887928357"},"_hasShrinkwrap":false},"6.3.1":{"name":"preact-render-to-string","amdName":"preactRenderToString","version":"6.3.1","description":"Render JSX to an HTML string, with support for Preact components.","main":"dist/index.js","umd:main":"dist/index.umd.js","module":"dist/index.module.js","jsnext:main":"dist/index.module.js","types":"src/index.d.ts","exports":{".":{"types":"./src/index.d.ts","browser":"./dist/index.module.js","umd":"./dist/index.umd.js","import":"./dist/index.mjs","require":"./dist/index.js"},"./jsx":{"types":"./jsx.d.ts","browser":"./dist/jsx.module.js","umd":"./dist/jsx.umd.js","import":"./dist/jsx.mjs","require":"./dist/jsx.js"},"./package.json":"./package.json"},"scripts":{"bench":"BABEL_ENV=test node -r @babel/register benchmarks index.js","bench:v8":"BABEL_ENV=test microbundle benchmarks/index.js -f modern --alias benchmarkjs-pretty=benchmarks/lib/benchmark-lite.js --external none --target node --no-compress --no-sourcemap --raw -o benchmarks/.v8.mjs && v8 --module benchmarks/.v8.mjs","build":"npm run -s transpile && npm run -s transpile:jsx && npm run -s copy-typescript-definition","postbuild":"node ./config/node-13-exports.js && node ./config/node-commonjs.js && node ./config/node-verify-exports.js","transpile":"microbundle src/index.js -f es,cjs,umd --target web --external preact","transpile:jsx":"microbundle src/jsx.js -o dist/jsx.js --target web --external preact && microbundle dist/jsx.js -o dist/jsx.js -f cjs --external preact","copy-typescript-definition":"copyfiles -f src/*.d.ts dist","test":"eslint src test && tsc && npm run test:mocha && npm run test:mocha:compat && npm run test:mocha:debug && npm run bench","test:mocha":"BABEL_ENV=test mocha -r @babel/register -r test/setup.js test/*.test.js","test:mocha:compat":"BABEL_ENV=test mocha -r @babel/register -r test/setup.js 'test/compat/index.test.js'","test:mocha:debug":"BABEL_ENV=test mocha -r @babel/register -r test/setup.js 'test/debug/index.test.js'","format":"prettier src/**/*.{d.ts,js} test/**/*.js --write","prepublishOnly":"npm run build","release":"npm run build && git commit -am $npm_package_version && git tag $npm_package_version && git push && git push --tags && npm publish"},"keywords":["preact","render","universal","isomorphic"],"eslintConfig":{"extends":"developit","rules":{"react/prefer-stateless-function":0,"react/jsx-no-bind":0,"react/no-danger":0,"jest/valid-expect":0,"new-cap":0,"curly":"off","brace-style":"off","indent":"off"},"settings":{"react":{"version":"16.8"}}},"babel":{"env":{"test":{"presets":[["@babel/preset-env",{"targets":{"node":true}}]],"plugins":[["@babel/plugin-transform-react-jsx",{"pragma":"h"}]]}}},"minify":{"compress":{"reduce_funcs":false}},"author":{"name":"Jason Miller","email":"jason@developit.ca"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/developit/preact-render-to-string.git"},"bugs":{"url":"https://github.com/developit/preact-render-to-string/issues"},"homepage":"https://github.com/developit/preact-render-to-string","peerDependencies":{"preact":">=10"},"devDependencies":{"@babel/plugin-transform-react-jsx":"^7.22.15","@babel/preset-env":"^7.23.2","@babel/register":"^7.22.15","@changesets/changelog-github":"^0.4.1","@changesets/cli":"^2.18.0","benchmarkjs-pretty":"^2.0.1","chai":"^4.3.10","copyfiles":"^2.4.1","eslint":"^7.16.0","eslint-config-developit":"^1.2.0","husky":"^4.3.6","lint-staged":"^10.5.3","microbundle":"^0.15.1","mocha":"^10.2.0","baseline-rts":"npm:preact-render-to-string@latest","preact":"^10.13.0","prettier":"^2.2.1","sinon":"^9.2.2","sinon-chai":"^3.5.0","typescript":"^5.0.0"},"dependencies":{"pretty-format":"^3.8.0"},"prettier":{"singleQuote":true,"trailingComma":"none","useTabs":true,"tabWidth":2},"lint-staged":{"**/*.{js,jsx,ts,tsx,yml}":["prettier --write"]},"husky":{"hooks":{"pre-commit":"lint-staged"}},"gitHead":"f4aff9d3f3818d9647de7e9d586c166e3e2dead8","_id":"preact-render-to-string@6.3.1","_nodeVersion":"18.16.0","_npmVersion":"9.5.1","dist":{"integrity":"sha512-NQ28WrjLtWY6lKDlTxnFpKHZdpjfF+oE6V4tZ0rTrunHrtZp6Dm0oFrcJalt/5PNeqJz4j1DuZDS0Y6rCBoqDA==","shasum":"2479ebca8e6721cacfcecaa79bd861005a3d9b8f","tarball":"http://localhost:4545/npm/registry/preact-render-to-string/preact-render-to-string-6.3.1.tgz","fileCount":37,"unpackedSize":389109,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDa8FVIs5VKbOq0co0PW+kvrKFQchyeb4fUJ9bgPpsrFAiB0PNxnUYNPvmbfHMDvt0ZATKBQOcC9hw11hReu56Js8A=="}]},"_npmUser":{"name":"marvinhagemeister","email":"hello@marvinh.dev"},"directories":{},"maintainers":[{"name":"rschristian","email":"rchristian@ryanchristian.dev"},{"name":"drewigg","email":"drewigg@gmail.com"},{"name":"reznord","email":"allamsetty.anup@gmail.com"},{"name":"preactjs","email":"hello@preactjs.com"},{"name":"developit","email":"jason@developit.ca"},{"name":"marvinhagemeister","email":"hello@marvinh.dev"},{"name":"jdecroock","email":"decroockjovi@gmail.com"},{"name":"sventschui","email":"sventschui@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/preact-render-to-string_6.3.1_1699887257246_0.1956113216361004"},"_hasShrinkwrap":false},"6.4.0":{"name":"preact-render-to-string","amdName":"preactRenderToString","version":"6.4.0","description":"Render JSX to an HTML string, with support for Preact components.","main":"dist/index.js","umd:main":"dist/index.umd.js","module":"dist/index.module.js","jsnext:main":"dist/index.module.js","types":"src/index.d.ts","exports":{".":{"types":"./src/index.d.ts","browser":"./dist/index.module.js","umd":"./dist/index.umd.js","import":"./dist/index.mjs","require":"./dist/index.js"},"./jsx":{"types":"./jsx.d.ts","browser":"./dist/jsx.module.js","umd":"./dist/jsx.umd.js","import":"./dist/jsx.mjs","require":"./dist/jsx.js"},"./package.json":"./package.json"},"scripts":{"bench":"BABEL_ENV=test node -r @babel/register benchmarks index.js","bench:v8":"BABEL_ENV=test microbundle benchmarks/index.js -f modern --alias benchmarkjs-pretty=benchmarks/lib/benchmark-lite.js --external none --target node --no-compress --no-sourcemap --raw -o benchmarks/.v8.mjs && v8 --module benchmarks/.v8.mjs","build":"npm run -s transpile && npm run -s transpile:jsx && npm run -s copy-typescript-definition","postbuild":"node ./config/node-13-exports.js && node ./config/node-commonjs.js && node ./config/node-verify-exports.js","transpile":"microbundle src/index.js -f es,cjs,umd --target web --external preact","transpile:jsx":"microbundle src/jsx.js -o dist/jsx.js --target web --external preact && microbundle dist/jsx.js -o dist/jsx.js -f cjs --external preact","copy-typescript-definition":"copyfiles -f src/*.d.ts dist","test":"eslint src test && tsc && npm run test:mocha && npm run test:mocha:compat && npm run test:mocha:debug && npm run bench","test:mocha":"BABEL_ENV=test mocha -r @babel/register -r test/setup.js test/*.test.js","test:mocha:compat":"BABEL_ENV=test mocha -r @babel/register -r test/setup.js 'test/compat/*.test.js'","test:mocha:debug":"BABEL_ENV=test mocha -r @babel/register -r test/setup.js 'test/debug/index.test.js'","format":"prettier src/**/*.{d.ts,js} test/**/*.js --write","prepublishOnly":"npm run build","release":"npm run build && git commit -am $npm_package_version && git tag $npm_package_version && git push && git push --tags && npm publish"},"keywords":["preact","render","universal","isomorphic"],"eslintConfig":{"extends":"developit","rules":{"react/prefer-stateless-function":0,"react/jsx-no-bind":0,"react/no-danger":0,"jest/valid-expect":0,"new-cap":0,"curly":"off","brace-style":"off","indent":"off"},"settings":{"react":{"version":"16.8"}}},"babel":{"env":{"test":{"presets":[["@babel/preset-env",{"targets":{"node":true}}]],"plugins":[["@babel/plugin-transform-react-jsx",{"pragma":"h"}]]}}},"minify":{"compress":{"reduce_funcs":false}},"author":{"name":"Jason Miller","email":"jason@developit.ca"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/developit/preact-render-to-string.git"},"bugs":{"url":"https://github.com/developit/preact-render-to-string/issues"},"homepage":"https://github.com/developit/preact-render-to-string","peerDependencies":{"preact":">=10"},"devDependencies":{"@babel/plugin-transform-react-jsx":"^7.22.15","@babel/preset-env":"^7.23.2","@babel/register":"^7.22.15","@changesets/changelog-github":"^0.4.1","@changesets/cli":"^2.18.0","benchmarkjs-pretty":"^2.0.1","chai":"^4.3.10","copyfiles":"^2.4.1","eslint":"^7.16.0","eslint-config-developit":"^1.2.0","husky":"^4.3.6","lint-staged":"^10.5.3","microbundle":"^0.15.1","mocha":"^10.2.0","baseline-rts":"npm:preact-render-to-string@latest","preact":"^10.13.0","prettier":"^2.2.1","sinon":"^9.2.2","sinon-chai":"^3.5.0","typescript":"^5.0.0"},"dependencies":{"pretty-format":"^3.8.0"},"prettier":{"singleQuote":true,"trailingComma":"none","useTabs":true,"tabWidth":2},"lint-staged":{"**/*.{js,jsx,ts,tsx,yml}":["prettier --write"]},"husky":{"hooks":{"pre-commit":"lint-staged"}},"gitHead":"797c82fd7a8cb49c2cfd1f5c3f5e94a44b473956","_id":"preact-render-to-string@6.4.0","_nodeVersion":"18.15.0","_npmVersion":"9.5.0","dist":{"integrity":"sha512-pzDwezZaLbK371OiJjXDsZJwVOALzFX5M1wEh2Kr0pEApq5AV6bRH/DFbA/zNA7Lck/duyREPQLLvzu2G6hEQQ==","shasum":"03cdd661d35e9ac76bed9f0e37ccceb42cae5fa5","tarball":"http://localhost:4545/npm/registry/preact-render-to-string/preact-render-to-string-6.4.0.tgz","fileCount":37,"unpackedSize":438403,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDTa+cBqkHxRPuwDWpHw9h6UF0HFVokRCpvLEgoiEaZtwIhAJSIy8Q2fXZda8KVTd8CpzeT5jFPbCiww9rvyCyA125q"}]},"_npmUser":{"name":"jdecroock","email":"decroockjovi@gmail.com"},"directories":{},"maintainers":[{"name":"rschristian","email":"rchristian@ryanchristian.dev"},{"name":"drewigg","email":"drewigg@gmail.com"},{"name":"reznord","email":"allamsetty.anup@gmail.com"},{"name":"preactjs","email":"hello@preactjs.com"},{"name":"developit","email":"jason@developit.ca"},{"name":"marvinhagemeister","email":"hello@marvinh.dev"},{"name":"jdecroock","email":"decroockjovi@gmail.com"},{"name":"sventschui","email":"sventschui@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/preact-render-to-string_6.4.0_1708502133582_0.533613557833073"},"_hasShrinkwrap":false}},"readme":"# preact-render-to-string\n\n[![NPM](http://img.shields.io/npm/v/preact-render-to-string.svg)](https://www.npmjs.com/package/preact-render-to-string)\n[![Build status](https://github.com/preactjs/preact-render-to-string/actions/workflows/ci.yml/badge.svg)](https://github.com/preactjs/preact-render-to-string/actions/workflows/ci.yml)\n\nRender JSX and [Preact](https://github.com/preactjs/preact) components to an HTML string.\n\nWorks in Node & the browser, making it useful for universal/isomorphic rendering.\n\n\\>\\> **[Cute Fox-Related Demo](http://codepen.io/developit/pen/dYZqjE?editors=001)** _(@ CodePen)_ <<\n\n---\n\n### Render JSX/VDOM to HTML\n\n```js\nimport { render } from 'preact-render-to-string';\nimport { h } from 'preact';\n/** @jsx h */\n\nlet vdom =
content
;\n\nlet html = render(vdom);\nconsole.log(html);\n//
content
\n```\n\n### Render Preact Components to HTML\n\n```js\nimport { render } from 'preact-render-to-string';\nimport { h, Component } from 'preact';\n/** @jsx h */\n\n// Classical components work\nclass Fox extends Component {\n\trender({ name }) {\n\t\treturn {name};\n\t}\n}\n\n// ... and so do pure functional components:\nconst Box = ({ type, children }) => (\n\t
{children}
\n);\n\nlet html = render(\n\t\n\t\t\n\t\n);\n\nconsole.log(html);\n//
Finn
\n```\n\n---\n\n### Render JSX / Preact / Whatever via Express!\n\n```js\nimport express from 'express';\nimport { h } from 'preact';\nimport { render } from 'preact-render-to-string';\n/** @jsx h */\n\n// silly example component:\nconst Fox = ({ name }) => (\n\t
\n\t\t
{name}
\n\t\t
This page is all about {name}.
\n\t
\n);\n\n// basic HTTP server via express:\nconst app = express();\napp.listen(8080);\n\n// on each request, render and return a component:\napp.get('/:fox', (req, res) => {\n\tlet html = render();\n\t// send it back wrapped up as an HTML5 document:\n\tres.send(`${html}`);\n});\n```\n\n### Error Boundaries\n\nRendering errors can be caught by Preact via `getDerivedStateFromErrors` or `componentDidCatch`. To enable that feature in `preact-render-to-string` set `errorBoundaries = true`\n\n```js\nimport { options } from 'preact';\n\n// Enable error boundaries in `preact-render-to-string`\noptions.errorBoundaries = true;\n```\n\n---\n\n### `Suspense` & `lazy` components with [`preact/compat`](https://www.npmjs.com/package/preact) & [`preact-ssr-prepass`](https://www.npmjs.com/package/preact-ssr-prepass)\n\n```bash\nnpm install preact preact-render-to-string preact-ssr-prepass\n```\n\n```jsx\nexport default () => {\n\treturn
Home page
;\n};\n```\n\n```jsx\nimport { Suspense, lazy } from 'preact/compat';\n\n// Creation of the lazy component\nconst HomePage = lazy(() => import('./pages/home'));\n\nconst Main = () => {\n\treturn (\n\t\tLoading
}>\n\t\t\t\n\t\t\n\t);\n};\n```\n\n```jsx\nimport { render } from 'preact-render-to-string';\nimport prepass from 'preact-ssr-prepass';\nimport { Main } from './main';\n\nconst main = async () => {\n\t// Creation of the virtual DOM\n\tconst vdom = ;\n\n\t// Pre-rendering of lazy components\n\tawait prepass(vdom);\n\n\t// Rendering of components\n\tconst html = render(vdom);\n\n\tconsole.log(html);\n\t//
Fast 3kB alternative to React with the same modern API.
\n\n**All the power of Virtual DOM components, without the overhead:**\n\n- Familiar React API & patterns: [ES6 Class] and [Functional Components]\n- Extensive React compatibility via a simple [preact-compat] alias\n- Everything you need: JSX, VDOM, React DevTools, HMR, SSR..\n- A highly optimized diff algorithm and seamless Server Side Rendering\n- Transparent asynchronous rendering with a pluggable scheduler\n- 🆕💥 **Instant no-config app bundling with [Preact CLI](https://github.com/developit/preact-cli)**\n\n### 💁 More information at the [Preact Website ➞](https://preactjs.com)\n\n\n---\n\n\n\n- [Demos](#demos)\n- [Libraries & Add-ons](#libraries--add-ons)\n- [Getting Started](#getting-started)\n\t- [Import what you need](#import-what-you-need)\n\t- [Rendering JSX](#rendering-jsx)\n\t- [Components](#components)\n\t- [Props & State](#props--state)\n- [Linked State](#linked-state)\n- [Examples](#examples)\n- [Extensions](#extensions)\n- [Debug Mode](#debug-mode)\n- [Backers](#backers)\n- [Sponsors](#sponsors)\n- [License](#license)\n\n\n\n\n# Preact\n\n[![npm](https://img.shields.io/npm/v/preact.svg)](http://npm.im/preact)\n[![CDNJS](https://img.shields.io/cdnjs/v/preact.svg)](https://cdnjs.com/libraries/preact)\n[![Preact Slack Community](https://preact-slack.now.sh/badge.svg)](https://preact-slack.now.sh)\n[![OpenCollective Backers](https://opencollective.com/preact/backers/badge.svg)](#backers)\n[![OpenCollective Sponsors](https://opencollective.com/preact/sponsors/badge.svg)](#sponsors)\n[![travis](https://travis-ci.org/developit/preact.svg?branch=master)](https://travis-ci.org/developit/preact)\n[![coveralls](https://img.shields.io/coveralls/developit/preact/master.svg)](https://coveralls.io/github/developit/preact)\n[![gzip size](http://img.badgesize.io/https://unpkg.com/preact/dist/preact.min.js?compression=gzip)](https://unpkg.com/preact/dist/preact.min.js)\n[![install size](https://packagephobia.now.sh/badge?p=preact)](https://packagephobia.now.sh/result?p=preact)\n\nPreact supports modern browsers and IE9+:\n\n[![Browsers](https://saucelabs.com/browser-matrix/preact.svg)](https://saucelabs.com/u/preact)\n\n\n---\n\n\n## Demos\n\n#### Real-World Apps\n\n- [**Preact Hacker News**](https://hn.kristoferbaxter.com) _([GitHub Project](https://github.com/kristoferbaxter/preact-hn))_\n- [**Play.cash**](https://play.cash) :notes: _([GitHub Project](https://github.com/feross/play.cash))_\n- [**BitMidi**](https://bitmidi.com/) 🎹 Wayback machine for free MIDI files _([GitHub Project](https://github.com/feross/bitmidi.com))_\n- [**Ultimate Guitar**](https://www.ultimate-guitar.com) 🎸speed boosted by Preact.\n- [**ESBench**](http://esbench.com) is built using Preact.\n- [**BigWebQuiz**](https://bigwebquiz.com) _([GitHub Project](https://github.com/jakearchibald/big-web-quiz))_\n- [**Nectarine.rocks**](http://nectarine.rocks) _([GitHub Project](https://github.com/developit/nectarine))_ :peach:\n- [**TodoMVC**](https://preact-todomvc.surge.sh) _([GitHub Project](https://github.com/developit/preact-todomvc))_\n- [**OSS.Ninja**](https://oss.ninja) _([GitHub Project](https://github.com/developit/oss.ninja))_\n- [**GuriVR**](https://gurivr.com) _([GitHub Project](https://github.com/opennewslabs/guri-vr))_\n- [**Color Picker**](https://colors.now.sh) _([GitHub Project](https://github.com/lukeed/colors-app))_ :art:\n- [**Offline Gallery**](https://use-the-platform.com/offline-gallery/) _([GitHub Project](https://github.com/vaneenige/offline-gallery/))_ :balloon:\n- [**Periodic Weather**](https://use-the-platform.com/periodic-weather/) _([GitHub Project](https://github.com/vaneenige/periodic-weather/))_ :sunny:\n- [**Rugby News Board**](http://nbrugby.com) _[(GitHub Project)](https://github.com/rugby-board/rugby-board-node)_\n- [**Preact Gallery**](https://preact.gallery/) an 8KB photo gallery PWA built using Preact.\n- [**Rainbow Explorer**](https://use-the-platform.com/rainbow-explorer/) Preact app to translate real life color to digital color _([Github project](https://github.com/vaneenige/rainbow-explorer))_.\n- [**YASCC**](https://carlosqsilva.github.io/YASCC/#/) Yet Another SoundCloud Client _([Github project](https://github.com/carlosqsilva/YASCC))_.\n- [**Journalize**](https://preact-journal.herokuapp.com/) 14k offline-capable journaling PWA using preact. _([Github project](https://github.com/jpodwys/preact-journal))_.\n\n\n#### Runnable Examples\n\n- [**Flickr Browser**](http://codepen.io/developit/full/VvMZwK/) (@ CodePen)\n- [**Animating Text**](http://codepen.io/developit/full/LpNOdm/) (@ CodePen)\n- [**60FPS Rainbow Spiral**](http://codepen.io/developit/full/xGoagz/) (@ CodePen)\n- [**Simple Clock**](http://jsfiddle.net/developit/u9m5x0L7/embedded/result,js/) (@ JSFiddle)\n- [**3D + ThreeJS**](http://codepen.io/developit/pen/PPMNjd?editors=0010) (@ CodePen)\n- [**Stock Ticker**](http://codepen.io/developit/pen/wMYoBb?editors=0010) (@ CodePen)\n- [*Create your Own!*](https://jsfiddle.net/developit/rs6zrh5f/embedded/result/) (@ JSFiddle)\n\n### Starter Projects\n\n- [**Preact Boilerplate**](https://preact-boilerplate.surge.sh) _([GitHub Project](https://github.com/developit/preact-boilerplate))_ :zap:\n- [**Preact Offline Starter**](https://preact-starter.now.sh) _([GitHub Project](https://github.com/lukeed/preact-starter))_ :100:\n- [**Preact PWA**](https://preact-pwa-yfxiijbzit.now.sh/) _([GitHub Project](https://github.com/ezekielchentnik/preact-pwa))_ :hamburger:\n- [**Parcel + Preact + Unistore Starter**](https://github.com/hwclass/parcel-preact-unistore-starter)\n- [**Preact Mobx Starter**](https://awaw00.github.io/preact-mobx-starter/) _([GitHub Project](https://github.com/awaw00/preact-mobx-starter))_ :sunny:\n- [**Preact Redux Example**](https://github.com/developit/preact-redux-example) :star:\n- [**Preact Redux/RxJS/Reselect Example**](https://github.com/continuata/preact-seed)\n- [**V2EX Preact**](https://github.com/yanni4night/v2ex-preact)\n- [**Preact Coffeescript**](https://github.com/crisward/preact-coffee)\n- [**Preact + TypeScript + Webpack**](https://github.com/k1r0s/bleeding-preact-starter)\n- [**0 config => Preact + Poi**](https://github.com/k1r0s/preact-poi-starter)\n- [**Zero configuration => Preact + Typescript + Parcel**](https://github.com/aalises/preact-typescript-parcel-starter)\n\n---\n\n## Libraries & Add-ons\n\n- :raised_hands: [**preact-compat**](https://git.io/preact-compat): use any React library with Preact *([full example](http://git.io/preact-compat-example))*\n- :twisted_rightwards_arrows: [**preact-context**](https://github.com/valotas/preact-context): React's `createContext` api for Preact\n- :page_facing_up: [**preact-render-to-string**](https://git.io/preact-render-to-string): Universal rendering.\n- :eyes: [**preact-render-spy**](https://github.com/mzgoddard/preact-render-spy): Enzyme-lite: Renderer with access to the produced virtual dom for testing.\n- :loop: [**preact-render-to-json**](https://git.io/preact-render-to-json): Render for Jest Snapshot testing.\n- :earth_americas: [**preact-router**](https://git.io/preact-router): URL routing for your components\n- :bookmark_tabs: [**preact-markup**](https://git.io/preact-markup): Render HTML & Custom Elements as JSX & Components\n- :satellite: [**preact-portal**](https://git.io/preact-portal): Render Preact components into (a) SPACE :milky_way:\n- :pencil: [**preact-richtextarea**](https://git.io/preact-richtextarea): Simple HTML editor component\n- :bookmark: [**preact-token-input**](https://github.com/developit/preact-token-input): Text field that tokenizes input, for things like tags\n- :card_index: [**preact-virtual-list**](https://github.com/developit/preact-virtual-list): Easily render lists with millions of rows ([demo](https://jsfiddle.net/developit/qqan9pdo/))\n- :repeat: [**preact-cycle**](https://git.io/preact-cycle): Functional-reactive paradigm for Preact\n- :triangular_ruler: [**preact-layout**](https://download.github.io/preact-layout/): Small and simple layout library\n- :thought_balloon: [**preact-socrates**](https://github.com/matthewmueller/preact-socrates): Preact plugin for [Socrates](http://github.com/matthewmueller/socrates)\n- :rowboat: [**preact-flyd**](https://github.com/xialvjun/preact-flyd): Use [flyd](https://github.com/paldepind/flyd) FRP streams in Preact + JSX\n- :speech_balloon: [**preact-i18nline**](https://github.com/download/preact-i18nline): Integrates the ecosystem around [i18n-js](https://github.com/everydayhero/i18n-js) with Preact via [i18nline](https://github.com/download/i18nline).\n- :microscope: [**preact-jsx-chai**](https://git.io/preact-jsx-chai): JSX assertion testing _(no DOM, right in Node)_\n- :tophat: [**preact-classless-component**](https://github.com/ld0rman/preact-classless-component): create preact components without the class keyword\n- :hammer: [**preact-hyperscript**](https://github.com/queckezz/preact-hyperscript): Hyperscript-like syntax for creating elements\n- :white_check_mark: [**shallow-compare**](https://github.com/tkh44/shallow-compare): simplified `shouldComponentUpdate` helper.\n- :shaved_ice: [**preact-codemod**](https://github.com/vutran/preact-codemod): Transform your React code to Preact.\n- :construction_worker: [**preact-helmet**](https://github.com/download/preact-helmet): A document head manager for Preact\n- :necktie: [**preact-delegate**](https://github.com/NekR/preact-delegate): Delegate DOM events\n- :art: [**preact-stylesheet-decorator**](https://github.com/k1r0s/preact-stylesheet-decorator): Add Scoped Stylesheets to your Preact Components\n- :electric_plug: [**preact-routlet**](https://github.com/k1r0s/preact-routlet): Simple `Component Driven` Routing for Preact using ES7 Decorators\n- :fax: [**preact-bind-group**](https://github.com/k1r0s/preact-bind-group): Preact Forms made easy, Group Events into a Single Callback\n- :hatching_chick: [**preact-habitat**](https://github.com/zouhir/preact-habitat): Declarative Preact widgets renderer in any CMS or DOM host ([demo](https://codepen.io/zouhir/pen/brrOPB)).\n- :tada: [**proppy-preact**](https://github.com/fahad19/proppy): Functional props composition for Preact components\n\n#### UI Component Libraries\n\n> Want to prototype something or speed up your development? Try one of these toolkits:\n\n- [**preact-material-components**](https://github.com/prateekbh/preact-material-components): Material Design Components for Preact ([website](https://material.preactjs.com/))\n- [**preact-mdc**](https://github.com/BerndWessels/preact-mdc): Material Design Components for Preact ([demo](https://github.com/BerndWessels/preact-mdc-demo))\n- [**preact-mui**](https://git.io/v1aVO): The MUI CSS Preact library.\n- [**preact-photon**](https://git.io/preact-photon): build beautiful desktop UI with [photon](http://photonkit.com)\n- [**preact-mdl**](https://git.io/preact-mdl): [Material Design Lite](https://getmdl.io) for Preact\n- [**preact-weui**](https://github.com/afeiship/preact-weui): [Weui](https://github.com/afeiship/preact-weui) for Preact\n\n\n---\n\n## Getting Started\n\n> 💁 _**Note:** You [don't need ES2015 to use Preact](https://github.com/developit/preact-in-es3)... but give it a try!_\n\nThe easiest way to get started with Preact is to install [Preact CLI](https://github.com/developit/preact-cli). This simple command-line tool wraps up the best possible Webpack and Babel setup for you, and even keeps you up-to-date as the underlying tools change. Best of all, it's easy to understand! It builds your app in a single command (`preact build`), doesn't need any configuration, and bakes in best-practises 🙌.\n\nThe following guide assumes you have some sort of ES2015 build set up using babel and/or webpack/browserify/gulp/grunt/etc.\n\nYou can also start with [preact-boilerplate] or a [CodePen Template](http://codepen.io/developit/pen/pgaROe?editors=0010).\n\n\n### Import what you need\n\nThe `preact` module provides both named and default exports, so you can either import everything under a namespace of your choosing, or just what you need as locals:\n\n##### Named:\n\n```js\nimport { h, render, Component } from 'preact';\n\n// Tell Babel to transform JSX into h() calls:\n/** @jsx h */\n```\n\n##### Default:\n\n```js\nimport preact from 'preact';\n\n// Tell Babel to transform JSX into preact.h() calls:\n/** @jsx preact.h */\n```\n\n> Named imports work well for highly structured applications, whereas the default import is quick and never needs to be updated when using different parts of the library.\n>\n> Instead of declaring the `@jsx` pragma in your code, it's best to configure it globally in a `.babelrc`:\n>\n> **For Babel 5 and prior:**\n>\n> ```json\n> { \"jsxPragma\": \"h\" }\n> ```\n>\n> **For Babel 6:**\n>\n> ```json\n> {\n> \"plugins\": [\n> [\"transform-react-jsx\", { \"pragma\":\"h\" }]\n> ]\n> }\n> ```\n>\n> **For Babel 7:**\n>\n> ```json\n> {\n> \"plugins\": [\n> [\"@babel/plugin-transform-react-jsx\", { \"pragma\":\"h\" }]\n> ]\n> }\n> ```\n> **For using Preact along with TypeScript add to `tsconfig.json`:**\n>\n> ```json\n> {\n> \"jsx\": \"react\",\n> \"jsxFactory\": \"h\",\n> }\n> ```\n\n\n### Rendering JSX\n\nOut of the box, Preact provides an `h()` function that turns your JSX into Virtual DOM elements _([here's how](http://jasonformat.com/wtf-is-jsx))_. It also provides a `render()` function that creates a DOM tree from that Virtual DOM.\n\nTo render some JSX, just import those two functions and use them like so:\n\n```js\nimport { h, render } from 'preact';\n\nrender((\n\t
\n\t\tHello, world!\n\t\t\n\t
\n), document.body);\n```\n\nThis should seem pretty straightforward if you've used hyperscript or one of its many friends. If you're not, the short of it is that the `h()` function import gets used in the final, transpiled code as a drop in replacement for `React.createElement()`, and so needs to be imported even if you don't explicitly use it in the code you write. Also note that if you're the kind of person who likes writing your React code in \"pure JavaScript\" (you know who you are) you will need to use `h()` wherever you would otherwise use `React.createElement()`.\n\nRendering hyperscript with a virtual DOM is pointless, though. We want to render components and have them updated when data changes - that's where the power of virtual DOM diffing shines. :star2:\n\n\n### Components\n\nPreact exports a generic `Component` class, which can be extended to build encapsulated, self-updating pieces of a User Interface. Components support all of the standard React [lifecycle methods], like `shouldComponentUpdate()` and `componentWillReceiveProps()`. Providing specific implementations of these methods is the preferred mechanism for controlling _when_ and _how_ components update.\n\nComponents also have a `render()` method, but unlike React this method is passed `(props, state)` as arguments. This provides an ergonomic means to destructure `props` and `state` into local variables to be referenced from JSX.\n\nLet's take a look at a very simple `Clock` component, which shows the current time.\n\n```js\nimport { h, render, Component } from 'preact';\n\nclass Clock extends Component {\n\trender() {\n\t\tlet time = new Date();\n\t\treturn ;\n\t}\n}\n\n// render an instance of Clock into :\nrender(, document.body);\n```\n\n\nThat's great. Running this produces the following HTML DOM structure:\n\n```html\n10:28:57 PM\n```\n\nIn order to have the clock's time update every second, we need to know when `` gets mounted to the DOM. _If you've used HTML5 Custom Elements, this is similar to the `attachedCallback` and `detachedCallback` lifecycle methods._ Preact invokes the following lifecycle methods if they are defined for a Component:\n\n| Lifecycle method | When it gets called |\n|-----------------------------|--------------------------------------------------|\n| `componentWillMount` | before the component gets mounted to the DOM |\n| `componentDidMount` | after the component gets mounted to the DOM |\n| `componentWillUnmount` | prior to removal from the DOM |\n| `componentWillReceiveProps` | before new props get accepted |\n| `shouldComponentUpdate` | before `render()`. Return `false` to skip render |\n| `componentWillUpdate` | before `render()` |\n| `componentDidUpdate` | after `render()` |\n\n\n\nSo, we want to have a 1-second timer start once the Component gets added to the DOM, and stop if it is removed. We'll create the timer and store a reference to it in `componentDidMount()`, and stop the timer in `componentWillUnmount()`. On each timer tick, we'll update the component's `state` object with a new time value. Doing this will automatically re-render the component.\n\n```js\nimport { h, render, Component } from 'preact';\n\nclass Clock extends Component {\n\tconstructor() {\n\t\tsuper();\n\t\t// set initial time:\n\t\tthis.state = {\n\t\t\ttime: Date.now()\n\t\t};\n\t}\n\n\tcomponentDidMount() {\n\t\t// update time every second\n\t\tthis.timer = setInterval(() => {\n\t\t\tthis.setState({ time: Date.now() });\n\t\t}, 1000);\n\t}\n\n\tcomponentWillUnmount() {\n\t\t// stop when not renderable\n\t\tclearInterval(this.timer);\n\t}\n\n\trender(props, state) {\n\t\tlet time = new Date(state.time).toLocaleTimeString();\n\t\treturn { time };\n\t}\n}\n\n// render an instance of Clock into :\nrender(, document.body);\n```\n\nNow we have [a ticking clock](http://jsfiddle.net/developit/u9m5x0L7/embedded/result,js/)!\n\n\n### Props & State\n\nThe concept (and nomenclature) for `props` and `state` is the same as in React. `props` are passed to a component by defining attributes in JSX, `state` is internal state. Changing either triggers a re-render, though by default Preact re-renders Components asynchronously for `state` changes and synchronously for `props` changes. You can tell Preact to render `prop` changes asynchronously by setting `options.syncComponentUpdates` to `false`.\n\n\n---\n\n\n## Linked State\n\nOne area Preact takes a little further than React is in optimizing state changes. A common pattern in ES2015 React code is to use Arrow functions within a `render()` method in order to update state in response to events. Creating functions enclosed in a scope on every render is inefficient and forces the garbage collector to do more work than is necessary.\n\nOne solution to this is to bind component methods declaratively.\nHere is an example using [decko](http://git.io/decko):\n\n```js\nclass Foo extends Component {\n\t@bind\n\tupdateText(e) {\n\t\tthis.setState({ text: e.target.value });\n\t}\n\trender({ }, { text }) {\n\t\treturn ;\n\t}\n}\n```\n\nWhile this achieves much better runtime performance, it's still a lot of unnecessary code to wire up state to UI.\n\nFortunately there is a solution, in the form of a module called [linkstate](https://github.com/developit/linkstate). Calling `linkState(component, 'text')` returns a function that accepts an Event and uses its associated value to update the given property in your component's state. Calls to `linkState()` with the same arguments are cached, so there is no performance penalty. Here is the previous example rewritten using _Linked State_:\n\n```js\nimport linkState from 'linkstate';\n\nclass Foo extends Component {\n\trender({ }, { text }) {\n\t\treturn ;\n\t}\n}\n```\n\nSimple and effective. It handles linking state from any input type, or an optional second parameter can be used to explicitly provide a keypath to the new state value.\n\n> **Note:** In Preact 7 and prior, `linkState()` was built right into Component. In 8.0, it was moved to a separate module. You can restore the 7.x behavior by using linkstate as a polyfill - see [the linkstate docs](https://github.com/developit/linkstate#usage).\n\n\n\n## Examples\n\nHere is a somewhat verbose Preact `` component:\n\n```js\nclass Link extends Component {\n\trender(props, state) {\n\t\treturn {props.children};\n\t}\n}\n```\n\nSince this is ES6/ES2015, we can further simplify:\n\n```js\nclass Link extends Component {\n render({ href, children }) {\n return ;\n }\n}\n\n// or, for wide-open props support:\nclass Link extends Component {\n render(props) {\n return ;\n }\n}\n\n// or, as a stateless functional component:\nconst Link = ({ children, ...props }) => (\n { children }\n);\n```\n\n\n## Extensions\n\nIt is likely that some projects based on Preact would wish to extend Component with great new functionality.\n\nPerhaps automatic connection to stores for a Flux-like architecture, or mixed-in context bindings to make it feel more like `React.createClass()`. Just use ES2015 inheritance:\n\n```js\nclass BoundComponent extends Component {\n\tconstructor(props) {\n\t\tsuper(props);\n\t\tthis.bind();\n\t}\n\tbind() {\n\t\tthis.binds = {};\n\t\tfor (let i in this) {\n\t\t\tthis.binds[i] = this[i].bind(this);\n\t\t}\n\t}\n}\n\n// example usage\nclass Link extends BoundComponent {\n\tclick() {\n\t\topen(this.href);\n\t}\n\trender() {\n\t\tlet { click } = this.binds;\n\t\treturn { children };\n\t}\n}\n```\n\n\nThe possibilities are pretty endless here. You could even add support for rudimentary mixins:\n\n```js\nclass MixedComponent extends Component {\n\tconstructor() {\n\t\tsuper();\n\t\t(this.mixins || []).forEach( m => Object.assign(this, m) );\n\t}\n}\n```\n\n## Debug Mode\n\nYou can inspect and modify the state of your Preact UI components at runtime using the\n[React Developer Tools](https://github.com/facebook/react-devtools) browser extension.\n\n1. Install the [React Developer Tools](https://github.com/facebook/react-devtools) extension\n2. Import the \"preact/debug\" module in your app\n3. Set `process.env.NODE_ENV` to 'development'\n4. Reload and go to the 'React' tab in the browser's development tools\n\n\n```js\nimport { h, Component, render } from 'preact';\n\n// Enable debug mode. You can reduce the size of your app by only including this\n// module in development builds. eg. In Webpack, wrap this with an `if (module.hot) {...}`\n// check.\nrequire('preact/debug');\n```\n\n### Runtime Error Checking\n\nTo enable debug mode, you need to set `process.env.NODE_ENV=development`. You can do this\nwith webpack via a builtin plugin.\n\n```js\n// webpack.config.js\n\n// Set NODE_ENV=development to enable error checking\nnew webpack.DefinePlugin({\n 'process.env': {\n 'NODE_ENV': JSON.stringify('development')\n }\n});\n```\n\nWhen enabled, warnings are logged to the console when undefined components or string refs\nare detected.\n\n### Developer Tools\n\nIf you only want to include devtool integration, without runtime error checking, you can\nreplace `preact/debug` in the above example with `preact/devtools`. This option doesn't\nrequire setting `NODE_ENV=development`.\n\n\n\n## Backers\nSupport us with a monthly donation and help us continue our activities. [[Become a backer](https://opencollective.com/preact#backer)]\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n## Sponsors\nBecome a sponsor and get your logo on our README on GitHub with a link to your site. [[Become a sponsor](https://opencollective.com/preact#sponsor)]\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n## License\n\nMIT\n\n\n\n[![Preact](http://i.imgur.com/YqCHvEW.gif)](https://preactjs.com)\n\n\n[preact-compat]: https://github.com/developit/preact-compat\n[ES6 Class]: https://facebook.github.io/react/docs/reusable-components.html#es6-classes\n[Functional Components]: https://facebook.github.io/react/blog/2015/10/07/react-v0.14.html#stateless-functional-components\n[hyperscript]: https://github.com/dominictarr/hyperscript\n[preact-boilerplate]: https://github.com/developit/preact-boilerplate\n[lifecycle methods]: https://facebook.github.io/react/docs/component-specs.html\n","readmeFilename":"README.md","_id":"preact@10.0.0-alpha.0","_npmVersion":"6.4.1","_nodeVersion":"10.15.0","_npmUser":{"name":"developit","email":"jason@developit.ca"},"dist":{"integrity":"sha512-GO2JTMOuoys4m3652dEv8knD+F36LMCA37aIgCeHjsF6hGkNQJcV68qmRDdEFy79lsJcoaa+me8SGc4AOWnllg==","shasum":"24f35f5bd47c81387f4ee99517fc5c2320dbafa0","tarball":"http://localhost:4545/npm/registry/preact/preact-10.0.0-alpha.0.tgz","fileCount":63,"unpackedSize":698740,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcfbgdCRA9TVsSAnZWagAAxaoP/0WqTGSXBs83Oiph+Vbo\nAXWZ0KJsihRvGUbZfAjCV7TBUiL0RCauMZQBOPjCZWIgI3t7/rto6gUTicMx\nM3bqYkz2OkmC0a7kBx3wuwFBU7a5/x9DOjBudMRrS+AHVTZL0TtzJ4+Yf7PN\nAMu2vmmCh1ieRM/EYZbxL+OmMKHfafAf+tIFQzDYvmloZhE5GWmMStMMDyvt\nfdwiq+/ZtqfeVOzPrBhD8rvi4aqlWPYnZWdM6bIHyAZhrRd6V5MA532KZ7+Q\njhoMDiaSeyMvlVNzyp9RDQAPt/d2+53Ts196MlFBP/mKqFH0xT7uPoAbQUwA\nlmpXZAqo/y/r0u7/iXp6Lhk2ucmG/+OuOJFrOYChLRNo8u1qQsDSVZvFo4PE\nYLHvQKP0snQMvV5D7i6IneovSh00itrBBqElbkhGYf29wrT8wRbBFULfNfRI\ntReaFqunTCUg5hzDw7I9Fj/mxWIwzLCrzzTvwUqxM0MoMjibGkvCTICdT2xY\n63ErVuLZrn9r68hCgxP33XTzaBRpRE1FEZ9yHgIA2ZkEzkU1fs6DF4xs1Yy3\nYZRtPthUI95eqoBPq1tVPBPJ7d7yTZRh5CADqqc2zbxuNrEtJF79KfqTAChQ\n1IqewJLSTu1j2Q/9lXE2sNJYtd5DuQkwGrojTv1W4cGGuvAE0N/W2yFRZoRi\nT7ss\r\n=lfgy\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCymhtwYPeUPqyuIKBklbHxmfYdz0QGM1LOuKqkeiIY6QIgEGTm90mmB/sbz4xrmZN/CPlEkHYS47JheJ6l9vKWTkY="}]},"maintainers":[{"email":"jason@developit.ca","name":"developit"},{"email":"luke@lukeed.com","name":"lukeed"},{"email":"marvin@marvinhagemeister.de","name":"marvinhagemeister"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/preact_10.0.0-alpha.0_1551743004722_0.2035425710139782"},"_hasShrinkwrap":false},"10.0.0-alpha.1":{"name":"preact","amdName":"preact","version":"10.0.0-alpha.1","private":false,"description":"Fast 3kb React-compatible Virtual DOM library.","main":"dist/preact.js","module":"dist/preact.mjs","umd:main":"dist/preact.umd.js","source":"src/index.js","license":"MIT","types":"src/index.d.ts","scripts":{"build":"npm-run-all --parallel build:*","build:core":"microbundle build --raw","build:debug":"microbundle build --raw --cwd debug","build:hooks":"microbundle build --raw --cwd hooks","build:compat":"microbundle build --raw --cwd compat --globals 'preact/hooks=preactHooks'","dev":"microbundle watch --raw --format cjs,umd","dev:hooks":"microbundle watch --raw --format cjs --cwd hooks","test":"npm-run-all lint build --parallel test:mocha test:karma test:ts","test:flow":"flow check","test:ts":"tsc -p test/ts/ && mocha --require babel-register test/ts/**/*-test.js","test:mocha":"mocha --recursive --require babel-register test/shared test/node","test:karma":"cross-env COVERAGE=true karma start karma.conf.js --single-run","test:mocha:watch":"npm run test:mocha -- --watch","test:karma:watch":"karma start karma.conf.js --no-single-run","test:karma:hooks":"cross-env COVERAGE=false karma start karma.conf.js --grep=hooks/test/browser/**.js --no-single-run","test:karma:bench":"cross-env PERFORMANCE=true COVERAGE=false karma start karma.conf.js --grep=test/benchmarks/**.js --single-run","benchmark":"npm run test:karma:bench -- no-single-run","test:size":"bundlesize","lint":"eslint src test","postinstall":"node -e \"console.log('\\u001b[35m\\u001b[1mLove Preact? You can now donate to our open collective:\\u001b[22m\\u001b[39m\\n > \\u001b[34mhttps://opencollective.com/preact/donate\\u001b[0m')\""},"eslintConfig":{"extends":"developit","settings":{"react":{"pragma":"createElement"}},"rules":{"prefer-rest-params":0,"prefer-spread":0,"no-cond-assign":0,"react/jsx-no-bind":0,"react/prefer-stateless-function":0,"react/sort-comp":0,"jest/valid-expect":0,"jest/no-disabled-tests":0,"react/no-find-dom-node":0}},"keywords":["preact","react","virtual dom","vdom","components","virtual","dom"],"authors":["Jason Miller "],"repository":{"type":"git","url":"git+https://github.com/developit/preact.git"},"bugs":{"url":"https://github.com/developit/preact/issues"},"homepage":"https://github.com/developit/preact","dependencies":{"prop-types":"^15.6.2"},"devDependencies":{"@types/chai":"^4.1.2","@types/mocha":"^5.0.0","@types/node":"^10.5.2","babel-cli":"^6.24.1","babel-core":"^6.26.3","babel-loader":"^7.1.5","babel-plugin-istanbul":"^5.0.1","babel-plugin-transform-object-rest-spread":"^6.23.0","babel-plugin-transform-react-jsx":"^6.24.1","babel-preset-env":"^1.6.1","benchmark":"^2.1.4","bundlesize":"^0.17.0","chai":"^4.1.2","coveralls":"^3.0.0","cross-env":"^5.2.0","diff":"^3.5.0","eslint":"^5.1.0","eslint-config-developit":"^1.1.1","flow-bin":"^0.79.1","karma":"^3.0.0","karma-babel-preprocessor":"^7.0.0","karma-chai-sinon":"^0.1.5","karma-chrome-launcher":"^2.2.0","karma-coverage":"^1.1.2","karma-mocha":"^1.3.0","karma-mocha-reporter":"^2.2.5","karma-sauce-launcher":"^1.2.0","karma-sinon":"^1.0.5","karma-source-map-support":"^1.3.0","karma-sourcemap-loader":"^0.3.7","karma-webpack":"^3.0.5","lodash":"^4.17.10","microbundle":"^0.11.0","mocha":"^5.2.0","npm-run-all":"^4.0.0","sinon":"^6.1.3","sinon-chai":"^3.0.0","typescript":"^3.0.1","webpack":"^4.3.0"},"bundlesize":[{"path":"./dist/preact.js","maxSize":"3Kb"}],"gitHead":"1566a31f32b8657172b44b20b0182c9f56de67b1","_id":"preact@10.0.0-alpha.1","_npmVersion":"6.4.1","_nodeVersion":"9.11.1","_npmUser":{"name":"marvinhagemeister","email":"marvin@marvinhagemeister.de"},"dist":{"integrity":"sha512-9mDFKeU8SkepfCcjsoq/lODLKBtjgZj/aGBJaVXTNOEZV5XgOfE2TZQkFWDejE7w/q1qKUh1tJZaAeICxAKJ1g==","shasum":"0c8ee161fcd23839568cd52487d2dc07ca1b3166","tarball":"http://localhost:4545/npm/registry/preact/preact-10.0.0-alpha.1.tgz","fileCount":58,"unpackedSize":524943,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcgXcPCRA9TVsSAnZWagAAkvwP/Rv7B7A/NivRNKhj0+P1\n6bEJjlkRrsVYXHL4H2CK6bjZN1feHIFmCmBbkUPyCn9pRAkTMzUsF2QyJNSh\nc5VxGJZGMyNAcCb+BlfvFHpgajHamcqw+LB6vpbeEvf9Zxmh2gMVntAOuONS\nuI2Q+b2EkJyeNepCrVSDa/YdLyZDHc7JrSEoB6MljQTn1UAMZfVbUjTgGATL\nWsz9SuuTPDH01TPOgHXzlOrbvfPTiKtWJIcD7T5+gD+6OVqphg69wtVpCnFo\nGk8/uFv2Xb2rv3XdnaNKi2hWhKf3pwgnLDKOIJsHQJFJVGf5PPqx072Feo6l\nti1e39HE1XsE/zO82kKRQo4bzNE6dEJfM6wkyqo+Ecccv4XIvCX+bh6mel2o\nxlqYt2VxNmO80S3UTiLUJcepWTPSpowKSypRUykdxoQhV8NSV1jpzdPmTRf+\n+MDRTT/w8Sqqdr/iICF4LyRSNPAEg10Leai2mExa+EdwFFII66jWiRDiiI/H\nt0c9Wlu5ZRr7qCGg+rgjg+S8PaIaaCzD7jloCVyqWAyEuoeqvt7jMjjtila3\nK6tIST7dOl2bxCbvKMuU950vFiX+s5kMtXwA8A1uYg2+ovH/lSIi3Ol6Ko8j\njqLiLplPXzq2F85r9dSDyAISa+UF4moduawjEzKHHN8mfudfj4Y72ZxS78Cq\nOSHH\r\n=j5Se\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDr3WxEO9KCNuZ/NcxvvYr9wpzsO/SytjiopMwxzRtY7QIgQL2w1fYfaf3GH/1gouBghCUwnb4ugyr6/BLFEaoNjSQ="}]},"maintainers":[{"email":"jason@developit.ca","name":"developit"},{"email":"luke@lukeed.com","name":"lukeed"},{"email":"marvin@marvinhagemeister.de","name":"marvinhagemeister"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/preact_10.0.0-alpha.1_1551988494838_0.3059095650216668"},"_hasShrinkwrap":false},"10.0.0-alpha.2":{"name":"preact","amdName":"preact","version":"10.0.0-alpha.2","private":false,"description":"Fast 3kb React-compatible Virtual DOM library.","main":"dist/preact.js","module":"dist/preact.mjs","umd:main":"dist/preact.umd.js","source":"src/index.js","license":"MIT","types":"src/index.d.ts","scripts":{"build":"npm-run-all --parallel build:*","build:core":"microbundle build --raw","build:debug":"microbundle build --raw --cwd debug","build:hooks":"microbundle build --raw --cwd hooks","build:test-utils":"microbundle build --raw --cwd test-utils","build:compat":"microbundle build --raw --cwd compat --globals 'preact/hooks=preactHooks'","dev":"microbundle watch --raw --format cjs,umd","dev:hooks":"microbundle watch --raw --format cjs --cwd hooks","test":"npm-run-all lint build --parallel test:mocha test:karma test:ts","test:flow":"flow check","test:ts":"tsc -p test/ts/ && mocha --require babel-register test/ts/**/*-test.js","test:mocha":"mocha --recursive --require babel-register test/shared test/node","test:karma":"cross-env COVERAGE=true karma start karma.conf.js --single-run","test:mocha:watch":"npm run test:mocha -- --watch","test:karma:watch":"karma start karma.conf.js --no-single-run","test:karma:hooks":"cross-env COVERAGE=false karma start karma.conf.js --grep=hooks/test/browser/**.js --no-single-run","test:karma:test-utils":"cross-env PERFORMANCE=false COVERAGE=false karma start karma.conf.js --grep=test-utils/test/shared/**.js --no-single-run","test:karma:bench":"cross-env PERFORMANCE=true COVERAGE=false karma start karma.conf.js --grep=test/benchmarks/**.js --single-run","benchmark":"npm run test:karma:bench -- no-single-run","test:size":"bundlesize","lint":"eslint src test","postinstall":"node -e \"console.log('\\u001b[35m\\u001b[1mLove Preact? You can now donate to our open collective:\\u001b[22m\\u001b[39m\\n > \\u001b[34mhttps://opencollective.com/preact/donate\\u001b[0m')\""},"eslintConfig":{"extends":"developit","settings":{"react":{"pragma":"createElement"}},"rules":{"prefer-rest-params":0,"prefer-spread":0,"no-cond-assign":0,"react/jsx-no-bind":0,"react/prefer-stateless-function":0,"react/sort-comp":0,"jest/valid-expect":0,"jest/no-disabled-tests":0,"react/no-find-dom-node":0}},"keywords":["preact","react","virtual dom","vdom","components","virtual","dom"],"authors":["Jason Miller "],"repository":{"type":"git","url":"git+https://github.com/developit/preact.git"},"bugs":{"url":"https://github.com/developit/preact/issues"},"homepage":"https://github.com/developit/preact","dependencies":{"prop-types":"^15.6.2"},"devDependencies":{"@types/chai":"^4.1.2","@types/mocha":"^5.0.0","@types/node":"^10.5.2","babel-cli":"^6.24.1","babel-core":"^6.26.3","babel-loader":"^7.1.5","babel-plugin-istanbul":"^5.0.1","babel-plugin-transform-object-rest-spread":"^6.23.0","babel-plugin-transform-react-jsx":"^6.24.1","babel-preset-env":"^1.6.1","benchmark":"^2.1.4","bundlesize":"^0.17.0","chai":"^4.1.2","coveralls":"^3.0.0","cross-env":"^5.2.0","diff":"^3.5.0","eslint":"^5.1.0","eslint-config-developit":"^1.1.1","flow-bin":"^0.79.1","karma":"^3.0.0","karma-babel-preprocessor":"^7.0.0","karma-chai-sinon":"^0.1.5","karma-chrome-launcher":"^2.2.0","karma-coverage":"^1.1.2","karma-mocha":"^1.3.0","karma-mocha-reporter":"^2.2.5","karma-sauce-launcher":"^1.2.0","karma-sinon":"^1.0.5","karma-source-map-support":"^1.3.0","karma-sourcemap-loader":"^0.3.7","karma-webpack":"^3.0.5","lodash":"^4.17.10","microbundle":"^0.11.0","mocha":"^5.2.0","npm-run-all":"^4.0.0","sinon":"^6.1.3","sinon-chai":"^3.0.0","typescript":"^3.0.1","webpack":"^4.3.0"},"bundlesize":[{"path":"./dist/preact.js","maxSize":"3Kb"}],"gitHead":"3b448bb516922426fd48c10601c6b21990be380f","readme":"
Fast 3kB alternative to React with the same modern API.
\n\n**All the power of Virtual DOM components, without the overhead:**\n\n- Familiar React API & patterns: [ES6 Class] and [Functional Components]\n- Extensive React compatibility via a simple [preact-compat] alias\n- Everything you need: JSX, VDOM, React DevTools, HMR, SSR..\n- A highly optimized diff algorithm and seamless Server Side Rendering\n- Transparent asynchronous rendering with a pluggable scheduler\n- 🆕💥 **Instant no-config app bundling with [Preact CLI](https://github.com/developit/preact-cli)**\n\n### 💁 More information at the [Preact Website ➞](https://preactjs.com)\n\n\n---\n\n\n\n- [Demos](#demos)\n- [Libraries & Add-ons](#libraries--add-ons)\n- [Getting Started](#getting-started)\n\t- [Import what you need](#import-what-you-need)\n\t- [Rendering JSX](#rendering-jsx)\n\t- [Components](#components)\n\t- [Props & State](#props--state)\n- [Linked State](#linked-state)\n- [Examples](#examples)\n- [Extensions](#extensions)\n- [Debug Mode](#debug-mode)\n- [Backers](#backers)\n- [Sponsors](#sponsors)\n- [License](#license)\n\n\n\n\n# Preact\n\n[![npm](https://img.shields.io/npm/v/preact.svg)](http://npm.im/preact)\n[![CDNJS](https://img.shields.io/cdnjs/v/preact.svg)](https://cdnjs.com/libraries/preact)\n[![Preact Slack Community](https://preact-slack.now.sh/badge.svg)](https://preact-slack.now.sh)\n[![OpenCollective Backers](https://opencollective.com/preact/backers/badge.svg)](#backers)\n[![OpenCollective Sponsors](https://opencollective.com/preact/sponsors/badge.svg)](#sponsors)\n[![travis](https://travis-ci.org/developit/preact.svg?branch=master)](https://travis-ci.org/developit/preact)\n[![coveralls](https://img.shields.io/coveralls/developit/preact/master.svg)](https://coveralls.io/github/developit/preact)\n[![gzip size](http://img.badgesize.io/https://unpkg.com/preact/dist/preact.min.js?compression=gzip)](https://unpkg.com/preact/dist/preact.min.js)\n[![install size](https://packagephobia.now.sh/badge?p=preact)](https://packagephobia.now.sh/result?p=preact)\n\nPreact supports modern browsers and IE9+:\n\n[![Browsers](https://saucelabs.com/browser-matrix/preact.svg)](https://saucelabs.com/u/preact)\n\n\n---\n\n\n## Demos\n\n#### Real-World Apps\n\n- [**Preact Hacker News**](https://hn.kristoferbaxter.com) _([GitHub Project](https://github.com/kristoferbaxter/preact-hn))_\n- [**Play.cash**](https://play.cash) :notes: _([GitHub Project](https://github.com/feross/play.cash))_\n- [**BitMidi**](https://bitmidi.com/) 🎹 Wayback machine for free MIDI files _([GitHub Project](https://github.com/feross/bitmidi.com))_\n- [**Ultimate Guitar**](https://www.ultimate-guitar.com) 🎸speed boosted by Preact.\n- [**ESBench**](http://esbench.com) is built using Preact.\n- [**BigWebQuiz**](https://bigwebquiz.com) _([GitHub Project](https://github.com/jakearchibald/big-web-quiz))_\n- [**Nectarine.rocks**](http://nectarine.rocks) _([GitHub Project](https://github.com/developit/nectarine))_ :peach:\n- [**TodoMVC**](https://preact-todomvc.surge.sh) _([GitHub Project](https://github.com/developit/preact-todomvc))_\n- [**OSS.Ninja**](https://oss.ninja) _([GitHub Project](https://github.com/developit/oss.ninja))_\n- [**GuriVR**](https://gurivr.com) _([GitHub Project](https://github.com/opennewslabs/guri-vr))_\n- [**Color Picker**](https://colors.now.sh) _([GitHub Project](https://github.com/lukeed/colors-app))_ :art:\n- [**Offline Gallery**](https://use-the-platform.com/offline-gallery/) _([GitHub Project](https://github.com/vaneenige/offline-gallery/))_ :balloon:\n- [**Periodic Weather**](https://use-the-platform.com/periodic-weather/) _([GitHub Project](https://github.com/vaneenige/periodic-weather/))_ :sunny:\n- [**Rugby News Board**](http://nbrugby.com) _[(GitHub Project)](https://github.com/rugby-board/rugby-board-node)_\n- [**Preact Gallery**](https://preact.gallery/) an 8KB photo gallery PWA built using Preact.\n- [**Rainbow Explorer**](https://use-the-platform.com/rainbow-explorer/) Preact app to translate real life color to digital color _([Github project](https://github.com/vaneenige/rainbow-explorer))_.\n- [**YASCC**](https://carlosqsilva.github.io/YASCC/#/) Yet Another SoundCloud Client _([Github project](https://github.com/carlosqsilva/YASCC))_.\n- [**Journalize**](https://preact-journal.herokuapp.com/) 14k offline-capable journaling PWA using preact. _([Github project](https://github.com/jpodwys/preact-journal))_.\n\n\n#### Runnable Examples\n\n- [**Flickr Browser**](http://codepen.io/developit/full/VvMZwK/) (@ CodePen)\n- [**Animating Text**](http://codepen.io/developit/full/LpNOdm/) (@ CodePen)\n- [**60FPS Rainbow Spiral**](http://codepen.io/developit/full/xGoagz/) (@ CodePen)\n- [**Simple Clock**](http://jsfiddle.net/developit/u9m5x0L7/embedded/result,js/) (@ JSFiddle)\n- [**3D + ThreeJS**](http://codepen.io/developit/pen/PPMNjd?editors=0010) (@ CodePen)\n- [**Stock Ticker**](http://codepen.io/developit/pen/wMYoBb?editors=0010) (@ CodePen)\n- [*Create your Own!*](https://jsfiddle.net/developit/rs6zrh5f/embedded/result/) (@ JSFiddle)\n\n### Starter Projects\n\n- [**Preact Boilerplate**](https://preact-boilerplate.surge.sh) _([GitHub Project](https://github.com/developit/preact-boilerplate))_ :zap:\n- [**Preact Offline Starter**](https://preact-starter.now.sh) _([GitHub Project](https://github.com/lukeed/preact-starter))_ :100:\n- [**Preact PWA**](https://preact-pwa-yfxiijbzit.now.sh/) _([GitHub Project](https://github.com/ezekielchentnik/preact-pwa))_ :hamburger:\n- [**Parcel + Preact + Unistore Starter**](https://github.com/hwclass/parcel-preact-unistore-starter)\n- [**Preact Mobx Starter**](https://awaw00.github.io/preact-mobx-starter/) _([GitHub Project](https://github.com/awaw00/preact-mobx-starter))_ :sunny:\n- [**Preact Redux Example**](https://github.com/developit/preact-redux-example) :star:\n- [**Preact Redux/RxJS/Reselect Example**](https://github.com/continuata/preact-seed)\n- [**V2EX Preact**](https://github.com/yanni4night/v2ex-preact)\n- [**Preact Coffeescript**](https://github.com/crisward/preact-coffee)\n- [**Preact + TypeScript + Webpack**](https://github.com/k1r0s/bleeding-preact-starter)\n- [**0 config => Preact + Poi**](https://github.com/k1r0s/preact-poi-starter)\n- [**Zero configuration => Preact + Typescript + Parcel**](https://github.com/aalises/preact-typescript-parcel-starter)\n\n---\n\n## Libraries & Add-ons\n\n- :raised_hands: [**preact-compat**](https://git.io/preact-compat): use any React library with Preact *([full example](http://git.io/preact-compat-example))*\n- :twisted_rightwards_arrows: [**preact-context**](https://github.com/valotas/preact-context): React's `createContext` api for Preact\n- :page_facing_up: [**preact-render-to-string**](https://git.io/preact-render-to-string): Universal rendering.\n- :eyes: [**preact-render-spy**](https://github.com/mzgoddard/preact-render-spy): Enzyme-lite: Renderer with access to the produced virtual dom for testing.\n- :loop: [**preact-render-to-json**](https://git.io/preact-render-to-json): Render for Jest Snapshot testing.\n- :earth_americas: [**preact-router**](https://git.io/preact-router): URL routing for your components\n- :bookmark_tabs: [**preact-markup**](https://git.io/preact-markup): Render HTML & Custom Elements as JSX & Components\n- :satellite: [**preact-portal**](https://git.io/preact-portal): Render Preact components into (a) SPACE :milky_way:\n- :pencil: [**preact-richtextarea**](https://git.io/preact-richtextarea): Simple HTML editor component\n- :bookmark: [**preact-token-input**](https://github.com/developit/preact-token-input): Text field that tokenizes input, for things like tags\n- :card_index: [**preact-virtual-list**](https://github.com/developit/preact-virtual-list): Easily render lists with millions of rows ([demo](https://jsfiddle.net/developit/qqan9pdo/))\n- :repeat: [**preact-cycle**](https://git.io/preact-cycle): Functional-reactive paradigm for Preact\n- :triangular_ruler: [**preact-layout**](https://download.github.io/preact-layout/): Small and simple layout library\n- :thought_balloon: [**preact-socrates**](https://github.com/matthewmueller/preact-socrates): Preact plugin for [Socrates](http://github.com/matthewmueller/socrates)\n- :rowboat: [**preact-flyd**](https://github.com/xialvjun/preact-flyd): Use [flyd](https://github.com/paldepind/flyd) FRP streams in Preact + JSX\n- :speech_balloon: [**preact-i18nline**](https://github.com/download/preact-i18nline): Integrates the ecosystem around [i18n-js](https://github.com/everydayhero/i18n-js) with Preact via [i18nline](https://github.com/download/i18nline).\n- :microscope: [**preact-jsx-chai**](https://git.io/preact-jsx-chai): JSX assertion testing _(no DOM, right in Node)_\n- :tophat: [**preact-classless-component**](https://github.com/ld0rman/preact-classless-component): create preact components without the class keyword\n- :hammer: [**preact-hyperscript**](https://github.com/queckezz/preact-hyperscript): Hyperscript-like syntax for creating elements\n- :white_check_mark: [**shallow-compare**](https://github.com/tkh44/shallow-compare): simplified `shouldComponentUpdate` helper.\n- :shaved_ice: [**preact-codemod**](https://github.com/vutran/preact-codemod): Transform your React code to Preact.\n- :construction_worker: [**preact-helmet**](https://github.com/download/preact-helmet): A document head manager for Preact\n- :necktie: [**preact-delegate**](https://github.com/NekR/preact-delegate): Delegate DOM events\n- :art: [**preact-stylesheet-decorator**](https://github.com/k1r0s/preact-stylesheet-decorator): Add Scoped Stylesheets to your Preact Components\n- :electric_plug: [**preact-routlet**](https://github.com/k1r0s/preact-routlet): Simple `Component Driven` Routing for Preact using ES7 Decorators\n- :fax: [**preact-bind-group**](https://github.com/k1r0s/preact-bind-group): Preact Forms made easy, Group Events into a Single Callback\n- :hatching_chick: [**preact-habitat**](https://github.com/zouhir/preact-habitat): Declarative Preact widgets renderer in any CMS or DOM host ([demo](https://codepen.io/zouhir/pen/brrOPB)).\n- :tada: [**proppy-preact**](https://github.com/fahad19/proppy): Functional props composition for Preact components\n\n#### UI Component Libraries\n\n> Want to prototype something or speed up your development? Try one of these toolkits:\n\n- [**preact-material-components**](https://github.com/prateekbh/preact-material-components): Material Design Components for Preact ([website](https://material.preactjs.com/))\n- [**preact-mdc**](https://github.com/BerndWessels/preact-mdc): Material Design Components for Preact ([demo](https://github.com/BerndWessels/preact-mdc-demo))\n- [**preact-mui**](https://git.io/v1aVO): The MUI CSS Preact library.\n- [**preact-photon**](https://git.io/preact-photon): build beautiful desktop UI with [photon](http://photonkit.com)\n- [**preact-mdl**](https://git.io/preact-mdl): [Material Design Lite](https://getmdl.io) for Preact\n- [**preact-weui**](https://github.com/afeiship/preact-weui): [Weui](https://github.com/afeiship/preact-weui) for Preact\n\n\n---\n\n## Getting Started\n\n> 💁 _**Note:** You [don't need ES2015 to use Preact](https://github.com/developit/preact-in-es3)... but give it a try!_\n\nThe easiest way to get started with Preact is to install [Preact CLI](https://github.com/developit/preact-cli). This simple command-line tool wraps up the best possible Webpack and Babel setup for you, and even keeps you up-to-date as the underlying tools change. Best of all, it's easy to understand! It builds your app in a single command (`preact build`), doesn't need any configuration, and bakes in best-practises 🙌.\n\nThe following guide assumes you have some sort of ES2015 build set up using babel and/or webpack/browserify/gulp/grunt/etc.\n\nYou can also start with [preact-boilerplate] or a [CodePen Template](http://codepen.io/developit/pen/pgaROe?editors=0010).\n\n\n### Import what you need\n\nThe `preact` module provides both named and default exports, so you can either import everything under a namespace of your choosing, or just what you need as locals:\n\n##### Named:\n\n```js\nimport { h, render, Component } from 'preact';\n\n// Tell Babel to transform JSX into h() calls:\n/** @jsx h */\n```\n\n##### Default:\n\n```js\nimport preact from 'preact';\n\n// Tell Babel to transform JSX into preact.h() calls:\n/** @jsx preact.h */\n```\n\n> Named imports work well for highly structured applications, whereas the default import is quick and never needs to be updated when using different parts of the library.\n>\n> Instead of declaring the `@jsx` pragma in your code, it's best to configure it globally in a `.babelrc`:\n>\n> **For Babel 5 and prior:**\n>\n> ```json\n> { \"jsxPragma\": \"h\" }\n> ```\n>\n> **For Babel 6:**\n>\n> ```json\n> {\n> \"plugins\": [\n> [\"transform-react-jsx\", { \"pragma\":\"h\" }]\n> ]\n> }\n> ```\n>\n> **For Babel 7:**\n>\n> ```json\n> {\n> \"plugins\": [\n> [\"@babel/plugin-transform-react-jsx\", { \"pragma\":\"h\" }]\n> ]\n> }\n> ```\n> **For using Preact along with TypeScript add to `tsconfig.json`:**\n>\n> ```json\n> {\n> \"jsx\": \"react\",\n> \"jsxFactory\": \"h\",\n> }\n> ```\n\n\n### Rendering JSX\n\nOut of the box, Preact provides an `h()` function that turns your JSX into Virtual DOM elements _([here's how](http://jasonformat.com/wtf-is-jsx))_. It also provides a `render()` function that creates a DOM tree from that Virtual DOM.\n\nTo render some JSX, just import those two functions and use them like so:\n\n```js\nimport { h, render } from 'preact';\n\nrender((\n\t
\n\t\tHello, world!\n\t\t\n\t
\n), document.body);\n```\n\nThis should seem pretty straightforward if you've used hyperscript or one of its many friends. If you're not, the short of it is that the `h()` function import gets used in the final, transpiled code as a drop in replacement for `React.createElement()`, and so needs to be imported even if you don't explicitly use it in the code you write. Also note that if you're the kind of person who likes writing your React code in \"pure JavaScript\" (you know who you are) you will need to use `h()` wherever you would otherwise use `React.createElement()`.\n\nRendering hyperscript with a virtual DOM is pointless, though. We want to render components and have them updated when data changes - that's where the power of virtual DOM diffing shines. :star2:\n\n\n### Components\n\nPreact exports a generic `Component` class, which can be extended to build encapsulated, self-updating pieces of a User Interface. Components support all of the standard React [lifecycle methods], like `shouldComponentUpdate()` and `componentWillReceiveProps()`. Providing specific implementations of these methods is the preferred mechanism for controlling _when_ and _how_ components update.\n\nComponents also have a `render()` method, but unlike React this method is passed `(props, state)` as arguments. This provides an ergonomic means to destructure `props` and `state` into local variables to be referenced from JSX.\n\nLet's take a look at a very simple `Clock` component, which shows the current time.\n\n```js\nimport { h, render, Component } from 'preact';\n\nclass Clock extends Component {\n\trender() {\n\t\tlet time = new Date();\n\t\treturn ;\n\t}\n}\n\n// render an instance of Clock into :\nrender(, document.body);\n```\n\n\nThat's great. Running this produces the following HTML DOM structure:\n\n```html\n10:28:57 PM\n```\n\nIn order to have the clock's time update every second, we need to know when `` gets mounted to the DOM. _If you've used HTML5 Custom Elements, this is similar to the `attachedCallback` and `detachedCallback` lifecycle methods._ Preact invokes the following lifecycle methods if they are defined for a Component:\n\n| Lifecycle method | When it gets called |\n|-----------------------------|--------------------------------------------------|\n| `componentWillMount` | before the component gets mounted to the DOM |\n| `componentDidMount` | after the component gets mounted to the DOM |\n| `componentWillUnmount` | prior to removal from the DOM |\n| `componentWillReceiveProps` | before new props get accepted |\n| `shouldComponentUpdate` | before `render()`. Return `false` to skip render |\n| `componentWillUpdate` | before `render()` |\n| `componentDidUpdate` | after `render()` |\n\n\n\nSo, we want to have a 1-second timer start once the Component gets added to the DOM, and stop if it is removed. We'll create the timer and store a reference to it in `componentDidMount()`, and stop the timer in `componentWillUnmount()`. On each timer tick, we'll update the component's `state` object with a new time value. Doing this will automatically re-render the component.\n\n```js\nimport { h, render, Component } from 'preact';\n\nclass Clock extends Component {\n\tconstructor() {\n\t\tsuper();\n\t\t// set initial time:\n\t\tthis.state = {\n\t\t\ttime: Date.now()\n\t\t};\n\t}\n\n\tcomponentDidMount() {\n\t\t// update time every second\n\t\tthis.timer = setInterval(() => {\n\t\t\tthis.setState({ time: Date.now() });\n\t\t}, 1000);\n\t}\n\n\tcomponentWillUnmount() {\n\t\t// stop when not renderable\n\t\tclearInterval(this.timer);\n\t}\n\n\trender(props, state) {\n\t\tlet time = new Date(state.time).toLocaleTimeString();\n\t\treturn { time };\n\t}\n}\n\n// render an instance of Clock into :\nrender(, document.body);\n```\n\nNow we have [a ticking clock](http://jsfiddle.net/developit/u9m5x0L7/embedded/result,js/)!\n\n\n### Props & State\n\nThe concept (and nomenclature) for `props` and `state` is the same as in React. `props` are passed to a component by defining attributes in JSX, `state` is internal state. Changing either triggers a re-render, though by default Preact re-renders Components asynchronously for `state` changes and synchronously for `props` changes. You can tell Preact to render `prop` changes asynchronously by setting `options.syncComponentUpdates` to `false`.\n\n\n---\n\n\n## Linked State\n\nOne area Preact takes a little further than React is in optimizing state changes. A common pattern in ES2015 React code is to use Arrow functions within a `render()` method in order to update state in response to events. Creating functions enclosed in a scope on every render is inefficient and forces the garbage collector to do more work than is necessary.\n\nOne solution to this is to bind component methods declaratively.\nHere is an example using [decko](http://git.io/decko):\n\n```js\nclass Foo extends Component {\n\t@bind\n\tupdateText(e) {\n\t\tthis.setState({ text: e.target.value });\n\t}\n\trender({ }, { text }) {\n\t\treturn ;\n\t}\n}\n```\n\nWhile this achieves much better runtime performance, it's still a lot of unnecessary code to wire up state to UI.\n\nFortunately there is a solution, in the form of a module called [linkstate](https://github.com/developit/linkstate). Calling `linkState(component, 'text')` returns a function that accepts an Event and uses its associated value to update the given property in your component's state. Calls to `linkState()` with the same arguments are cached, so there is no performance penalty. Here is the previous example rewritten using _Linked State_:\n\n```js\nimport linkState from 'linkstate';\n\nclass Foo extends Component {\n\trender({ }, { text }) {\n\t\treturn ;\n\t}\n}\n```\n\nSimple and effective. It handles linking state from any input type, or an optional second parameter can be used to explicitly provide a keypath to the new state value.\n\n> **Note:** In Preact 7 and prior, `linkState()` was built right into Component. In 8.0, it was moved to a separate module. You can restore the 7.x behavior by using linkstate as a polyfill - see [the linkstate docs](https://github.com/developit/linkstate#usage).\n\n\n\n## Examples\n\nHere is a somewhat verbose Preact `` component:\n\n```js\nclass Link extends Component {\n\trender(props, state) {\n\t\treturn {props.children};\n\t}\n}\n```\n\nSince this is ES6/ES2015, we can further simplify:\n\n```js\nclass Link extends Component {\n render({ href, children }) {\n return ;\n }\n}\n\n// or, for wide-open props support:\nclass Link extends Component {\n render(props) {\n return ;\n }\n}\n\n// or, as a stateless functional component:\nconst Link = ({ children, ...props }) => (\n { children }\n);\n```\n\n\n## Extensions\n\nIt is likely that some projects based on Preact would wish to extend Component with great new functionality.\n\nPerhaps automatic connection to stores for a Flux-like architecture, or mixed-in context bindings to make it feel more like `React.createClass()`. Just use ES2015 inheritance:\n\n```js\nclass BoundComponent extends Component {\n\tconstructor(props) {\n\t\tsuper(props);\n\t\tthis.bind();\n\t}\n\tbind() {\n\t\tthis.binds = {};\n\t\tfor (let i in this) {\n\t\t\tthis.binds[i] = this[i].bind(this);\n\t\t}\n\t}\n}\n\n// example usage\nclass Link extends BoundComponent {\n\tclick() {\n\t\topen(this.href);\n\t}\n\trender() {\n\t\tlet { click } = this.binds;\n\t\treturn { children };\n\t}\n}\n```\n\n\nThe possibilities are pretty endless here. You could even add support for rudimentary mixins:\n\n```js\nclass MixedComponent extends Component {\n\tconstructor() {\n\t\tsuper();\n\t\t(this.mixins || []).forEach( m => Object.assign(this, m) );\n\t}\n}\n```\n\n## Debug Mode\n\nYou can inspect and modify the state of your Preact UI components at runtime using the\n[React Developer Tools](https://github.com/facebook/react-devtools) browser extension.\n\n1. Install the [React Developer Tools](https://github.com/facebook/react-devtools) extension\n2. Import the \"preact/debug\" module in your app\n3. Set `process.env.NODE_ENV` to 'development'\n4. Reload and go to the 'React' tab in the browser's development tools\n\n\n```js\nimport { h, Component, render } from 'preact';\n\n// Enable debug mode. You can reduce the size of your app by only including this\n// module in development builds. eg. In Webpack, wrap this with an `if (module.hot) {...}`\n// check.\nrequire('preact/debug');\n```\n\n### Runtime Error Checking\n\nTo enable debug mode, you need to set `process.env.NODE_ENV=development`. You can do this\nwith webpack via a builtin plugin.\n\n```js\n// webpack.config.js\n\n// Set NODE_ENV=development to enable error checking\nnew webpack.DefinePlugin({\n 'process.env': {\n 'NODE_ENV': JSON.stringify('development')\n }\n});\n```\n\nWhen enabled, warnings are logged to the console when undefined components or string refs\nare detected.\n\n### Developer Tools\n\nIf you only want to include devtool integration, without runtime error checking, you can\nreplace `preact/debug` in the above example with `preact/devtools`. This option doesn't\nrequire setting `NODE_ENV=development`.\n\n\n\n## Backers\nSupport us with a monthly donation and help us continue our activities. [[Become a backer](https://opencollective.com/preact#backer)]\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n## Sponsors\nBecome a sponsor and get your logo on our README on GitHub with a link to your site. [[Become a sponsor](https://opencollective.com/preact#sponsor)]\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n## License\n\nMIT\n\n\n\n[![Preact](http://i.imgur.com/YqCHvEW.gif)](https://preactjs.com)\n\n\n[preact-compat]: https://github.com/developit/preact-compat\n[ES6 Class]: https://facebook.github.io/react/docs/reusable-components.html#es6-classes\n[Functional Components]: https://facebook.github.io/react/blog/2015/10/07/react-v0.14.html#stateless-functional-components\n[hyperscript]: https://github.com/dominictarr/hyperscript\n[preact-boilerplate]: https://github.com/developit/preact-boilerplate\n[lifecycle methods]: https://facebook.github.io/react/docs/component-specs.html\n","readmeFilename":"README.md","_id":"preact@10.0.0-alpha.2","_npmVersion":"6.4.1","_nodeVersion":"10.15.0","_npmUser":{"name":"developit","email":"jason@developit.ca"},"dist":{"integrity":"sha512-8G0UFC0Sa/giqI/jR3LIHzj0ohsIC4wnB+8+XdpHFEZ5GmtFLmQgkrrkdR0EcEAdd38geClUSj30H8AEIO4OqA==","shasum":"61ba4f2ca20b75352ad5ed8aa239302df83dae74","tarball":"http://localhost:4545/npm/registry/preact/preact-10.0.0-alpha.2.tgz","fileCount":73,"unpackedSize":717092,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJciqnVCRA9TVsSAnZWagAAW+EP/1zw0RjeuHL4P4cph+C+\nWmjXkNPwY8UYE1UCe/iRkUZiBaiUtPnB+XkwZoQ63RoQGimLMgqAsTG7Irpu\nn8DtoPJe9su0Z8O78uJI14V0IWn3kKyhB9Q4v6XIkusPntMSKPbtaEjKheMS\nTzj4YxPnWpwv/B9IxLXojaxii9ETDsreAS0edp25vphhJMibhArie4++dtJf\nifGjvWSgcyfMsnlqUxE+ZKsRM8GFp7Pp/9UAXBxd2lnZMDLpXjP1Pe35H7vs\noqN/tlFNv+DsKLXhG3Xj5y2YvM/8GVioykBhQKT6NYJoxY36DNXNpHpt8Fa8\nCXXrIWZ6sX7VSDrA3cAcmFIeICJq7LInZiLjaEJQ52hmjIfAR6hfkHu66JuK\nN27pYoDK1hJRfrL7oOoHdTfOxGrNlZpdsLCB2GoChTxycHV9E428egaaWH9B\n6Q1z+EPGfaof4dP6vJIAzjPLNuAoqFeVuHta8M1Yk8tNV/ZE+z9pPT9iy+YZ\nTfqbpSkM6L6pVxOJkjNAoXpI+0yGVF6xX+8uaPtH82SQvs2oizwbB9TcTWbQ\nZbJtZkRTuIShu0MgS+KLwegmWCbenOsLHMQlu4aBGwnrq4za1X9bbf5oYwI7\n2geVfZjtNiy5EABwAnQKSN+Kmc4R6NPvZ7M3AjMj7cKO7drsEvbPSEiQsFRm\nlJ/A\r\n=P8dn\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCID9IOlx1Y6AQIiKYz58/4bNuXqloWW8g1siZSXs7up0QAiEAtKdAlC8Or9k43/nfxXMeOsw4+3iDkXgmFNPmKGW8EZ4="}]},"maintainers":[{"email":"jason@developit.ca","name":"developit"},{"email":"luke@lukeed.com","name":"lukeed"},{"email":"marvin@marvinhagemeister.de","name":"marvinhagemeister"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/preact_10.0.0-alpha.2_1552591316182_0.1657338137459412"},"_hasShrinkwrap":false},"10.0.0-alpha.3":{"name":"preact","amdName":"preact","version":"10.0.0-alpha.3","private":false,"description":"Fast 3kb React-compatible Virtual DOM library.","main":"dist/preact.js","module":"dist/preact.module.js","umd:main":"dist/preact.umd.js","source":"src/index.js","license":"MIT","types":"src/index.d.ts","scripts":{"build":"npm-run-all --parallel build:*","build:core":"microbundle build --raw","build:debug":"microbundle build --raw --cwd debug","build:hooks":"microbundle build --raw --cwd hooks","build:test-utils":"microbundle build --raw --cwd test-utils","build:compat":"microbundle build --raw --cwd compat --globals 'preact/hooks=preactHooks'","dev":"microbundle watch --raw --format cjs,umd","dev:hooks":"microbundle watch --raw --format cjs --cwd hooks","test":"npm-run-all lint build --parallel test:mocha test:karma test:ts","test:flow":"flow check","test:ts":"tsc -p test/ts/ && mocha --require babel-register test/ts/**/*-test.js","test:mocha":"mocha --recursive --require babel-register test/shared test/node","test:karma":"cross-env COVERAGE=true karma start karma.conf.js --single-run","test:mocha:watch":"npm run test:mocha -- --watch","test:karma:watch":"karma start karma.conf.js --no-single-run","test:karma:hooks":"cross-env COVERAGE=false karma start karma.conf.js --grep=hooks/test/browser/**.js --no-single-run","test:karma:test-utils":"cross-env PERFORMANCE=false COVERAGE=false karma start karma.conf.js --grep=test-utils/test/shared/**.js --no-single-run","test:karma:bench":"cross-env PERFORMANCE=true COVERAGE=false karma start karma.conf.js --grep=test/benchmarks/**.js --single-run","benchmark":"npm run test:karma:bench -- no-single-run","test:size":"bundlesize","lint":"eslint src test","postinstall":"node -e \"console.log('\\u001b[35m\\u001b[1mLove Preact? You can now donate to our open collective:\\u001b[22m\\u001b[39m\\n > \\u001b[34mhttps://opencollective.com/preact/donate\\u001b[0m')\""},"eslintConfig":{"extends":"developit","settings":{"react":{"pragma":"createElement"}},"rules":{"prefer-rest-params":0,"prefer-spread":0,"no-cond-assign":0,"react/jsx-no-bind":0,"react/prefer-stateless-function":0,"react/sort-comp":0,"jest/valid-expect":0,"jest/no-disabled-tests":0,"react/no-find-dom-node":0}},"keywords":["preact","react","virtual dom","vdom","components","virtual","dom"],"authors":["Jason Miller "],"repository":{"type":"git","url":"git+https://github.com/developit/preact.git"},"bugs":{"url":"https://github.com/developit/preact/issues"},"homepage":"https://github.com/developit/preact","dependencies":{"prop-types":"^15.6.2"},"devDependencies":{"@types/chai":"^4.1.2","@types/mocha":"^5.0.0","@types/node":"^10.5.2","babel-cli":"^6.24.1","babel-core":"^6.26.3","babel-loader":"^7.1.5","babel-plugin-istanbul":"^5.0.1","babel-plugin-transform-object-rest-spread":"^6.23.0","babel-plugin-transform-react-jsx":"^6.24.1","babel-preset-env":"^1.6.1","benchmark":"^2.1.4","bundlesize":"^0.17.0","chai":"^4.1.2","coveralls":"^3.0.0","cross-env":"^5.2.0","diff":"^3.5.0","eslint":"^5.1.0","eslint-config-developit":"^1.1.1","flow-bin":"^0.79.1","karma":"^3.0.0","karma-babel-preprocessor":"^7.0.0","karma-chai-sinon":"^0.1.5","karma-chrome-launcher":"^2.2.0","karma-coverage":"^1.1.2","karma-mocha":"^1.3.0","karma-mocha-reporter":"^2.2.5","karma-sauce-launcher":"^1.2.0","karma-sinon":"^1.0.5","karma-source-map-support":"^1.3.0","karma-sourcemap-loader":"^0.3.7","karma-webpack":"^3.0.5","lodash":"^4.17.10","microbundle":"^0.11.0","mocha":"^5.2.0","npm-run-all":"^4.0.0","sinon":"^6.1.3","sinon-chai":"^3.0.0","typescript":"^3.0.1","webpack":"^4.3.0"},"bundlesize":[{"path":"./dist/preact.js","maxSize":"3Kb"}],"gitHead":"57c288b46c96ffe136bbbbf561b21dbaa7707bf4","readme":"
Fast 3kB alternative to React with the same modern API.
\n\n**All the power of Virtual DOM components, without the overhead:**\n\n- Familiar React API & patterns: [ES6 Class] and [Functional Components]\n- Extensive React compatibility via a simple [preact-compat] alias\n- Everything you need: JSX, VDOM, React DevTools, HMR, SSR..\n- A highly optimized diff algorithm and seamless Server Side Rendering\n- Transparent asynchronous rendering with a pluggable scheduler\n- 🆕💥 **Instant no-config app bundling with [Preact CLI](https://github.com/developit/preact-cli)**\n\n### 💁 More information at the [Preact Website ➞](https://preactjs.com)\n\n\n---\n\n\n\n- [Demos](#demos)\n- [Libraries & Add-ons](#libraries--add-ons)\n- [Getting Started](#getting-started)\n\t- [Import what you need](#import-what-you-need)\n\t- [Rendering JSX](#rendering-jsx)\n\t- [Components](#components)\n\t- [Props & State](#props--state)\n- [Linked State](#linked-state)\n- [Examples](#examples)\n- [Extensions](#extensions)\n- [Debug Mode](#debug-mode)\n- [Backers](#backers)\n- [Sponsors](#sponsors)\n- [License](#license)\n\n\n\n\n# Preact\n\n[![npm](https://img.shields.io/npm/v/preact.svg)](http://npm.im/preact)\n[![CDNJS](https://img.shields.io/cdnjs/v/preact.svg)](https://cdnjs.com/libraries/preact)\n[![Preact Slack Community](https://preact-slack.now.sh/badge.svg)](https://preact-slack.now.sh)\n[![OpenCollective Backers](https://opencollective.com/preact/backers/badge.svg)](#backers)\n[![OpenCollective Sponsors](https://opencollective.com/preact/sponsors/badge.svg)](#sponsors)\n[![travis](https://travis-ci.org/developit/preact.svg?branch=master)](https://travis-ci.org/developit/preact)\n[![coveralls](https://img.shields.io/coveralls/developit/preact/master.svg)](https://coveralls.io/github/developit/preact)\n[![gzip size](http://img.badgesize.io/https://unpkg.com/preact/dist/preact.min.js?compression=gzip)](https://unpkg.com/preact/dist/preact.min.js)\n[![install size](https://packagephobia.now.sh/badge?p=preact)](https://packagephobia.now.sh/result?p=preact)\n\nPreact supports modern browsers and IE9+:\n\n[![Browsers](https://saucelabs.com/browser-matrix/preact.svg)](https://saucelabs.com/u/preact)\n\n\n---\n\n\n## Demos\n\n#### Real-World Apps\n\n- [**Preact Hacker News**](https://hn.kristoferbaxter.com) _([GitHub Project](https://github.com/kristoferbaxter/preact-hn))_\n- [**Play.cash**](https://play.cash) :notes: _([GitHub Project](https://github.com/feross/play.cash))_\n- [**BitMidi**](https://bitmidi.com/) 🎹 Wayback machine for free MIDI files _([GitHub Project](https://github.com/feross/bitmidi.com))_\n- [**Ultimate Guitar**](https://www.ultimate-guitar.com) 🎸speed boosted by Preact.\n- [**ESBench**](http://esbench.com) is built using Preact.\n- [**BigWebQuiz**](https://bigwebquiz.com) _([GitHub Project](https://github.com/jakearchibald/big-web-quiz))_\n- [**Nectarine.rocks**](http://nectarine.rocks) _([GitHub Project](https://github.com/developit/nectarine))_ :peach:\n- [**TodoMVC**](https://preact-todomvc.surge.sh) _([GitHub Project](https://github.com/developit/preact-todomvc))_\n- [**OSS.Ninja**](https://oss.ninja) _([GitHub Project](https://github.com/developit/oss.ninja))_\n- [**GuriVR**](https://gurivr.com) _([GitHub Project](https://github.com/opennewslabs/guri-vr))_\n- [**Color Picker**](https://colors.now.sh) _([GitHub Project](https://github.com/lukeed/colors-app))_ :art:\n- [**Offline Gallery**](https://use-the-platform.com/offline-gallery/) _([GitHub Project](https://github.com/vaneenige/offline-gallery/))_ :balloon:\n- [**Periodic Weather**](https://use-the-platform.com/periodic-weather/) _([GitHub Project](https://github.com/vaneenige/periodic-weather/))_ :sunny:\n- [**Rugby News Board**](http://nbrugby.com) _[(GitHub Project)](https://github.com/rugby-board/rugby-board-node)_\n- [**Preact Gallery**](https://preact.gallery/) an 8KB photo gallery PWA built using Preact.\n- [**Rainbow Explorer**](https://use-the-platform.com/rainbow-explorer/) Preact app to translate real life color to digital color _([Github project](https://github.com/vaneenige/rainbow-explorer))_.\n- [**YASCC**](https://carlosqsilva.github.io/YASCC/#/) Yet Another SoundCloud Client _([Github project](https://github.com/carlosqsilva/YASCC))_.\n- [**Journalize**](https://preact-journal.herokuapp.com/) 14k offline-capable journaling PWA using preact. _([Github project](https://github.com/jpodwys/preact-journal))_.\n\n\n#### Runnable Examples\n\n- [**Flickr Browser**](http://codepen.io/developit/full/VvMZwK/) (@ CodePen)\n- [**Animating Text**](http://codepen.io/developit/full/LpNOdm/) (@ CodePen)\n- [**60FPS Rainbow Spiral**](http://codepen.io/developit/full/xGoagz/) (@ CodePen)\n- [**Simple Clock**](http://jsfiddle.net/developit/u9m5x0L7/embedded/result,js/) (@ JSFiddle)\n- [**3D + ThreeJS**](http://codepen.io/developit/pen/PPMNjd?editors=0010) (@ CodePen)\n- [**Stock Ticker**](http://codepen.io/developit/pen/wMYoBb?editors=0010) (@ CodePen)\n- [*Create your Own!*](https://jsfiddle.net/developit/rs6zrh5f/embedded/result/) (@ JSFiddle)\n\n### Starter Projects\n\n- [**Preact Boilerplate**](https://preact-boilerplate.surge.sh) _([GitHub Project](https://github.com/developit/preact-boilerplate))_ :zap:\n- [**Preact Offline Starter**](https://preact-starter.now.sh) _([GitHub Project](https://github.com/lukeed/preact-starter))_ :100:\n- [**Preact PWA**](https://preact-pwa-yfxiijbzit.now.sh/) _([GitHub Project](https://github.com/ezekielchentnik/preact-pwa))_ :hamburger:\n- [**Parcel + Preact + Unistore Starter**](https://github.com/hwclass/parcel-preact-unistore-starter)\n- [**Preact Mobx Starter**](https://awaw00.github.io/preact-mobx-starter/) _([GitHub Project](https://github.com/awaw00/preact-mobx-starter))_ :sunny:\n- [**Preact Redux Example**](https://github.com/developit/preact-redux-example) :star:\n- [**Preact Redux/RxJS/Reselect Example**](https://github.com/continuata/preact-seed)\n- [**V2EX Preact**](https://github.com/yanni4night/v2ex-preact)\n- [**Preact Coffeescript**](https://github.com/crisward/preact-coffee)\n- [**Preact + TypeScript + Webpack**](https://github.com/k1r0s/bleeding-preact-starter)\n- [**0 config => Preact + Poi**](https://github.com/k1r0s/preact-poi-starter)\n- [**Zero configuration => Preact + Typescript + Parcel**](https://github.com/aalises/preact-typescript-parcel-starter)\n\n---\n\n## Libraries & Add-ons\n\n- :raised_hands: [**preact-compat**](https://git.io/preact-compat): use any React library with Preact *([full example](http://git.io/preact-compat-example))*\n- :twisted_rightwards_arrows: [**preact-context**](https://github.com/valotas/preact-context): React's `createContext` api for Preact\n- :page_facing_up: [**preact-render-to-string**](https://git.io/preact-render-to-string): Universal rendering.\n- :eyes: [**preact-render-spy**](https://github.com/mzgoddard/preact-render-spy): Enzyme-lite: Renderer with access to the produced virtual dom for testing.\n- :loop: [**preact-render-to-json**](https://git.io/preact-render-to-json): Render for Jest Snapshot testing.\n- :earth_americas: [**preact-router**](https://git.io/preact-router): URL routing for your components\n- :bookmark_tabs: [**preact-markup**](https://git.io/preact-markup): Render HTML & Custom Elements as JSX & Components\n- :satellite: [**preact-portal**](https://git.io/preact-portal): Render Preact components into (a) SPACE :milky_way:\n- :pencil: [**preact-richtextarea**](https://git.io/preact-richtextarea): Simple HTML editor component\n- :bookmark: [**preact-token-input**](https://github.com/developit/preact-token-input): Text field that tokenizes input, for things like tags\n- :card_index: [**preact-virtual-list**](https://github.com/developit/preact-virtual-list): Easily render lists with millions of rows ([demo](https://jsfiddle.net/developit/qqan9pdo/))\n- :repeat: [**preact-cycle**](https://git.io/preact-cycle): Functional-reactive paradigm for Preact\n- :triangular_ruler: [**preact-layout**](https://download.github.io/preact-layout/): Small and simple layout library\n- :thought_balloon: [**preact-socrates**](https://github.com/matthewmueller/preact-socrates): Preact plugin for [Socrates](http://github.com/matthewmueller/socrates)\n- :rowboat: [**preact-flyd**](https://github.com/xialvjun/preact-flyd): Use [flyd](https://github.com/paldepind/flyd) FRP streams in Preact + JSX\n- :speech_balloon: [**preact-i18nline**](https://github.com/download/preact-i18nline): Integrates the ecosystem around [i18n-js](https://github.com/everydayhero/i18n-js) with Preact via [i18nline](https://github.com/download/i18nline).\n- :microscope: [**preact-jsx-chai**](https://git.io/preact-jsx-chai): JSX assertion testing _(no DOM, right in Node)_\n- :tophat: [**preact-classless-component**](https://github.com/ld0rman/preact-classless-component): create preact components without the class keyword\n- :hammer: [**preact-hyperscript**](https://github.com/queckezz/preact-hyperscript): Hyperscript-like syntax for creating elements\n- :white_check_mark: [**shallow-compare**](https://github.com/tkh44/shallow-compare): simplified `shouldComponentUpdate` helper.\n- :shaved_ice: [**preact-codemod**](https://github.com/vutran/preact-codemod): Transform your React code to Preact.\n- :construction_worker: [**preact-helmet**](https://github.com/download/preact-helmet): A document head manager for Preact\n- :necktie: [**preact-delegate**](https://github.com/NekR/preact-delegate): Delegate DOM events\n- :art: [**preact-stylesheet-decorator**](https://github.com/k1r0s/preact-stylesheet-decorator): Add Scoped Stylesheets to your Preact Components\n- :electric_plug: [**preact-routlet**](https://github.com/k1r0s/preact-routlet): Simple `Component Driven` Routing for Preact using ES7 Decorators\n- :fax: [**preact-bind-group**](https://github.com/k1r0s/preact-bind-group): Preact Forms made easy, Group Events into a Single Callback\n- :hatching_chick: [**preact-habitat**](https://github.com/zouhir/preact-habitat): Declarative Preact widgets renderer in any CMS or DOM host ([demo](https://codepen.io/zouhir/pen/brrOPB)).\n- :tada: [**proppy-preact**](https://github.com/fahad19/proppy): Functional props composition for Preact components\n\n#### UI Component Libraries\n\n> Want to prototype something or speed up your development? Try one of these toolkits:\n\n- [**preact-material-components**](https://github.com/prateekbh/preact-material-components): Material Design Components for Preact ([website](https://material.preactjs.com/))\n- [**preact-mdc**](https://github.com/BerndWessels/preact-mdc): Material Design Components for Preact ([demo](https://github.com/BerndWessels/preact-mdc-demo))\n- [**preact-mui**](https://git.io/v1aVO): The MUI CSS Preact library.\n- [**preact-photon**](https://git.io/preact-photon): build beautiful desktop UI with [photon](http://photonkit.com)\n- [**preact-mdl**](https://git.io/preact-mdl): [Material Design Lite](https://getmdl.io) for Preact\n- [**preact-weui**](https://github.com/afeiship/preact-weui): [Weui](https://github.com/afeiship/preact-weui) for Preact\n\n\n---\n\n## Getting Started\n\n> 💁 _**Note:** You [don't need ES2015 to use Preact](https://github.com/developit/preact-in-es3)... but give it a try!_\n\nThe easiest way to get started with Preact is to install [Preact CLI](https://github.com/developit/preact-cli). This simple command-line tool wraps up the best possible Webpack and Babel setup for you, and even keeps you up-to-date as the underlying tools change. Best of all, it's easy to understand! It builds your app in a single command (`preact build`), doesn't need any configuration, and bakes in best-practises 🙌.\n\nThe following guide assumes you have some sort of ES2015 build set up using babel and/or webpack/browserify/gulp/grunt/etc.\n\nYou can also start with [preact-boilerplate] or a [CodePen Template](http://codepen.io/developit/pen/pgaROe?editors=0010).\n\n\n### Import what you need\n\nThe `preact` module provides both named and default exports, so you can either import everything under a namespace of your choosing, or just what you need as locals:\n\n##### Named:\n\n```js\nimport { h, render, Component } from 'preact';\n\n// Tell Babel to transform JSX into h() calls:\n/** @jsx h */\n```\n\n##### Default:\n\n```js\nimport preact from 'preact';\n\n// Tell Babel to transform JSX into preact.h() calls:\n/** @jsx preact.h */\n```\n\n> Named imports work well for highly structured applications, whereas the default import is quick and never needs to be updated when using different parts of the library.\n>\n> Instead of declaring the `@jsx` pragma in your code, it's best to configure it globally in a `.babelrc`:\n>\n> **For Babel 5 and prior:**\n>\n> ```json\n> { \"jsxPragma\": \"h\" }\n> ```\n>\n> **For Babel 6:**\n>\n> ```json\n> {\n> \"plugins\": [\n> [\"transform-react-jsx\", { \"pragma\":\"h\" }]\n> ]\n> }\n> ```\n>\n> **For Babel 7:**\n>\n> ```json\n> {\n> \"plugins\": [\n> [\"@babel/plugin-transform-react-jsx\", { \"pragma\":\"h\" }]\n> ]\n> }\n> ```\n> **For using Preact along with TypeScript add to `tsconfig.json`:**\n>\n> ```json\n> {\n> \"jsx\": \"react\",\n> \"jsxFactory\": \"h\",\n> }\n> ```\n\n\n### Rendering JSX\n\nOut of the box, Preact provides an `h()` function that turns your JSX into Virtual DOM elements _([here's how](http://jasonformat.com/wtf-is-jsx))_. It also provides a `render()` function that creates a DOM tree from that Virtual DOM.\n\nTo render some JSX, just import those two functions and use them like so:\n\n```js\nimport { h, render } from 'preact';\n\nrender((\n\t
\n\t\tHello, world!\n\t\t\n\t
\n), document.body);\n```\n\nThis should seem pretty straightforward if you've used hyperscript or one of its many friends. If you're not, the short of it is that the `h()` function import gets used in the final, transpiled code as a drop in replacement for `React.createElement()`, and so needs to be imported even if you don't explicitly use it in the code you write. Also note that if you're the kind of person who likes writing your React code in \"pure JavaScript\" (you know who you are) you will need to use `h()` wherever you would otherwise use `React.createElement()`.\n\nRendering hyperscript with a virtual DOM is pointless, though. We want to render components and have them updated when data changes - that's where the power of virtual DOM diffing shines. :star2:\n\n\n### Components\n\nPreact exports a generic `Component` class, which can be extended to build encapsulated, self-updating pieces of a User Interface. Components support all of the standard React [lifecycle methods], like `shouldComponentUpdate()` and `componentWillReceiveProps()`. Providing specific implementations of these methods is the preferred mechanism for controlling _when_ and _how_ components update.\n\nComponents also have a `render()` method, but unlike React this method is passed `(props, state)` as arguments. This provides an ergonomic means to destructure `props` and `state` into local variables to be referenced from JSX.\n\nLet's take a look at a very simple `Clock` component, which shows the current time.\n\n```js\nimport { h, render, Component } from 'preact';\n\nclass Clock extends Component {\n\trender() {\n\t\tlet time = new Date();\n\t\treturn ;\n\t}\n}\n\n// render an instance of Clock into :\nrender(, document.body);\n```\n\n\nThat's great. Running this produces the following HTML DOM structure:\n\n```html\n10:28:57 PM\n```\n\nIn order to have the clock's time update every second, we need to know when `` gets mounted to the DOM. _If you've used HTML5 Custom Elements, this is similar to the `attachedCallback` and `detachedCallback` lifecycle methods._ Preact invokes the following lifecycle methods if they are defined for a Component:\n\n| Lifecycle method | When it gets called |\n|-----------------------------|--------------------------------------------------|\n| `componentWillMount` | before the component gets mounted to the DOM |\n| `componentDidMount` | after the component gets mounted to the DOM |\n| `componentWillUnmount` | prior to removal from the DOM |\n| `componentWillReceiveProps` | before new props get accepted |\n| `shouldComponentUpdate` | before `render()`. Return `false` to skip render |\n| `componentWillUpdate` | before `render()` |\n| `componentDidUpdate` | after `render()` |\n\n\n\nSo, we want to have a 1-second timer start once the Component gets added to the DOM, and stop if it is removed. We'll create the timer and store a reference to it in `componentDidMount()`, and stop the timer in `componentWillUnmount()`. On each timer tick, we'll update the component's `state` object with a new time value. Doing this will automatically re-render the component.\n\n```js\nimport { h, render, Component } from 'preact';\n\nclass Clock extends Component {\n\tconstructor() {\n\t\tsuper();\n\t\t// set initial time:\n\t\tthis.state = {\n\t\t\ttime: Date.now()\n\t\t};\n\t}\n\n\tcomponentDidMount() {\n\t\t// update time every second\n\t\tthis.timer = setInterval(() => {\n\t\t\tthis.setState({ time: Date.now() });\n\t\t}, 1000);\n\t}\n\n\tcomponentWillUnmount() {\n\t\t// stop when not renderable\n\t\tclearInterval(this.timer);\n\t}\n\n\trender(props, state) {\n\t\tlet time = new Date(state.time).toLocaleTimeString();\n\t\treturn { time };\n\t}\n}\n\n// render an instance of Clock into :\nrender(, document.body);\n```\n\nNow we have [a ticking clock](http://jsfiddle.net/developit/u9m5x0L7/embedded/result,js/)!\n\n\n### Props & State\n\nThe concept (and nomenclature) for `props` and `state` is the same as in React. `props` are passed to a component by defining attributes in JSX, `state` is internal state. Changing either triggers a re-render, though by default Preact re-renders Components asynchronously for `state` changes and synchronously for `props` changes. You can tell Preact to render `prop` changes asynchronously by setting `options.syncComponentUpdates` to `false`.\n\n\n---\n\n\n## Linked State\n\nOne area Preact takes a little further than React is in optimizing state changes. A common pattern in ES2015 React code is to use Arrow functions within a `render()` method in order to update state in response to events. Creating functions enclosed in a scope on every render is inefficient and forces the garbage collector to do more work than is necessary.\n\nOne solution to this is to bind component methods declaratively.\nHere is an example using [decko](http://git.io/decko):\n\n```js\nclass Foo extends Component {\n\t@bind\n\tupdateText(e) {\n\t\tthis.setState({ text: e.target.value });\n\t}\n\trender({ }, { text }) {\n\t\treturn ;\n\t}\n}\n```\n\nWhile this achieves much better runtime performance, it's still a lot of unnecessary code to wire up state to UI.\n\nFortunately there is a solution, in the form of a module called [linkstate](https://github.com/developit/linkstate). Calling `linkState(component, 'text')` returns a function that accepts an Event and uses its associated value to update the given property in your component's state. Calls to `linkState()` with the same arguments are cached, so there is no performance penalty. Here is the previous example rewritten using _Linked State_:\n\n```js\nimport linkState from 'linkstate';\n\nclass Foo extends Component {\n\trender({ }, { text }) {\n\t\treturn ;\n\t}\n}\n```\n\nSimple and effective. It handles linking state from any input type, or an optional second parameter can be used to explicitly provide a keypath to the new state value.\n\n> **Note:** In Preact 7 and prior, `linkState()` was built right into Component. In 8.0, it was moved to a separate module. You can restore the 7.x behavior by using linkstate as a polyfill - see [the linkstate docs](https://github.com/developit/linkstate#usage).\n\n\n\n## Examples\n\nHere is a somewhat verbose Preact `` component:\n\n```js\nclass Link extends Component {\n\trender(props, state) {\n\t\treturn {props.children};\n\t}\n}\n```\n\nSince this is ES6/ES2015, we can further simplify:\n\n```js\nclass Link extends Component {\n render({ href, children }) {\n return ;\n }\n}\n\n// or, for wide-open props support:\nclass Link extends Component {\n render(props) {\n return ;\n }\n}\n\n// or, as a stateless functional component:\nconst Link = ({ children, ...props }) => (\n { children }\n);\n```\n\n\n## Extensions\n\nIt is likely that some projects based on Preact would wish to extend Component with great new functionality.\n\nPerhaps automatic connection to stores for a Flux-like architecture, or mixed-in context bindings to make it feel more like `React.createClass()`. Just use ES2015 inheritance:\n\n```js\nclass BoundComponent extends Component {\n\tconstructor(props) {\n\t\tsuper(props);\n\t\tthis.bind();\n\t}\n\tbind() {\n\t\tthis.binds = {};\n\t\tfor (let i in this) {\n\t\t\tthis.binds[i] = this[i].bind(this);\n\t\t}\n\t}\n}\n\n// example usage\nclass Link extends BoundComponent {\n\tclick() {\n\t\topen(this.href);\n\t}\n\trender() {\n\t\tlet { click } = this.binds;\n\t\treturn { children };\n\t}\n}\n```\n\n\nThe possibilities are pretty endless here. You could even add support for rudimentary mixins:\n\n```js\nclass MixedComponent extends Component {\n\tconstructor() {\n\t\tsuper();\n\t\t(this.mixins || []).forEach( m => Object.assign(this, m) );\n\t}\n}\n```\n\n## Debug Mode\n\nYou can inspect and modify the state of your Preact UI components at runtime using the\n[React Developer Tools](https://github.com/facebook/react-devtools) browser extension.\n\n1. Install the [React Developer Tools](https://github.com/facebook/react-devtools) extension\n2. Import the \"preact/debug\" module in your app\n3. Set `process.env.NODE_ENV` to 'development'\n4. Reload and go to the 'React' tab in the browser's development tools\n\n\n```js\nimport { h, Component, render } from 'preact';\n\n// Enable debug mode. You can reduce the size of your app by only including this\n// module in development builds. eg. In Webpack, wrap this with an `if (module.hot) {...}`\n// check.\nrequire('preact/debug');\n```\n\n### Runtime Error Checking\n\nTo enable debug mode, you need to set `process.env.NODE_ENV=development`. You can do this\nwith webpack via a builtin plugin.\n\n```js\n// webpack.config.js\n\n// Set NODE_ENV=development to enable error checking\nnew webpack.DefinePlugin({\n 'process.env': {\n 'NODE_ENV': JSON.stringify('development')\n }\n});\n```\n\nWhen enabled, warnings are logged to the console when undefined components or string refs\nare detected.\n\n### Developer Tools\n\nIf you only want to include devtool integration, without runtime error checking, you can\nreplace `preact/debug` in the above example with `preact/devtools`. This option doesn't\nrequire setting `NODE_ENV=development`.\n\n\n\n## Backers\nSupport us with a monthly donation and help us continue our activities. [[Become a backer](https://opencollective.com/preact#backer)]\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n## Sponsors\nBecome a sponsor and get your logo on our README on GitHub with a link to your site. [[Become a sponsor](https://opencollective.com/preact#sponsor)]\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n## License\n\nMIT\n\n\n\n[![Preact](http://i.imgur.com/YqCHvEW.gif)](https://preactjs.com)\n\n\n[preact-compat]: https://github.com/developit/preact-compat\n[ES6 Class]: https://facebook.github.io/react/docs/reusable-components.html#es6-classes\n[Functional Components]: https://facebook.github.io/react/blog/2015/10/07/react-v0.14.html#stateless-functional-components\n[hyperscript]: https://github.com/dominictarr/hyperscript\n[preact-boilerplate]: https://github.com/developit/preact-boilerplate\n[lifecycle methods]: https://facebook.github.io/react/docs/component-specs.html\n","readmeFilename":"README.md","_id":"preact@10.0.0-alpha.3","_npmVersion":"6.5.0","_nodeVersion":"11.7.0","_npmUser":{"name":"marvinhagemeister","email":"marvin@marvinhagemeister.de"},"dist":{"integrity":"sha512-0ZDexQ/FvZmMbyY7pn1J2hZkWWozftD+980R7LuOo3fEOM1YaYlq2jjOnHz4E4Qf/draHWX/WpcC7QnuEtOBvg==","shasum":"7c3c50b73e8a6f7096f2ef9284b22b09097e4853","tarball":"http://localhost:4545/npm/registry/preact/preact-10.0.0-alpha.3.tgz","fileCount":68,"unpackedSize":581811,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJco60BCRA9TVsSAnZWagAADqsP/15JZzxlGmbueoNXTUAU\nNCtUGfj/cS78xny+lSRcx9g8/hjxo5ulx2Lo71GnLCCiF+69hxeb6rXjVdqu\nvs8b0N0GKjE6jn9K5ecLVCs9RmXWJ9qZH/tW4PeETKjdCKehA99+nPDkG3Ae\nx0ViHfaa8LOXvJvbvOby3SyWo62Zk+GOnLTROMdjUWxnC/o8eTiIi8L9HTyE\nZxZaW/ZTON7e5CMTyDH1A5xKljVeh5RUCu+s4gM9vzpkZnxyZ8BeAnq8HXt5\nw2JR0jx6majG1PcrUcC8G4dFpRRdNE4LS8g2fVuh5gfA0jMWRmo0q1AI4Zk7\nwvO4EVQj4vQpvQzwJYJVZf48R0vERUynZysV/mittilbBBbZPnF0dRpteUjC\nk/5lPl7v9G1pMreYtTN71WPklJdx6UnJqB7bowx3sUhapB2ggP6yo/kO6Qi5\n4zAJTp+Kis1kUEXPT5mBaB5E4oxM1QUUzpSxAYNDZdjA5/R28QTH/u7cJNmn\nCa03J5hzMluVWJ538iWdGLWY6psoQnRJfITtSLkzKHWTJ35e6nkx+Qr8w0zS\nRb/5ZbFJyzkmECZ3LY8LCq5xDsjqWU0qXHlMKQenNel7DbKe1BFMp0/pQO5u\nSLwwTIjoQ9kcO5uf9ZhItKSxn8rv/tFymxI1BM+N4A/uPwzLgae4rAU8sxIW\nzmDX\r\n=FZJG\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCPf6nMF8a9o2AbOwPsClk+fmsY0avUCub2uZq8E5ctQwIge9p2rAVH94QM8SsHK7qheO6nX4v/dm3fWhSNOmXKeyo="}]},"maintainers":[{"email":"jason@developit.ca","name":"developit"},{"email":"ulliftw@gmail.com","name":"harmony"},{"email":"luke@lukeed.com","name":"lukeed"},{"email":"marvin@marvinhagemeister.de","name":"marvinhagemeister"},{"email":"prateek89born@gmail.com","name":"prateekbh"},{"email":"hello@preactjs.com","name":"preactjs"},{"email":"allamsetty.anup@gmail.com","name":"reznord"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/preact_10.0.0-alpha.3_1554230528290_0.20739309418344343"},"_hasShrinkwrap":false},"10.0.0-alpha.4":{"name":"preact","amdName":"preact","version":"10.0.0-alpha.4","private":false,"description":"Fast 3kb React-compatible Virtual DOM library.","main":"dist/preact.js","module":"dist/preact.module.js","umd:main":"dist/preact.umd.js","source":"src/index.js","license":"MIT","types":"src/index.d.ts","scripts":{"build":"npm-run-all --parallel build:*","build:core":"microbundle build --raw","build:debug":"microbundle build --raw --cwd debug","build:hooks":"microbundle build --raw --cwd hooks","build:test-utils":"microbundle build --raw --cwd test-utils","build:compat":"microbundle build --raw --cwd compat --globals 'preact/hooks=preactHooks'","dev":"microbundle watch --raw --format cjs,umd","dev:hooks":"microbundle watch --raw --format cjs --cwd hooks","test":"npm-run-all lint build --parallel test:mocha test:karma test:ts","test:flow":"flow check","test:ts":"tsc -p test/ts/ && mocha --require babel-register test/ts/**/*-test.js","test:mocha":"mocha --recursive --require babel-register test/shared test/node","test:karma":"cross-env COVERAGE=true karma start karma.conf.js --single-run","test:mocha:watch":"npm run test:mocha -- --watch","test:karma:watch":"karma start karma.conf.js --no-single-run","test:karma:hooks":"cross-env COVERAGE=false karma start karma.conf.js --grep=hooks/test/browser/**.js --no-single-run","test:karma:test-utils":"cross-env PERFORMANCE=false COVERAGE=false karma start karma.conf.js --grep=test-utils/test/shared/**.js --no-single-run","test:karma:bench":"cross-env PERFORMANCE=true COVERAGE=false karma start karma.conf.js --grep=test/benchmarks/**.js --single-run","benchmark":"npm run test:karma:bench -- no-single-run","test:size":"bundlesize","lint":"eslint src test","postinstall":"node -e \"console.log('\\u001b[35m\\u001b[1mLove Preact? You can now donate to our open collective:\\u001b[22m\\u001b[39m\\n > \\u001b[34mhttps://opencollective.com/preact/donate\\u001b[0m')\""},"eslintConfig":{"extends":"developit","settings":{"react":{"pragma":"createElement"}},"rules":{"prefer-rest-params":0,"prefer-spread":0,"no-cond-assign":0,"react/jsx-no-bind":0,"react/prefer-stateless-function":0,"react/sort-comp":0,"jest/valid-expect":0,"jest/no-disabled-tests":0,"react/no-find-dom-node":0}},"keywords":["preact","react","virtual dom","vdom","components","virtual","dom"],"authors":["Jason Miller "],"repository":{"type":"git","url":"git+https://github.com/developit/preact.git"},"bugs":{"url":"https://github.com/developit/preact/issues"},"homepage":"https://github.com/developit/preact","dependencies":{"prop-types":"^15.6.2"},"devDependencies":{"@types/chai":"^4.1.2","@types/mocha":"^5.0.0","@types/node":"^10.5.2","babel-cli":"^6.24.1","babel-core":"^6.26.3","babel-loader":"^7.1.5","babel-plugin-istanbul":"^5.0.1","babel-plugin-transform-object-rest-spread":"^6.23.0","babel-plugin-transform-react-jsx":"^6.24.1","babel-preset-env":"^1.6.1","benchmark":"^2.1.4","bundlesize":"^0.17.0","chai":"^4.1.2","coveralls":"^3.0.0","cross-env":"^5.2.0","diff":"^3.5.0","eslint":"^5.1.0","eslint-config-developit":"^1.1.1","flow-bin":"^0.79.1","karma":"^3.0.0","karma-babel-preprocessor":"^7.0.0","karma-chai-sinon":"^0.1.5","karma-chrome-launcher":"^2.2.0","karma-coverage":"^1.1.2","karma-mocha":"^1.3.0","karma-mocha-reporter":"^2.2.5","karma-sauce-launcher":"^1.2.0","karma-sinon":"^1.0.5","karma-source-map-support":"^1.3.0","karma-sourcemap-loader":"^0.3.7","karma-webpack":"^3.0.5","lodash":"^4.17.10","microbundle":"^0.11.0","mocha":"^5.2.0","npm-run-all":"^4.0.0","sinon":"^6.1.3","sinon-chai":"^3.0.0","typescript":"^3.0.1","webpack":"^4.3.0"},"bundlesize":[{"path":"./dist/preact.js","maxSize":"3Kb"}],"gitHead":"eec1beb69d2a63bc44af878f0e4487bb4a189b8f","readme":"
Fast 3kB alternative to React with the same modern API.
\n\n**All the power of Virtual DOM components, without the overhead:**\n\n- Familiar React API & patterns: [ES6 Class] and [Functional Components]\n- Extensive React compatibility via a simple [preact-compat] alias\n- Everything you need: JSX, VDOM, React DevTools, HMR, SSR..\n- A highly optimized diff algorithm and seamless Server Side Rendering\n- Transparent asynchronous rendering with a pluggable scheduler\n- 🆕💥 **Instant no-config app bundling with [Preact CLI](https://github.com/developit/preact-cli)**\n\n### 💁 More information at the [Preact Website ➞](https://preactjs.com)\n\n\n---\n\n\n\n- [Demos](#demos)\n- [Libraries & Add-ons](#libraries--add-ons)\n- [Getting Started](#getting-started)\n\t- [Import what you need](#import-what-you-need)\n\t- [Rendering JSX](#rendering-jsx)\n\t- [Components](#components)\n\t- [Props & State](#props--state)\n- [Linked State](#linked-state)\n- [Examples](#examples)\n- [Extensions](#extensions)\n- [Debug Mode](#debug-mode)\n- [Backers](#backers)\n- [Sponsors](#sponsors)\n- [License](#license)\n\n\n\n\n# Preact\n\n[![npm](https://img.shields.io/npm/v/preact.svg)](http://npm.im/preact)\n[![CDNJS](https://img.shields.io/cdnjs/v/preact.svg)](https://cdnjs.com/libraries/preact)\n[![Preact Slack Community](https://preact-slack.now.sh/badge.svg)](https://preact-slack.now.sh)\n[![OpenCollective Backers](https://opencollective.com/preact/backers/badge.svg)](#backers)\n[![OpenCollective Sponsors](https://opencollective.com/preact/sponsors/badge.svg)](#sponsors)\n[![travis](https://travis-ci.org/developit/preact.svg?branch=master)](https://travis-ci.org/developit/preact)\n[![coveralls](https://img.shields.io/coveralls/developit/preact/master.svg)](https://coveralls.io/github/developit/preact)\n[![gzip size](http://img.badgesize.io/https://unpkg.com/preact/dist/preact.min.js?compression=gzip)](https://unpkg.com/preact/dist/preact.min.js)\n[![install size](https://packagephobia.now.sh/badge?p=preact)](https://packagephobia.now.sh/result?p=preact)\n\nPreact supports modern browsers and IE9+:\n\n[![Browsers](https://saucelabs.com/browser-matrix/preact.svg)](https://saucelabs.com/u/preact)\n\n\n---\n\n\n## Demos\n\n#### Real-World Apps\n\n- [**Preact Hacker News**](https://hn.kristoferbaxter.com) _([GitHub Project](https://github.com/kristoferbaxter/preact-hn))_\n- [**Play.cash**](https://play.cash) :notes: _([GitHub Project](https://github.com/feross/play.cash))_\n- [**BitMidi**](https://bitmidi.com/) 🎹 Wayback machine for free MIDI files _([GitHub Project](https://github.com/feross/bitmidi.com))_\n- [**Ultimate Guitar**](https://www.ultimate-guitar.com) 🎸speed boosted by Preact.\n- [**ESBench**](http://esbench.com) is built using Preact.\n- [**BigWebQuiz**](https://bigwebquiz.com) _([GitHub Project](https://github.com/jakearchibald/big-web-quiz))_\n- [**Nectarine.rocks**](http://nectarine.rocks) _([GitHub Project](https://github.com/developit/nectarine))_ :peach:\n- [**TodoMVC**](https://preact-todomvc.surge.sh) _([GitHub Project](https://github.com/developit/preact-todomvc))_\n- [**OSS.Ninja**](https://oss.ninja) _([GitHub Project](https://github.com/developit/oss.ninja))_\n- [**GuriVR**](https://gurivr.com) _([GitHub Project](https://github.com/opennewslabs/guri-vr))_\n- [**Color Picker**](https://colors.now.sh) _([GitHub Project](https://github.com/lukeed/colors-app))_ :art:\n- [**Offline Gallery**](https://use-the-platform.com/offline-gallery/) _([GitHub Project](https://github.com/vaneenige/offline-gallery/))_ :balloon:\n- [**Periodic Weather**](https://use-the-platform.com/periodic-weather/) _([GitHub Project](https://github.com/vaneenige/periodic-weather/))_ :sunny:\n- [**Rugby News Board**](http://nbrugby.com) _[(GitHub Project)](https://github.com/rugby-board/rugby-board-node)_\n- [**Preact Gallery**](https://preact.gallery/) an 8KB photo gallery PWA built using Preact.\n- [**Rainbow Explorer**](https://use-the-platform.com/rainbow-explorer/) Preact app to translate real life color to digital color _([Github project](https://github.com/vaneenige/rainbow-explorer))_.\n- [**YASCC**](https://carlosqsilva.github.io/YASCC/#/) Yet Another SoundCloud Client _([Github project](https://github.com/carlosqsilva/YASCC))_.\n- [**Journalize**](https://preact-journal.herokuapp.com/) 14k offline-capable journaling PWA using preact. _([Github project](https://github.com/jpodwys/preact-journal))_.\n\n\n#### Runnable Examples\n\n- [**Flickr Browser**](http://codepen.io/developit/full/VvMZwK/) (@ CodePen)\n- [**Animating Text**](http://codepen.io/developit/full/LpNOdm/) (@ CodePen)\n- [**60FPS Rainbow Spiral**](http://codepen.io/developit/full/xGoagz/) (@ CodePen)\n- [**Simple Clock**](http://jsfiddle.net/developit/u9m5x0L7/embedded/result,js/) (@ JSFiddle)\n- [**3D + ThreeJS**](http://codepen.io/developit/pen/PPMNjd?editors=0010) (@ CodePen)\n- [**Stock Ticker**](http://codepen.io/developit/pen/wMYoBb?editors=0010) (@ CodePen)\n- [*Create your Own!*](https://jsfiddle.net/developit/rs6zrh5f/embedded/result/) (@ JSFiddle)\n\n### Starter Projects\n\n- [**Preact Boilerplate**](https://preact-boilerplate.surge.sh) _([GitHub Project](https://github.com/developit/preact-boilerplate))_ :zap:\n- [**Preact Offline Starter**](https://preact-starter.now.sh) _([GitHub Project](https://github.com/lukeed/preact-starter))_ :100:\n- [**Preact PWA**](https://preact-pwa-yfxiijbzit.now.sh/) _([GitHub Project](https://github.com/ezekielchentnik/preact-pwa))_ :hamburger:\n- [**Parcel + Preact + Unistore Starter**](https://github.com/hwclass/parcel-preact-unistore-starter)\n- [**Preact Mobx Starter**](https://awaw00.github.io/preact-mobx-starter/) _([GitHub Project](https://github.com/awaw00/preact-mobx-starter))_ :sunny:\n- [**Preact Redux Example**](https://github.com/developit/preact-redux-example) :star:\n- [**Preact Redux/RxJS/Reselect Example**](https://github.com/continuata/preact-seed)\n- [**V2EX Preact**](https://github.com/yanni4night/v2ex-preact)\n- [**Preact Coffeescript**](https://github.com/crisward/preact-coffee)\n- [**Preact + TypeScript + Webpack**](https://github.com/k1r0s/bleeding-preact-starter)\n- [**0 config => Preact + Poi**](https://github.com/k1r0s/preact-poi-starter)\n- [**Zero configuration => Preact + Typescript + Parcel**](https://github.com/aalises/preact-typescript-parcel-starter)\n\n---\n\n## Libraries & Add-ons\n\n- :raised_hands: [**preact-compat**](https://git.io/preact-compat): use any React library with Preact *([full example](http://git.io/preact-compat-example))*\n- :twisted_rightwards_arrows: [**preact-context**](https://github.com/valotas/preact-context): React's `createContext` api for Preact\n- :page_facing_up: [**preact-render-to-string**](https://git.io/preact-render-to-string): Universal rendering.\n- :eyes: [**preact-render-spy**](https://github.com/mzgoddard/preact-render-spy): Enzyme-lite: Renderer with access to the produced virtual dom for testing.\n- :loop: [**preact-render-to-json**](https://git.io/preact-render-to-json): Render for Jest Snapshot testing.\n- :earth_americas: [**preact-router**](https://git.io/preact-router): URL routing for your components\n- :bookmark_tabs: [**preact-markup**](https://git.io/preact-markup): Render HTML & Custom Elements as JSX & Components\n- :satellite: [**preact-portal**](https://git.io/preact-portal): Render Preact components into (a) SPACE :milky_way:\n- :pencil: [**preact-richtextarea**](https://git.io/preact-richtextarea): Simple HTML editor component\n- :bookmark: [**preact-token-input**](https://github.com/developit/preact-token-input): Text field that tokenizes input, for things like tags\n- :card_index: [**preact-virtual-list**](https://github.com/developit/preact-virtual-list): Easily render lists with millions of rows ([demo](https://jsfiddle.net/developit/qqan9pdo/))\n- :repeat: [**preact-cycle**](https://git.io/preact-cycle): Functional-reactive paradigm for Preact\n- :triangular_ruler: [**preact-layout**](https://download.github.io/preact-layout/): Small and simple layout library\n- :thought_balloon: [**preact-socrates**](https://github.com/matthewmueller/preact-socrates): Preact plugin for [Socrates](http://github.com/matthewmueller/socrates)\n- :rowboat: [**preact-flyd**](https://github.com/xialvjun/preact-flyd): Use [flyd](https://github.com/paldepind/flyd) FRP streams in Preact + JSX\n- :speech_balloon: [**preact-i18nline**](https://github.com/download/preact-i18nline): Integrates the ecosystem around [i18n-js](https://github.com/everydayhero/i18n-js) with Preact via [i18nline](https://github.com/download/i18nline).\n- :microscope: [**preact-jsx-chai**](https://git.io/preact-jsx-chai): JSX assertion testing _(no DOM, right in Node)_\n- :tophat: [**preact-classless-component**](https://github.com/ld0rman/preact-classless-component): create preact components without the class keyword\n- :hammer: [**preact-hyperscript**](https://github.com/queckezz/preact-hyperscript): Hyperscript-like syntax for creating elements\n- :white_check_mark: [**shallow-compare**](https://github.com/tkh44/shallow-compare): simplified `shouldComponentUpdate` helper.\n- :shaved_ice: [**preact-codemod**](https://github.com/vutran/preact-codemod): Transform your React code to Preact.\n- :construction_worker: [**preact-helmet**](https://github.com/download/preact-helmet): A document head manager for Preact\n- :necktie: [**preact-delegate**](https://github.com/NekR/preact-delegate): Delegate DOM events\n- :art: [**preact-stylesheet-decorator**](https://github.com/k1r0s/preact-stylesheet-decorator): Add Scoped Stylesheets to your Preact Components\n- :electric_plug: [**preact-routlet**](https://github.com/k1r0s/preact-routlet): Simple `Component Driven` Routing for Preact using ES7 Decorators\n- :fax: [**preact-bind-group**](https://github.com/k1r0s/preact-bind-group): Preact Forms made easy, Group Events into a Single Callback\n- :hatching_chick: [**preact-habitat**](https://github.com/zouhir/preact-habitat): Declarative Preact widgets renderer in any CMS or DOM host ([demo](https://codepen.io/zouhir/pen/brrOPB)).\n- :tada: [**proppy-preact**](https://github.com/fahad19/proppy): Functional props composition for Preact components\n\n#### UI Component Libraries\n\n> Want to prototype something or speed up your development? Try one of these toolkits:\n\n- [**preact-material-components**](https://github.com/prateekbh/preact-material-components): Material Design Components for Preact ([website](https://material.preactjs.com/))\n- [**preact-mdc**](https://github.com/BerndWessels/preact-mdc): Material Design Components for Preact ([demo](https://github.com/BerndWessels/preact-mdc-demo))\n- [**preact-mui**](https://git.io/v1aVO): The MUI CSS Preact library.\n- [**preact-photon**](https://git.io/preact-photon): build beautiful desktop UI with [photon](http://photonkit.com)\n- [**preact-mdl**](https://git.io/preact-mdl): [Material Design Lite](https://getmdl.io) for Preact\n- [**preact-weui**](https://github.com/afeiship/preact-weui): [Weui](https://github.com/afeiship/preact-weui) for Preact\n\n\n---\n\n## Getting Started\n\n> 💁 _**Note:** You [don't need ES2015 to use Preact](https://github.com/developit/preact-in-es3)... but give it a try!_\n\nThe easiest way to get started with Preact is to install [Preact CLI](https://github.com/developit/preact-cli). This simple command-line tool wraps up the best possible Webpack and Babel setup for you, and even keeps you up-to-date as the underlying tools change. Best of all, it's easy to understand! It builds your app in a single command (`preact build`), doesn't need any configuration, and bakes in best-practises 🙌.\n\nThe following guide assumes you have some sort of ES2015 build set up using babel and/or webpack/browserify/gulp/grunt/etc.\n\nYou can also start with [preact-boilerplate] or a [CodePen Template](http://codepen.io/developit/pen/pgaROe?editors=0010).\n\n\n### Import what you need\n\nThe `preact` module provides both named and default exports, so you can either import everything under a namespace of your choosing, or just what you need as locals:\n\n##### Named:\n\n```js\nimport { h, render, Component } from 'preact';\n\n// Tell Babel to transform JSX into h() calls:\n/** @jsx h */\n```\n\n##### Default:\n\n```js\nimport preact from 'preact';\n\n// Tell Babel to transform JSX into preact.h() calls:\n/** @jsx preact.h */\n```\n\n> Named imports work well for highly structured applications, whereas the default import is quick and never needs to be updated when using different parts of the library.\n>\n> Instead of declaring the `@jsx` pragma in your code, it's best to configure it globally in a `.babelrc`:\n>\n> **For Babel 5 and prior:**\n>\n> ```json\n> { \"jsxPragma\": \"h\" }\n> ```\n>\n> **For Babel 6:**\n>\n> ```json\n> {\n> \"plugins\": [\n> [\"transform-react-jsx\", { \"pragma\":\"h\" }]\n> ]\n> }\n> ```\n>\n> **For Babel 7:**\n>\n> ```json\n> {\n> \"plugins\": [\n> [\"@babel/plugin-transform-react-jsx\", { \"pragma\":\"h\" }]\n> ]\n> }\n> ```\n> **For using Preact along with TypeScript add to `tsconfig.json`:**\n>\n> ```json\n> {\n> \"jsx\": \"react\",\n> \"jsxFactory\": \"h\",\n> }\n> ```\n\n\n### Rendering JSX\n\nOut of the box, Preact provides an `h()` function that turns your JSX into Virtual DOM elements _([here's how](http://jasonformat.com/wtf-is-jsx))_. It also provides a `render()` function that creates a DOM tree from that Virtual DOM.\n\nTo render some JSX, just import those two functions and use them like so:\n\n```js\nimport { h, render } from 'preact';\n\nrender((\n\t
\n\t\tHello, world!\n\t\t\n\t
\n), document.body);\n```\n\nThis should seem pretty straightforward if you've used hyperscript or one of its many friends. If you're not, the short of it is that the `h()` function import gets used in the final, transpiled code as a drop in replacement for `React.createElement()`, and so needs to be imported even if you don't explicitly use it in the code you write. Also note that if you're the kind of person who likes writing your React code in \"pure JavaScript\" (you know who you are) you will need to use `h()` wherever you would otherwise use `React.createElement()`.\n\nRendering hyperscript with a virtual DOM is pointless, though. We want to render components and have them updated when data changes - that's where the power of virtual DOM diffing shines. :star2:\n\n\n### Components\n\nPreact exports a generic `Component` class, which can be extended to build encapsulated, self-updating pieces of a User Interface. Components support all of the standard React [lifecycle methods], like `shouldComponentUpdate()` and `componentWillReceiveProps()`. Providing specific implementations of these methods is the preferred mechanism for controlling _when_ and _how_ components update.\n\nComponents also have a `render()` method, but unlike React this method is passed `(props, state)` as arguments. This provides an ergonomic means to destructure `props` and `state` into local variables to be referenced from JSX.\n\nLet's take a look at a very simple `Clock` component, which shows the current time.\n\n```js\nimport { h, render, Component } from 'preact';\n\nclass Clock extends Component {\n\trender() {\n\t\tlet time = new Date();\n\t\treturn ;\n\t}\n}\n\n// render an instance of Clock into :\nrender(, document.body);\n```\n\n\nThat's great. Running this produces the following HTML DOM structure:\n\n```html\n10:28:57 PM\n```\n\nIn order to have the clock's time update every second, we need to know when `` gets mounted to the DOM. _If you've used HTML5 Custom Elements, this is similar to the `attachedCallback` and `detachedCallback` lifecycle methods._ Preact invokes the following lifecycle methods if they are defined for a Component:\n\n| Lifecycle method | When it gets called |\n|-----------------------------|--------------------------------------------------|\n| `componentWillMount` | before the component gets mounted to the DOM |\n| `componentDidMount` | after the component gets mounted to the DOM |\n| `componentWillUnmount` | prior to removal from the DOM |\n| `componentWillReceiveProps` | before new props get accepted |\n| `shouldComponentUpdate` | before `render()`. Return `false` to skip render |\n| `componentWillUpdate` | before `render()` |\n| `componentDidUpdate` | after `render()` |\n\n\n\nSo, we want to have a 1-second timer start once the Component gets added to the DOM, and stop if it is removed. We'll create the timer and store a reference to it in `componentDidMount()`, and stop the timer in `componentWillUnmount()`. On each timer tick, we'll update the component's `state` object with a new time value. Doing this will automatically re-render the component.\n\n```js\nimport { h, render, Component } from 'preact';\n\nclass Clock extends Component {\n\tconstructor() {\n\t\tsuper();\n\t\t// set initial time:\n\t\tthis.state = {\n\t\t\ttime: Date.now()\n\t\t};\n\t}\n\n\tcomponentDidMount() {\n\t\t// update time every second\n\t\tthis.timer = setInterval(() => {\n\t\t\tthis.setState({ time: Date.now() });\n\t\t}, 1000);\n\t}\n\n\tcomponentWillUnmount() {\n\t\t// stop when not renderable\n\t\tclearInterval(this.timer);\n\t}\n\n\trender(props, state) {\n\t\tlet time = new Date(state.time).toLocaleTimeString();\n\t\treturn { time };\n\t}\n}\n\n// render an instance of Clock into :\nrender(, document.body);\n```\n\nNow we have [a ticking clock](http://jsfiddle.net/developit/u9m5x0L7/embedded/result,js/)!\n\n\n### Props & State\n\nThe concept (and nomenclature) for `props` and `state` is the same as in React. `props` are passed to a component by defining attributes in JSX, `state` is internal state. Changing either triggers a re-render, though by default Preact re-renders Components asynchronously for `state` changes and synchronously for `props` changes. You can tell Preact to render `prop` changes asynchronously by setting `options.syncComponentUpdates` to `false`.\n\n\n---\n\n\n## Linked State\n\nOne area Preact takes a little further than React is in optimizing state changes. A common pattern in ES2015 React code is to use Arrow functions within a `render()` method in order to update state in response to events. Creating functions enclosed in a scope on every render is inefficient and forces the garbage collector to do more work than is necessary.\n\nOne solution to this is to bind component methods declaratively.\nHere is an example using [decko](http://git.io/decko):\n\n```js\nclass Foo extends Component {\n\t@bind\n\tupdateText(e) {\n\t\tthis.setState({ text: e.target.value });\n\t}\n\trender({ }, { text }) {\n\t\treturn ;\n\t}\n}\n```\n\nWhile this achieves much better runtime performance, it's still a lot of unnecessary code to wire up state to UI.\n\nFortunately there is a solution, in the form of a module called [linkstate](https://github.com/developit/linkstate). Calling `linkState(component, 'text')` returns a function that accepts an Event and uses its associated value to update the given property in your component's state. Calls to `linkState()` with the same arguments are cached, so there is no performance penalty. Here is the previous example rewritten using _Linked State_:\n\n```js\nimport linkState from 'linkstate';\n\nclass Foo extends Component {\n\trender({ }, { text }) {\n\t\treturn ;\n\t}\n}\n```\n\nSimple and effective. It handles linking state from any input type, or an optional second parameter can be used to explicitly provide a keypath to the new state value.\n\n> **Note:** In Preact 7 and prior, `linkState()` was built right into Component. In 8.0, it was moved to a separate module. You can restore the 7.x behavior by using linkstate as a polyfill - see [the linkstate docs](https://github.com/developit/linkstate#usage).\n\n\n\n## Examples\n\nHere is a somewhat verbose Preact `` component:\n\n```js\nclass Link extends Component {\n\trender(props, state) {\n\t\treturn {props.children};\n\t}\n}\n```\n\nSince this is ES6/ES2015, we can further simplify:\n\n```js\nclass Link extends Component {\n render({ href, children }) {\n return ;\n }\n}\n\n// or, for wide-open props support:\nclass Link extends Component {\n render(props) {\n return ;\n }\n}\n\n// or, as a stateless functional component:\nconst Link = ({ children, ...props }) => (\n { children }\n);\n```\n\n\n## Extensions\n\nIt is likely that some projects based on Preact would wish to extend Component with great new functionality.\n\nPerhaps automatic connection to stores for a Flux-like architecture, or mixed-in context bindings to make it feel more like `React.createClass()`. Just use ES2015 inheritance:\n\n```js\nclass BoundComponent extends Component {\n\tconstructor(props) {\n\t\tsuper(props);\n\t\tthis.bind();\n\t}\n\tbind() {\n\t\tthis.binds = {};\n\t\tfor (let i in this) {\n\t\t\tthis.binds[i] = this[i].bind(this);\n\t\t}\n\t}\n}\n\n// example usage\nclass Link extends BoundComponent {\n\tclick() {\n\t\topen(this.href);\n\t}\n\trender() {\n\t\tlet { click } = this.binds;\n\t\treturn { children };\n\t}\n}\n```\n\n\nThe possibilities are pretty endless here. You could even add support for rudimentary mixins:\n\n```js\nclass MixedComponent extends Component {\n\tconstructor() {\n\t\tsuper();\n\t\t(this.mixins || []).forEach( m => Object.assign(this, m) );\n\t}\n}\n```\n\n## Debug Mode\n\nYou can inspect and modify the state of your Preact UI components at runtime using the\n[React Developer Tools](https://github.com/facebook/react-devtools) browser extension.\n\n1. Install the [React Developer Tools](https://github.com/facebook/react-devtools) extension\n2. Import the \"preact/debug\" module in your app\n3. Set `process.env.NODE_ENV` to 'development'\n4. Reload and go to the 'React' tab in the browser's development tools\n\n\n```js\nimport { h, Component, render } from 'preact';\n\n// Enable debug mode. You can reduce the size of your app by only including this\n// module in development builds. eg. In Webpack, wrap this with an `if (module.hot) {...}`\n// check.\nrequire('preact/debug');\n```\n\n### Runtime Error Checking\n\nTo enable debug mode, you need to set `process.env.NODE_ENV=development`. You can do this\nwith webpack via a builtin plugin.\n\n```js\n// webpack.config.js\n\n// Set NODE_ENV=development to enable error checking\nnew webpack.DefinePlugin({\n 'process.env': {\n 'NODE_ENV': JSON.stringify('development')\n }\n});\n```\n\nWhen enabled, warnings are logged to the console when undefined components or string refs\nare detected.\n\n### Developer Tools\n\nIf you only want to include devtool integration, without runtime error checking, you can\nreplace `preact/debug` in the above example with `preact/devtools`. This option doesn't\nrequire setting `NODE_ENV=development`.\n\n\n\n## Backers\nSupport us with a monthly donation and help us continue our activities. [[Become a backer](https://opencollective.com/preact#backer)]\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n## Sponsors\nBecome a sponsor and get your logo on our README on GitHub with a link to your site. [[Become a sponsor](https://opencollective.com/preact#sponsor)]\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n## License\n\nMIT\n\n\n\n[![Preact](http://i.imgur.com/YqCHvEW.gif)](https://preactjs.com)\n\n\n[preact-compat]: https://github.com/developit/preact-compat\n[ES6 Class]: https://facebook.github.io/react/docs/reusable-components.html#es6-classes\n[Functional Components]: https://facebook.github.io/react/blog/2015/10/07/react-v0.14.html#stateless-functional-components\n[hyperscript]: https://github.com/dominictarr/hyperscript\n[preact-boilerplate]: https://github.com/developit/preact-boilerplate\n[lifecycle methods]: https://facebook.github.io/react/docs/component-specs.html\n","readmeFilename":"README.md","_id":"preact@10.0.0-alpha.4","_npmVersion":"6.5.0","_nodeVersion":"11.7.0","_npmUser":{"name":"marvinhagemeister","email":"marvin@marvinhagemeister.de"},"dist":{"integrity":"sha512-HD8ocvxID8NjC6m0rZhY1HbbBIHBKw7E4/0nu/zulPcGhgXEjm2BD9Tt8wQdoa/nea3APJ72TxRJSg2oQmU3uA==","shasum":"c0cf81771fa7aaa3e71adf8741b1e341e2cc4bd1","tarball":"http://localhost:4545/npm/registry/preact/preact-10.0.0-alpha.4.tgz","fileCount":68,"unpackedSize":588825,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcp7eeCRA9TVsSAnZWagAAu7oP/1JyA1ZrwQfmN4Hc0axu\n+dCcs0TXp4Z+mkzuRe7tcgv5vxE8mnfNIyPsme4BiTiEPgWEsbgpCCOQnCP9\nuND9F5A9EPBMHXGOnc+KtF88cQXE3U4zQi0JqoKHeIqLUArZKLp+53QiCOVh\nzZoowgd2rfm0ECk0yUzgTb2tQE9mKei7qC7NlZ+QYZiOf7iwXFCzRwGIWu4v\nZEwrTF3OQiPxbpPmQs94trljuoiHfY+Zi5wxTteTNL9GOcViJpc/uX6RWMIS\nxuK+pD2XXbTwR5+QjtkOs0H2s1T4MivoDbC2qcH4lIwKIPa65NLKyZnxU4Bs\naHTiARYAydWZjQdYIceixGPta36IgEcW3/qSw3UsKMfoAEadggeCsdjMUrPW\nFxHp4JHfqZoG5LNYoJIoFJZ4ex1QJOKBg2sDftPubNNOHx4D5FDnBiECCSBo\nSQRLny2z6yjAt6OJYEbTmikgZs9nLka3ACg+EYxqMGJECViw+e26HxPqNDBW\nUtdco672RAML+kjxI/HJlOlUzmfsUp7HslrawoEWi3LXjHJOyHxAPnVJn8jI\nmWpiMC/x6lGk+Sy8SuoBSEZuVVMz+Cz2jIo2Ex7s7iqhbLLwbpdhSNkT3L+q\n2I5/Y2NVoQJ2s4TUmOInleTzclCNI4SrH1TtVu4M+KUHl0phP5urI0TradoC\nASMQ\r\n=Ahgl\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCBokXGCsnSjDfwr8BxAw0WKxdlhxkp9EYajhHCUQpN1QIgaeeDSE7ICgyyJfBlrneSbd8sxoAxGsEQnuqT0sKgXuE="}]},"maintainers":[{"email":"jason@developit.ca","name":"developit"},{"email":"ulliftw@gmail.com","name":"harmony"},{"email":"luke@lukeed.com","name":"lukeed"},{"email":"marvin@marvinhagemeister.de","name":"marvinhagemeister"},{"email":"prateek89born@gmail.com","name":"prateekbh"},{"email":"hello@preactjs.com","name":"preactjs"},{"email":"allamsetty.anup@gmail.com","name":"reznord"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/preact_10.0.0-alpha.4_1554495389996_0.824829669648407"},"_hasShrinkwrap":false},"10.0.0-beta.0":{"name":"preact","amdName":"preact","version":"10.0.0-beta.0","private":false,"description":"Fast 3kb React-compatible Virtual DOM library.","main":"dist/preact.js","module":"dist/preact.module.js","umd:main":"dist/preact.umd.js","source":"src/index.js","license":"MIT","types":"src/index.d.ts","scripts":{"build":"npm-run-all --parallel build:*","build:core":"microbundle build --raw","build:debug":"microbundle build --raw --cwd debug","build:hooks":"microbundle build --raw --cwd hooks","build:test-utils":"microbundle build --raw --cwd test-utils","build:compat":"microbundle build --raw --cwd compat --globals 'preact/hooks=preactHooks'","dev":"microbundle watch --raw --format cjs,umd","dev:hooks":"microbundle watch --raw --format cjs --cwd hooks","test":"npm-run-all lint build --parallel test:mocha test:karma test:ts","test:flow":"flow check","test:ts":"tsc -p test/ts/ && mocha --require babel-register test/ts/**/*-test.js","test:mocha":"mocha --recursive --require babel-register test/shared test/node","test:karma":"cross-env COVERAGE=true karma start karma.conf.js --single-run","test:mocha:watch":"npm run test:mocha -- --watch","test:karma:watch":"karma start karma.conf.js --no-single-run","test:karma:hooks":"cross-env COVERAGE=false karma start karma.conf.js --grep=hooks/test/browser/**.js --no-single-run","test:karma:test-utils":"cross-env PERFORMANCE=false COVERAGE=false karma start karma.conf.js --grep=test-utils/test/shared/**.js --no-single-run","test:karma:bench":"cross-env PERFORMANCE=true COVERAGE=false karma start karma.conf.js --grep=test/benchmarks/**.js --single-run","benchmark":"npm run test:karma:bench -- no-single-run","test:size":"bundlesize","lint":"eslint src test","postinstall":"node -e \"console.log('\\u001b[35m\\u001b[1mLove Preact? You can now donate to our open collective:\\u001b[22m\\u001b[39m\\n > \\u001b[34mhttps://opencollective.com/preact/donate\\u001b[0m')\""},"eslintConfig":{"extends":"developit","settings":{"react":{"pragma":"createElement"}},"rules":{"prefer-rest-params":0,"prefer-spread":0,"no-cond-assign":0,"react/jsx-no-bind":0,"react/prefer-stateless-function":0,"react/sort-comp":0,"jest/valid-expect":0,"jest/no-disabled-tests":0,"react/no-find-dom-node":0}},"keywords":["preact","react","virtual dom","vdom","components","virtual","dom"],"authors":["Jason Miller "],"repository":{"type":"git","url":"git+https://github.com/developit/preact.git"},"bugs":{"url":"https://github.com/developit/preact/issues"},"homepage":"https://github.com/developit/preact","devDependencies":{"@types/chai":"^4.1.2","@types/mocha":"^5.0.0","@types/node":"^10.5.2","babel-cli":"^6.24.1","babel-core":"^6.26.3","babel-loader":"^7.1.5","babel-plugin-istanbul":"^5.0.1","babel-plugin-transform-object-rest-spread":"^6.23.0","babel-plugin-transform-react-jsx":"^6.24.1","babel-preset-env":"^1.6.1","benchmark":"^2.1.4","bundlesize":"^0.17.0","chai":"^4.1.2","coveralls":"^3.0.0","cross-env":"^5.2.0","diff":"^3.5.0","eslint":"^5.1.0","eslint-config-developit":"^1.1.1","flow-bin":"^0.79.1","karma":"^3.0.0","karma-babel-preprocessor":"^7.0.0","karma-chai-sinon":"^0.1.5","karma-chrome-launcher":"^2.2.0","karma-coverage":"^1.1.2","karma-mocha":"^1.3.0","karma-mocha-reporter":"^2.2.5","karma-sauce-launcher":"^1.2.0","karma-sinon":"^1.0.5","karma-source-map-support":"^1.3.0","karma-sourcemap-loader":"^0.3.7","karma-webpack":"^3.0.5","lodash":"^4.17.10","microbundle":"^0.11.0","mocha":"^5.2.0","npm-run-all":"^4.0.0","prop-types":"^15.7.2","sinon":"^6.1.3","sinon-chai":"^3.0.0","typescript":"^3.0.1","webpack":"^4.3.0"},"bundlesize":[{"path":"./dist/preact.js","maxSize":"3Kb"}],"gitHead":"4bcdb864e47462effa7d20d2cd3cea0cc9f624f9","readme":"
Fast 3kB alternative to React with the same modern API.
\n\n**All the power of Virtual DOM components, without the overhead:**\n\n- Familiar React API & patterns: [ES6 Class] and [Functional Components]\n- Extensive React compatibility via a simple [preact-compat] alias\n- Everything you need: JSX, VDOM, React DevTools, HMR, SSR..\n- A highly optimized diff algorithm and seamless Server Side Rendering\n- Transparent asynchronous rendering with a pluggable scheduler\n- 🆕💥 **Instant no-config app bundling with [Preact CLI](https://github.com/developit/preact-cli)**\n\n### 💁 More information at the [Preact Website ➞](https://preactjs.com)\n\n\n---\n\n\n\n- [Demos](#demos)\n- [Libraries & Add-ons](#libraries--add-ons)\n- [Getting Started](#getting-started)\n\t- [Import what you need](#import-what-you-need)\n\t- [Rendering JSX](#rendering-jsx)\n\t- [Components](#components)\n\t- [Props & State](#props--state)\n- [Linked State](#linked-state)\n- [Examples](#examples)\n- [Extensions](#extensions)\n- [Debug Mode](#debug-mode)\n- [Backers](#backers)\n- [Sponsors](#sponsors)\n- [License](#license)\n\n\n\n\n# Preact\n\n[![npm](https://img.shields.io/npm/v/preact.svg)](http://npm.im/preact)\n[![CDNJS](https://img.shields.io/cdnjs/v/preact.svg)](https://cdnjs.com/libraries/preact)\n[![Preact Slack Community](https://preact-slack.now.sh/badge.svg)](https://preact-slack.now.sh)\n[![OpenCollective Backers](https://opencollective.com/preact/backers/badge.svg)](#backers)\n[![OpenCollective Sponsors](https://opencollective.com/preact/sponsors/badge.svg)](#sponsors)\n[![travis](https://travis-ci.org/developit/preact.svg?branch=master)](https://travis-ci.org/developit/preact)\n[![coveralls](https://img.shields.io/coveralls/developit/preact/master.svg)](https://coveralls.io/github/developit/preact)\n[![gzip size](http://img.badgesize.io/https://unpkg.com/preact/dist/preact.min.js?compression=gzip)](https://unpkg.com/preact/dist/preact.min.js)\n[![install size](https://packagephobia.now.sh/badge?p=preact)](https://packagephobia.now.sh/result?p=preact)\n\nPreact supports modern browsers and IE9+:\n\n[![Browsers](https://saucelabs.com/browser-matrix/preact.svg)](https://saucelabs.com/u/preact)\n\n\n---\n\n\n## Demos\n\n#### Real-World Apps\n\n- [**Preact Hacker News**](https://hn.kristoferbaxter.com) _([GitHub Project](https://github.com/kristoferbaxter/preact-hn))_\n- [**Play.cash**](https://play.cash) :notes: _([GitHub Project](https://github.com/feross/play.cash))_\n- [**BitMidi**](https://bitmidi.com/) 🎹 Wayback machine for free MIDI files _([GitHub Project](https://github.com/feross/bitmidi.com))_\n- [**Ultimate Guitar**](https://www.ultimate-guitar.com) 🎸speed boosted by Preact.\n- [**ESBench**](http://esbench.com) is built using Preact.\n- [**BigWebQuiz**](https://bigwebquiz.com) _([GitHub Project](https://github.com/jakearchibald/big-web-quiz))_\n- [**Nectarine.rocks**](http://nectarine.rocks) _([GitHub Project](https://github.com/developit/nectarine))_ :peach:\n- [**TodoMVC**](https://preact-todomvc.surge.sh) _([GitHub Project](https://github.com/developit/preact-todomvc))_\n- [**OSS.Ninja**](https://oss.ninja) _([GitHub Project](https://github.com/developit/oss.ninja))_\n- [**GuriVR**](https://gurivr.com) _([GitHub Project](https://github.com/opennewslabs/guri-vr))_\n- [**Color Picker**](https://colors.now.sh) _([GitHub Project](https://github.com/lukeed/colors-app))_ :art:\n- [**Offline Gallery**](https://use-the-platform.com/offline-gallery/) _([GitHub Project](https://github.com/vaneenige/offline-gallery/))_ :balloon:\n- [**Periodic Weather**](https://use-the-platform.com/periodic-weather/) _([GitHub Project](https://github.com/vaneenige/periodic-weather/))_ :sunny:\n- [**Rugby News Board**](http://nbrugby.com) _[(GitHub Project)](https://github.com/rugby-board/rugby-board-node)_\n- [**Preact Gallery**](https://preact.gallery/) an 8KB photo gallery PWA built using Preact.\n- [**Rainbow Explorer**](https://use-the-platform.com/rainbow-explorer/) Preact app to translate real life color to digital color _([Github project](https://github.com/vaneenige/rainbow-explorer))_.\n- [**YASCC**](https://carlosqsilva.github.io/YASCC/#/) Yet Another SoundCloud Client _([Github project](https://github.com/carlosqsilva/YASCC))_.\n- [**Journalize**](https://preact-journal.herokuapp.com/) 14k offline-capable journaling PWA using preact. _([Github project](https://github.com/jpodwys/preact-journal))_.\n\n\n#### Runnable Examples\n\n- [**Flickr Browser**](http://codepen.io/developit/full/VvMZwK/) (@ CodePen)\n- [**Animating Text**](http://codepen.io/developit/full/LpNOdm/) (@ CodePen)\n- [**60FPS Rainbow Spiral**](http://codepen.io/developit/full/xGoagz/) (@ CodePen)\n- [**Simple Clock**](http://jsfiddle.net/developit/u9m5x0L7/embedded/result,js/) (@ JSFiddle)\n- [**3D + ThreeJS**](http://codepen.io/developit/pen/PPMNjd?editors=0010) (@ CodePen)\n- [**Stock Ticker**](http://codepen.io/developit/pen/wMYoBb?editors=0010) (@ CodePen)\n- [*Create your Own!*](https://jsfiddle.net/developit/rs6zrh5f/embedded/result/) (@ JSFiddle)\n\n### Starter Projects\n\n- [**Preact Boilerplate**](https://preact-boilerplate.surge.sh) _([GitHub Project](https://github.com/developit/preact-boilerplate))_ :zap:\n- [**Preact Offline Starter**](https://preact-starter.now.sh) _([GitHub Project](https://github.com/lukeed/preact-starter))_ :100:\n- [**Preact PWA**](https://preact-pwa-yfxiijbzit.now.sh/) _([GitHub Project](https://github.com/ezekielchentnik/preact-pwa))_ :hamburger:\n- [**Parcel + Preact + Unistore Starter**](https://github.com/hwclass/parcel-preact-unistore-starter)\n- [**Preact Mobx Starter**](https://awaw00.github.io/preact-mobx-starter/) _([GitHub Project](https://github.com/awaw00/preact-mobx-starter))_ :sunny:\n- [**Preact Redux Example**](https://github.com/developit/preact-redux-example) :star:\n- [**Preact Redux/RxJS/Reselect Example**](https://github.com/continuata/preact-seed)\n- [**V2EX Preact**](https://github.com/yanni4night/v2ex-preact)\n- [**Preact Coffeescript**](https://github.com/crisward/preact-coffee)\n- [**Preact + TypeScript + Webpack**](https://github.com/k1r0s/bleeding-preact-starter)\n- [**0 config => Preact + Poi**](https://github.com/k1r0s/preact-poi-starter)\n- [**Zero configuration => Preact + Typescript + Parcel**](https://github.com/aalises/preact-typescript-parcel-starter)\n\n---\n\n## Libraries & Add-ons\n\n- :raised_hands: [**preact-compat**](https://git.io/preact-compat): use any React library with Preact *([full example](http://git.io/preact-compat-example))*\n- :twisted_rightwards_arrows: [**preact-context**](https://github.com/valotas/preact-context): React's `createContext` api for Preact\n- :page_facing_up: [**preact-render-to-string**](https://git.io/preact-render-to-string): Universal rendering.\n- :eyes: [**preact-render-spy**](https://github.com/mzgoddard/preact-render-spy): Enzyme-lite: Renderer with access to the produced virtual dom for testing.\n- :loop: [**preact-render-to-json**](https://git.io/preact-render-to-json): Render for Jest Snapshot testing.\n- :earth_americas: [**preact-router**](https://git.io/preact-router): URL routing for your components\n- :bookmark_tabs: [**preact-markup**](https://git.io/preact-markup): Render HTML & Custom Elements as JSX & Components\n- :satellite: [**preact-portal**](https://git.io/preact-portal): Render Preact components into (a) SPACE :milky_way:\n- :pencil: [**preact-richtextarea**](https://git.io/preact-richtextarea): Simple HTML editor component\n- :bookmark: [**preact-token-input**](https://github.com/developit/preact-token-input): Text field that tokenizes input, for things like tags\n- :card_index: [**preact-virtual-list**](https://github.com/developit/preact-virtual-list): Easily render lists with millions of rows ([demo](https://jsfiddle.net/developit/qqan9pdo/))\n- :repeat: [**preact-cycle**](https://git.io/preact-cycle): Functional-reactive paradigm for Preact\n- :triangular_ruler: [**preact-layout**](https://download.github.io/preact-layout/): Small and simple layout library\n- :thought_balloon: [**preact-socrates**](https://github.com/matthewmueller/preact-socrates): Preact plugin for [Socrates](http://github.com/matthewmueller/socrates)\n- :rowboat: [**preact-flyd**](https://github.com/xialvjun/preact-flyd): Use [flyd](https://github.com/paldepind/flyd) FRP streams in Preact + JSX\n- :speech_balloon: [**preact-i18nline**](https://github.com/download/preact-i18nline): Integrates the ecosystem around [i18n-js](https://github.com/everydayhero/i18n-js) with Preact via [i18nline](https://github.com/download/i18nline).\n- :microscope: [**preact-jsx-chai**](https://git.io/preact-jsx-chai): JSX assertion testing _(no DOM, right in Node)_\n- :tophat: [**preact-classless-component**](https://github.com/ld0rman/preact-classless-component): create preact components without the class keyword\n- :hammer: [**preact-hyperscript**](https://github.com/queckezz/preact-hyperscript): Hyperscript-like syntax for creating elements\n- :white_check_mark: [**shallow-compare**](https://github.com/tkh44/shallow-compare): simplified `shouldComponentUpdate` helper.\n- :shaved_ice: [**preact-codemod**](https://github.com/vutran/preact-codemod): Transform your React code to Preact.\n- :construction_worker: [**preact-helmet**](https://github.com/download/preact-helmet): A document head manager for Preact\n- :necktie: [**preact-delegate**](https://github.com/NekR/preact-delegate): Delegate DOM events\n- :art: [**preact-stylesheet-decorator**](https://github.com/k1r0s/preact-stylesheet-decorator): Add Scoped Stylesheets to your Preact Components\n- :electric_plug: [**preact-routlet**](https://github.com/k1r0s/preact-routlet): Simple `Component Driven` Routing for Preact using ES7 Decorators\n- :fax: [**preact-bind-group**](https://github.com/k1r0s/preact-bind-group): Preact Forms made easy, Group Events into a Single Callback\n- :hatching_chick: [**preact-habitat**](https://github.com/zouhir/preact-habitat): Declarative Preact widgets renderer in any CMS or DOM host ([demo](https://codepen.io/zouhir/pen/brrOPB)).\n- :tada: [**proppy-preact**](https://github.com/fahad19/proppy): Functional props composition for Preact components\n\n#### UI Component Libraries\n\n> Want to prototype something or speed up your development? Try one of these toolkits:\n\n- [**preact-material-components**](https://github.com/prateekbh/preact-material-components): Material Design Components for Preact ([website](https://material.preactjs.com/))\n- [**preact-mdc**](https://github.com/BerndWessels/preact-mdc): Material Design Components for Preact ([demo](https://github.com/BerndWessels/preact-mdc-demo))\n- [**preact-mui**](https://git.io/v1aVO): The MUI CSS Preact library.\n- [**preact-photon**](https://git.io/preact-photon): build beautiful desktop UI with [photon](http://photonkit.com)\n- [**preact-mdl**](https://git.io/preact-mdl): [Material Design Lite](https://getmdl.io) for Preact\n- [**preact-weui**](https://github.com/afeiship/preact-weui): [Weui](https://github.com/afeiship/preact-weui) for Preact\n\n\n---\n\n## Getting Started\n\n> 💁 _**Note:** You [don't need ES2015 to use Preact](https://github.com/developit/preact-in-es3)... but give it a try!_\n\nThe easiest way to get started with Preact is to install [Preact CLI](https://github.com/developit/preact-cli). This simple command-line tool wraps up the best possible Webpack and Babel setup for you, and even keeps you up-to-date as the underlying tools change. Best of all, it's easy to understand! It builds your app in a single command (`preact build`), doesn't need any configuration, and bakes in best-practises 🙌.\n\nThe following guide assumes you have some sort of ES2015 build set up using babel and/or webpack/browserify/gulp/grunt/etc.\n\nYou can also start with [preact-boilerplate] or a [CodePen Template](http://codepen.io/developit/pen/pgaROe?editors=0010).\n\n\n### Import what you need\n\nThe `preact` module provides both named and default exports, so you can either import everything under a namespace of your choosing, or just what you need as locals:\n\n##### Named:\n\n```js\nimport { h, render, Component } from 'preact';\n\n// Tell Babel to transform JSX into h() calls:\n/** @jsx h */\n```\n\n##### Default:\n\n```js\nimport preact from 'preact';\n\n// Tell Babel to transform JSX into preact.h() calls:\n/** @jsx preact.h */\n```\n\n> Named imports work well for highly structured applications, whereas the default import is quick and never needs to be updated when using different parts of the library.\n>\n> Instead of declaring the `@jsx` pragma in your code, it's best to configure it globally in a `.babelrc`:\n>\n> **For Babel 5 and prior:**\n>\n> ```json\n> { \"jsxPragma\": \"h\" }\n> ```\n>\n> **For Babel 6:**\n>\n> ```json\n> {\n> \"plugins\": [\n> [\"transform-react-jsx\", { \"pragma\":\"h\" }]\n> ]\n> }\n> ```\n>\n> **For Babel 7:**\n>\n> ```json\n> {\n> \"plugins\": [\n> [\"@babel/plugin-transform-react-jsx\", { \"pragma\":\"h\" }]\n> ]\n> }\n> ```\n> **For using Preact along with TypeScript add to `tsconfig.json`:**\n>\n> ```json\n> {\n> \"jsx\": \"react\",\n> \"jsxFactory\": \"h\",\n> }\n> ```\n\n\n### Rendering JSX\n\nOut of the box, Preact provides an `h()` function that turns your JSX into Virtual DOM elements _([here's how](http://jasonformat.com/wtf-is-jsx))_. It also provides a `render()` function that creates a DOM tree from that Virtual DOM.\n\nTo render some JSX, just import those two functions and use them like so:\n\n```js\nimport { h, render } from 'preact';\n\nrender((\n\t
\n\t\tHello, world!\n\t\t\n\t
\n), document.body);\n```\n\nThis should seem pretty straightforward if you've used hyperscript or one of its many friends. If you're not, the short of it is that the `h()` function import gets used in the final, transpiled code as a drop in replacement for `React.createElement()`, and so needs to be imported even if you don't explicitly use it in the code you write. Also note that if you're the kind of person who likes writing your React code in \"pure JavaScript\" (you know who you are) you will need to use `h()` wherever you would otherwise use `React.createElement()`.\n\nRendering hyperscript with a virtual DOM is pointless, though. We want to render components and have them updated when data changes - that's where the power of virtual DOM diffing shines. :star2:\n\n\n### Components\n\nPreact exports a generic `Component` class, which can be extended to build encapsulated, self-updating pieces of a User Interface. Components support all of the standard React [lifecycle methods], like `shouldComponentUpdate()` and `componentWillReceiveProps()`. Providing specific implementations of these methods is the preferred mechanism for controlling _when_ and _how_ components update.\n\nComponents also have a `render()` method, but unlike React this method is passed `(props, state)` as arguments. This provides an ergonomic means to destructure `props` and `state` into local variables to be referenced from JSX.\n\nLet's take a look at a very simple `Clock` component, which shows the current time.\n\n```js\nimport { h, render, Component } from 'preact';\n\nclass Clock extends Component {\n\trender() {\n\t\tlet time = new Date();\n\t\treturn ;\n\t}\n}\n\n// render an instance of Clock into :\nrender(, document.body);\n```\n\n\nThat's great. Running this produces the following HTML DOM structure:\n\n```html\n10:28:57 PM\n```\n\nIn order to have the clock's time update every second, we need to know when `` gets mounted to the DOM. _If you've used HTML5 Custom Elements, this is similar to the `attachedCallback` and `detachedCallback` lifecycle methods._ Preact invokes the following lifecycle methods if they are defined for a Component:\n\n| Lifecycle method | When it gets called |\n|-----------------------------|--------------------------------------------------|\n| `componentWillMount` | before the component gets mounted to the DOM |\n| `componentDidMount` | after the component gets mounted to the DOM |\n| `componentWillUnmount` | prior to removal from the DOM |\n| `componentWillReceiveProps` | before new props get accepted |\n| `shouldComponentUpdate` | before `render()`. Return `false` to skip render |\n| `componentWillUpdate` | before `render()` |\n| `componentDidUpdate` | after `render()` |\n\n\n\nSo, we want to have a 1-second timer start once the Component gets added to the DOM, and stop if it is removed. We'll create the timer and store a reference to it in `componentDidMount()`, and stop the timer in `componentWillUnmount()`. On each timer tick, we'll update the component's `state` object with a new time value. Doing this will automatically re-render the component.\n\n```js\nimport { h, render, Component } from 'preact';\n\nclass Clock extends Component {\n\tconstructor() {\n\t\tsuper();\n\t\t// set initial time:\n\t\tthis.state = {\n\t\t\ttime: Date.now()\n\t\t};\n\t}\n\n\tcomponentDidMount() {\n\t\t// update time every second\n\t\tthis.timer = setInterval(() => {\n\t\t\tthis.setState({ time: Date.now() });\n\t\t}, 1000);\n\t}\n\n\tcomponentWillUnmount() {\n\t\t// stop when not renderable\n\t\tclearInterval(this.timer);\n\t}\n\n\trender(props, state) {\n\t\tlet time = new Date(state.time).toLocaleTimeString();\n\t\treturn { time };\n\t}\n}\n\n// render an instance of Clock into :\nrender(, document.body);\n```\n\nNow we have [a ticking clock](http://jsfiddle.net/developit/u9m5x0L7/embedded/result,js/)!\n\n\n### Props & State\n\nThe concept (and nomenclature) for `props` and `state` is the same as in React. `props` are passed to a component by defining attributes in JSX, `state` is internal state. Changing either triggers a re-render, though by default Preact re-renders Components asynchronously for `state` changes and synchronously for `props` changes. You can tell Preact to render `prop` changes asynchronously by setting `options.syncComponentUpdates` to `false`.\n\n\n---\n\n\n## Linked State\n\nOne area Preact takes a little further than React is in optimizing state changes. A common pattern in ES2015 React code is to use Arrow functions within a `render()` method in order to update state in response to events. Creating functions enclosed in a scope on every render is inefficient and forces the garbage collector to do more work than is necessary.\n\nOne solution to this is to bind component methods declaratively.\nHere is an example using [decko](http://git.io/decko):\n\n```js\nclass Foo extends Component {\n\t@bind\n\tupdateText(e) {\n\t\tthis.setState({ text: e.target.value });\n\t}\n\trender({ }, { text }) {\n\t\treturn ;\n\t}\n}\n```\n\nWhile this achieves much better runtime performance, it's still a lot of unnecessary code to wire up state to UI.\n\nFortunately there is a solution, in the form of a module called [linkstate](https://github.com/developit/linkstate). Calling `linkState(component, 'text')` returns a function that accepts an Event and uses its associated value to update the given property in your component's state. Calls to `linkState()` with the same arguments are cached, so there is no performance penalty. Here is the previous example rewritten using _Linked State_:\n\n```js\nimport linkState from 'linkstate';\n\nclass Foo extends Component {\n\trender({ }, { text }) {\n\t\treturn ;\n\t}\n}\n```\n\nSimple and effective. It handles linking state from any input type, or an optional second parameter can be used to explicitly provide a keypath to the new state value.\n\n> **Note:** In Preact 7 and prior, `linkState()` was built right into Component. In 8.0, it was moved to a separate module. You can restore the 7.x behavior by using linkstate as a polyfill - see [the linkstate docs](https://github.com/developit/linkstate#usage).\n\n\n\n## Examples\n\nHere is a somewhat verbose Preact `` component:\n\n```js\nclass Link extends Component {\n\trender(props, state) {\n\t\treturn {props.children};\n\t}\n}\n```\n\nSince this is ES6/ES2015, we can further simplify:\n\n```js\nclass Link extends Component {\n render({ href, children }) {\n return ;\n }\n}\n\n// or, for wide-open props support:\nclass Link extends Component {\n render(props) {\n return ;\n }\n}\n\n// or, as a stateless functional component:\nconst Link = ({ children, ...props }) => (\n { children }\n);\n```\n\n\n## Extensions\n\nIt is likely that some projects based on Preact would wish to extend Component with great new functionality.\n\nPerhaps automatic connection to stores for a Flux-like architecture, or mixed-in context bindings to make it feel more like `React.createClass()`. Just use ES2015 inheritance:\n\n```js\nclass BoundComponent extends Component {\n\tconstructor(props) {\n\t\tsuper(props);\n\t\tthis.bind();\n\t}\n\tbind() {\n\t\tthis.binds = {};\n\t\tfor (let i in this) {\n\t\t\tthis.binds[i] = this[i].bind(this);\n\t\t}\n\t}\n}\n\n// example usage\nclass Link extends BoundComponent {\n\tclick() {\n\t\topen(this.href);\n\t}\n\trender() {\n\t\tlet { click } = this.binds;\n\t\treturn { children };\n\t}\n}\n```\n\n\nThe possibilities are pretty endless here. You could even add support for rudimentary mixins:\n\n```js\nclass MixedComponent extends Component {\n\tconstructor() {\n\t\tsuper();\n\t\t(this.mixins || []).forEach( m => Object.assign(this, m) );\n\t}\n}\n```\n\n## Debug Mode\n\nYou can inspect and modify the state of your Preact UI components at runtime using the\n[React Developer Tools](https://github.com/facebook/react-devtools) browser extension.\n\n1. Install the [React Developer Tools](https://github.com/facebook/react-devtools) extension\n2. Import the \"preact/debug\" module in your app\n3. Set `process.env.NODE_ENV` to 'development'\n4. Reload and go to the 'React' tab in the browser's development tools\n\n\n```js\nimport { h, Component, render } from 'preact';\n\n// Enable debug mode. You can reduce the size of your app by only including this\n// module in development builds. eg. In Webpack, wrap this with an `if (module.hot) {...}`\n// check.\nrequire('preact/debug');\n```\n\n### Runtime Error Checking\n\nTo enable debug mode, you need to set `process.env.NODE_ENV=development`. You can do this\nwith webpack via a builtin plugin.\n\n```js\n// webpack.config.js\n\n// Set NODE_ENV=development to enable error checking\nnew webpack.DefinePlugin({\n 'process.env': {\n 'NODE_ENV': JSON.stringify('development')\n }\n});\n```\n\nWhen enabled, warnings are logged to the console when undefined components or string refs\nare detected.\n\n### Developer Tools\n\nIf you only want to include devtool integration, without runtime error checking, you can\nreplace `preact/debug` in the above example with `preact/devtools`. This option doesn't\nrequire setting `NODE_ENV=development`.\n\n\n\n## Backers\nSupport us with a monthly donation and help us continue our activities. [[Become a backer](https://opencollective.com/preact#backer)]\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n## Sponsors\nBecome a sponsor and get your logo on our README on GitHub with a link to your site. [[Become a sponsor](https://opencollective.com/preact#sponsor)]\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n## License\n\nMIT\n\n\n\n[![Preact](http://i.imgur.com/YqCHvEW.gif)](https://preactjs.com)\n\n\n[preact-compat]: https://github.com/developit/preact-compat\n[ES6 Class]: https://facebook.github.io/react/docs/reusable-components.html#es6-classes\n[Functional Components]: https://facebook.github.io/react/blog/2015/10/07/react-v0.14.html#stateless-functional-components\n[hyperscript]: https://github.com/dominictarr/hyperscript\n[preact-boilerplate]: https://github.com/developit/preact-boilerplate\n[lifecycle methods]: https://facebook.github.io/react/docs/component-specs.html\n","readmeFilename":"README.md","_id":"preact@10.0.0-beta.0","_npmVersion":"6.5.0","_nodeVersion":"11.7.0","_npmUser":{"name":"marvinhagemeister","email":"marvin@marvinhagemeister.de"},"dist":{"integrity":"sha512-BKd77y7ZpPLybjtM35DJtzXj+sxlAt29MCMGOJnSrsv1jt30aE/wS9qoU9nL8ih+yhal3B22mGAvuh2mGLAFMg==","shasum":"8d53947b167449c09a678fefc2085c0f56ed34bd","tarball":"http://localhost:4545/npm/registry/preact/preact-10.0.0-beta.0.tgz","fileCount":69,"unpackedSize":607724,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJct11cCRA9TVsSAnZWagAAdx0P/R9ykhcD0MXraF4y9HJ4\nxwyzRlzUe2btP0ybfOTXQJHiVyZIQdg09dQNok8sTDtFisFW4HGXkYg3S45K\nMlhrriJ1seAYjDdzBZRUXLH5M/rV3RjdJxltJPPdsLg0Tq73gIxbeo1rKOUv\nMvB2eWk8DgQJZAD1u+2tMCRkUJaKZRWisLxFgYNkMBZx8kWDs9Z0n4zRSu27\niEK84kToMaMl8uMq/bdwKdgfklx9Bs3b7v9dzLIG/UxTd1Sl7uDsZoqRxLw2\nbAzeY+1jJLXwmvjuNMzMPI7Ov0HW4yh2B0nZGOs/V0jTKggATxcyAgqczcWU\nV1JSRAfjnu+Gfrn5mXTeBriJjmSf3X5cLjB9Wlrp1GqtuH33/Owx3HVXUuwP\n4PGdQ2427Qa/bPEdbn/L3H7DHeibFYHi2Yt3/jq10Pu3NLmwrgJg92rEOsrc\nfu2Kwo4wRtA+fF5fhl+d4hFmhXZ7lGW/UFDXvg1xP/Rtk0HqjfLL9EdfHB4s\n7UiOJUMNs3vGqpwXQ1UXusy+ZbBR/Ivharb2a7IpfZaegcRB6zhLZmwlU+Dm\n/NP+ruP4sV/ruUchTpIxtCA3BV70eBxg0GHx5l4A4abvpeOoqhk+6SVIP/80\nkAh/jonuQz2Yh2VNoGB0//Pj3Pir3Y3xyOfcAcZVqox5Jb6FnKNkT0pTmv0Q\nCQX3\r\n=w6E+\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIByCQbfDt23OcyO+xCsISi/ETGxqLaU11tovOvqY2cY4AiEA6APokdf28Xw0XlnUGk3h8mLr0X1w27vNgzoYatZ0pZ4="}]},"maintainers":[{"email":"jason@developit.ca","name":"developit"},{"email":"ulliftw@gmail.com","name":"harmony"},{"email":"luke@lukeed.com","name":"lukeed"},{"email":"marvin@marvinhagemeister.de","name":"marvinhagemeister"},{"email":"prateek89born@gmail.com","name":"prateekbh"},{"email":"hello@preactjs.com","name":"preactjs"},{"email":"allamsetty.anup@gmail.com","name":"reznord"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/preact_10.0.0-beta.0_1555520859824_0.17721868875856028"},"_hasShrinkwrap":false},"10.0.0-beta.1":{"name":"preact","amdName":"preact","version":"10.0.0-beta.1","private":false,"description":"Fast 3kb React-compatible Virtual DOM library.","main":"dist/preact.js","module":"dist/preact.module.js","umd:main":"dist/preact.umd.js","source":"src/index.js","license":"MIT","types":"src/index.d.ts","scripts":{"build":"npm-run-all --parallel build:*","build:core":"microbundle build --raw","build:debug":"microbundle build --raw --cwd debug","build:hooks":"microbundle build --raw --cwd hooks","build:test-utils":"microbundle build --raw --cwd test-utils","build:compat":"microbundle build --raw --cwd compat --globals 'preact/hooks=preactHooks'","dev":"microbundle watch --raw --format cjs,umd","dev:hooks":"microbundle watch --raw --format cjs --cwd hooks","test":"npm-run-all lint build --parallel test:mocha test:karma test:ts","test:flow":"flow check","test:ts":"tsc -p test/ts/ && mocha --require babel-register test/ts/**/*-test.js","test:mocha":"mocha --recursive --require babel-register test/shared test/node","test:karma":"cross-env COVERAGE=true karma start karma.conf.js --single-run","test:mocha:watch":"npm run test:mocha -- --watch","test:karma:watch":"karma start karma.conf.js --no-single-run","test:karma:hooks":"cross-env COVERAGE=false karma start karma.conf.js --grep=hooks/test/browser/**.js --no-single-run","test:karma:test-utils":"cross-env PERFORMANCE=false COVERAGE=false karma start karma.conf.js --grep=test-utils/test/shared/**.js --no-single-run","test:karma:bench":"cross-env PERFORMANCE=true COVERAGE=false karma start karma.conf.js --grep=test/benchmarks/**.js --single-run","benchmark":"npm run test:karma:bench -- no-single-run","test:size":"bundlesize","lint":"eslint src test","postinstall":"node -e \"console.log('\\u001b[35m\\u001b[1mLove Preact? You can now donate to our open collective:\\u001b[22m\\u001b[39m\\n > \\u001b[34mhttps://opencollective.com/preact/donate\\u001b[0m')\""},"eslintConfig":{"extends":"developit","settings":{"react":{"pragma":"createElement"}},"rules":{"prefer-rest-params":0,"prefer-spread":0,"no-cond-assign":0,"react/jsx-no-bind":0,"react/prefer-stateless-function":0,"react/sort-comp":0,"jest/valid-expect":0,"jest/no-disabled-tests":0,"react/no-find-dom-node":0}},"keywords":["preact","react","virtual dom","vdom","components","virtual","dom"],"authors":["Jason Miller "],"repository":{"type":"git","url":"git+https://github.com/developit/preact.git"},"bugs":{"url":"https://github.com/developit/preact/issues"},"homepage":"https://github.com/developit/preact","devDependencies":{"@types/chai":"^4.1.2","@types/mocha":"^5.0.0","@types/node":"^10.5.2","babel-cli":"^6.24.1","babel-core":"^6.26.3","babel-loader":"^7.1.5","babel-plugin-istanbul":"^5.0.1","babel-plugin-transform-object-rest-spread":"^6.23.0","babel-plugin-transform-react-jsx":"^6.24.1","babel-preset-env":"^1.6.1","benchmark":"^2.1.4","bundlesize":"^0.17.0","chai":"^4.1.2","coveralls":"^3.0.0","cross-env":"^5.2.0","diff":"^3.5.0","eslint":"^5.1.0","eslint-config-developit":"^1.1.1","flow-bin":"^0.79.1","karma":"^3.0.0","karma-babel-preprocessor":"^7.0.0","karma-chai-sinon":"^0.1.5","karma-chrome-launcher":"^2.2.0","karma-coverage":"^1.1.2","karma-mocha":"^1.3.0","karma-mocha-reporter":"^2.2.5","karma-sauce-launcher":"^1.2.0","karma-sinon":"^1.0.5","karma-source-map-support":"^1.3.0","karma-sourcemap-loader":"^0.3.7","karma-webpack":"^3.0.5","lodash":"^4.17.10","microbundle":"^0.11.0","mocha":"^5.2.0","npm-run-all":"^4.0.0","prop-types":"^15.7.2","sinon":"^6.1.3","sinon-chai":"^3.0.0","typescript":"^3.0.1","webpack":"^4.3.0"},"bundlesize":[{"path":"./dist/preact.js","maxSize":"3Kb"}],"gitHead":"e206b07ad2d38958eaac0f3179d4bd8826fd92d0","readme":"
Fast 3kB alternative to React with the same modern API.
\n\n**All the power of Virtual DOM components, without the overhead:**\n\n- Familiar React API & patterns: [ES6 Class] and [Functional Components]\n- Extensive React compatibility via a simple [preact-compat] alias\n- Everything you need: JSX, VDOM, React DevTools, HMR, SSR..\n- A highly optimized diff algorithm and seamless Server Side Rendering\n- Transparent asynchronous rendering with a pluggable scheduler\n- 🆕💥 **Instant no-config app bundling with [Preact CLI](https://github.com/developit/preact-cli)**\n\n### 💁 More information at the [Preact Website ➞](https://preactjs.com)\n\n\n---\n\n\n\n- [Demos](#demos)\n- [Libraries & Add-ons](#libraries--add-ons)\n- [Getting Started](#getting-started)\n\t- [Import what you need](#import-what-you-need)\n\t- [Rendering JSX](#rendering-jsx)\n\t- [Components](#components)\n\t- [Props & State](#props--state)\n- [Linked State](#linked-state)\n- [Examples](#examples)\n- [Extensions](#extensions)\n- [Debug Mode](#debug-mode)\n- [Backers](#backers)\n- [Sponsors](#sponsors)\n- [License](#license)\n\n\n\n\n# Preact\n\n[![npm](https://img.shields.io/npm/v/preact.svg)](http://npm.im/preact)\n[![CDNJS](https://img.shields.io/cdnjs/v/preact.svg)](https://cdnjs.com/libraries/preact)\n[![Preact Slack Community](https://preact-slack.now.sh/badge.svg)](https://preact-slack.now.sh)\n[![OpenCollective Backers](https://opencollective.com/preact/backers/badge.svg)](#backers)\n[![OpenCollective Sponsors](https://opencollective.com/preact/sponsors/badge.svg)](#sponsors)\n[![travis](https://travis-ci.org/developit/preact.svg?branch=master)](https://travis-ci.org/developit/preact)\n[![coveralls](https://img.shields.io/coveralls/developit/preact/master.svg)](https://coveralls.io/github/developit/preact)\n[![gzip size](http://img.badgesize.io/https://unpkg.com/preact/dist/preact.min.js?compression=gzip)](https://unpkg.com/preact/dist/preact.min.js)\n[![install size](https://packagephobia.now.sh/badge?p=preact)](https://packagephobia.now.sh/result?p=preact)\n\nPreact supports modern browsers and IE9+:\n\n[![Browsers](https://saucelabs.com/browser-matrix/preact.svg)](https://saucelabs.com/u/preact)\n\n\n---\n\n\n## Demos\n\n#### Real-World Apps\n\n- [**Preact Hacker News**](https://hn.kristoferbaxter.com) _([GitHub Project](https://github.com/kristoferbaxter/preact-hn))_\n- [**Play.cash**](https://play.cash) :notes: _([GitHub Project](https://github.com/feross/play.cash))_\n- [**BitMidi**](https://bitmidi.com/) 🎹 Wayback machine for free MIDI files _([GitHub Project](https://github.com/feross/bitmidi.com))_\n- [**Ultimate Guitar**](https://www.ultimate-guitar.com) 🎸speed boosted by Preact.\n- [**ESBench**](http://esbench.com) is built using Preact.\n- [**BigWebQuiz**](https://bigwebquiz.com) _([GitHub Project](https://github.com/jakearchibald/big-web-quiz))_\n- [**Nectarine.rocks**](http://nectarine.rocks) _([GitHub Project](https://github.com/developit/nectarine))_ :peach:\n- [**TodoMVC**](https://preact-todomvc.surge.sh) _([GitHub Project](https://github.com/developit/preact-todomvc))_\n- [**OSS.Ninja**](https://oss.ninja) _([GitHub Project](https://github.com/developit/oss.ninja))_\n- [**GuriVR**](https://gurivr.com) _([GitHub Project](https://github.com/opennewslabs/guri-vr))_\n- [**Color Picker**](https://colors.now.sh) _([GitHub Project](https://github.com/lukeed/colors-app))_ :art:\n- [**Offline Gallery**](https://use-the-platform.com/offline-gallery/) _([GitHub Project](https://github.com/vaneenige/offline-gallery/))_ :balloon:\n- [**Periodic Weather**](https://use-the-platform.com/periodic-weather/) _([GitHub Project](https://github.com/vaneenige/periodic-weather/))_ :sunny:\n- [**Rugby News Board**](http://nbrugby.com) _[(GitHub Project)](https://github.com/rugby-board/rugby-board-node)_\n- [**Preact Gallery**](https://preact.gallery/) an 8KB photo gallery PWA built using Preact.\n- [**Rainbow Explorer**](https://use-the-platform.com/rainbow-explorer/) Preact app to translate real life color to digital color _([Github project](https://github.com/vaneenige/rainbow-explorer))_.\n- [**YASCC**](https://carlosqsilva.github.io/YASCC/#/) Yet Another SoundCloud Client _([Github project](https://github.com/carlosqsilva/YASCC))_.\n- [**Journalize**](https://preact-journal.herokuapp.com/) 14k offline-capable journaling PWA using preact. _([Github project](https://github.com/jpodwys/preact-journal))_.\n\n\n#### Runnable Examples\n\n- [**Flickr Browser**](http://codepen.io/developit/full/VvMZwK/) (@ CodePen)\n- [**Animating Text**](http://codepen.io/developit/full/LpNOdm/) (@ CodePen)\n- [**60FPS Rainbow Spiral**](http://codepen.io/developit/full/xGoagz/) (@ CodePen)\n- [**Simple Clock**](http://jsfiddle.net/developit/u9m5x0L7/embedded/result,js/) (@ JSFiddle)\n- [**3D + ThreeJS**](http://codepen.io/developit/pen/PPMNjd?editors=0010) (@ CodePen)\n- [**Stock Ticker**](http://codepen.io/developit/pen/wMYoBb?editors=0010) (@ CodePen)\n- [*Create your Own!*](https://jsfiddle.net/developit/rs6zrh5f/embedded/result/) (@ JSFiddle)\n\n### Starter Projects\n\n- [**Preact Boilerplate**](https://preact-boilerplate.surge.sh) _([GitHub Project](https://github.com/developit/preact-boilerplate))_ :zap:\n- [**Preact Offline Starter**](https://preact-starter.now.sh) _([GitHub Project](https://github.com/lukeed/preact-starter))_ :100:\n- [**Preact PWA**](https://preact-pwa-yfxiijbzit.now.sh/) _([GitHub Project](https://github.com/ezekielchentnik/preact-pwa))_ :hamburger:\n- [**Parcel + Preact + Unistore Starter**](https://github.com/hwclass/parcel-preact-unistore-starter)\n- [**Preact Mobx Starter**](https://awaw00.github.io/preact-mobx-starter/) _([GitHub Project](https://github.com/awaw00/preact-mobx-starter))_ :sunny:\n- [**Preact Redux Example**](https://github.com/developit/preact-redux-example) :star:\n- [**Preact Redux/RxJS/Reselect Example**](https://github.com/continuata/preact-seed)\n- [**V2EX Preact**](https://github.com/yanni4night/v2ex-preact)\n- [**Preact Coffeescript**](https://github.com/crisward/preact-coffee)\n- [**Preact + TypeScript + Webpack**](https://github.com/k1r0s/bleeding-preact-starter)\n- [**0 config => Preact + Poi**](https://github.com/k1r0s/preact-poi-starter)\n- [**Zero configuration => Preact + Typescript + Parcel**](https://github.com/aalises/preact-typescript-parcel-starter)\n\n---\n\n## Libraries & Add-ons\n\n- :raised_hands: [**preact-compat**](https://git.io/preact-compat): use any React library with Preact *([full example](http://git.io/preact-compat-example))*\n- :twisted_rightwards_arrows: [**preact-context**](https://github.com/valotas/preact-context): React's `createContext` api for Preact\n- :page_facing_up: [**preact-render-to-string**](https://git.io/preact-render-to-string): Universal rendering.\n- :eyes: [**preact-render-spy**](https://github.com/mzgoddard/preact-render-spy): Enzyme-lite: Renderer with access to the produced virtual dom for testing.\n- :loop: [**preact-render-to-json**](https://git.io/preact-render-to-json): Render for Jest Snapshot testing.\n- :earth_americas: [**preact-router**](https://git.io/preact-router): URL routing for your components\n- :bookmark_tabs: [**preact-markup**](https://git.io/preact-markup): Render HTML & Custom Elements as JSX & Components\n- :satellite: [**preact-portal**](https://git.io/preact-portal): Render Preact components into (a) SPACE :milky_way:\n- :pencil: [**preact-richtextarea**](https://git.io/preact-richtextarea): Simple HTML editor component\n- :bookmark: [**preact-token-input**](https://github.com/developit/preact-token-input): Text field that tokenizes input, for things like tags\n- :card_index: [**preact-virtual-list**](https://github.com/developit/preact-virtual-list): Easily render lists with millions of rows ([demo](https://jsfiddle.net/developit/qqan9pdo/))\n- :repeat: [**preact-cycle**](https://git.io/preact-cycle): Functional-reactive paradigm for Preact\n- :triangular_ruler: [**preact-layout**](https://download.github.io/preact-layout/): Small and simple layout library\n- :thought_balloon: [**preact-socrates**](https://github.com/matthewmueller/preact-socrates): Preact plugin for [Socrates](http://github.com/matthewmueller/socrates)\n- :rowboat: [**preact-flyd**](https://github.com/xialvjun/preact-flyd): Use [flyd](https://github.com/paldepind/flyd) FRP streams in Preact + JSX\n- :speech_balloon: [**preact-i18nline**](https://github.com/download/preact-i18nline): Integrates the ecosystem around [i18n-js](https://github.com/everydayhero/i18n-js) with Preact via [i18nline](https://github.com/download/i18nline).\n- :microscope: [**preact-jsx-chai**](https://git.io/preact-jsx-chai): JSX assertion testing _(no DOM, right in Node)_\n- :tophat: [**preact-classless-component**](https://github.com/ld0rman/preact-classless-component): create preact components without the class keyword\n- :hammer: [**preact-hyperscript**](https://github.com/queckezz/preact-hyperscript): Hyperscript-like syntax for creating elements\n- :white_check_mark: [**shallow-compare**](https://github.com/tkh44/shallow-compare): simplified `shouldComponentUpdate` helper.\n- :shaved_ice: [**preact-codemod**](https://github.com/vutran/preact-codemod): Transform your React code to Preact.\n- :construction_worker: [**preact-helmet**](https://github.com/download/preact-helmet): A document head manager for Preact\n- :necktie: [**preact-delegate**](https://github.com/NekR/preact-delegate): Delegate DOM events\n- :art: [**preact-stylesheet-decorator**](https://github.com/k1r0s/preact-stylesheet-decorator): Add Scoped Stylesheets to your Preact Components\n- :electric_plug: [**preact-routlet**](https://github.com/k1r0s/preact-routlet): Simple `Component Driven` Routing for Preact using ES7 Decorators\n- :fax: [**preact-bind-group**](https://github.com/k1r0s/preact-bind-group): Preact Forms made easy, Group Events into a Single Callback\n- :hatching_chick: [**preact-habitat**](https://github.com/zouhir/preact-habitat): Declarative Preact widgets renderer in any CMS or DOM host ([demo](https://codepen.io/zouhir/pen/brrOPB)).\n- :tada: [**proppy-preact**](https://github.com/fahad19/proppy): Functional props composition for Preact components\n\n#### UI Component Libraries\n\n> Want to prototype something or speed up your development? Try one of these toolkits:\n\n- [**preact-material-components**](https://github.com/prateekbh/preact-material-components): Material Design Components for Preact ([website](https://material.preactjs.com/))\n- [**preact-mdc**](https://github.com/BerndWessels/preact-mdc): Material Design Components for Preact ([demo](https://github.com/BerndWessels/preact-mdc-demo))\n- [**preact-mui**](https://git.io/v1aVO): The MUI CSS Preact library.\n- [**preact-photon**](https://git.io/preact-photon): build beautiful desktop UI with [photon](http://photonkit.com)\n- [**preact-mdl**](https://git.io/preact-mdl): [Material Design Lite](https://getmdl.io) for Preact\n- [**preact-weui**](https://github.com/afeiship/preact-weui): [Weui](https://github.com/afeiship/preact-weui) for Preact\n\n\n---\n\n## Getting Started\n\n> 💁 _**Note:** You [don't need ES2015 to use Preact](https://github.com/developit/preact-in-es3)... but give it a try!_\n\nThe easiest way to get started with Preact is to install [Preact CLI](https://github.com/developit/preact-cli). This simple command-line tool wraps up the best possible Webpack and Babel setup for you, and even keeps you up-to-date as the underlying tools change. Best of all, it's easy to understand! It builds your app in a single command (`preact build`), doesn't need any configuration, and bakes in best-practises 🙌.\n\nThe following guide assumes you have some sort of ES2015 build set up using babel and/or webpack/browserify/gulp/grunt/etc.\n\nYou can also start with [preact-boilerplate] or a [CodePen Template](http://codepen.io/developit/pen/pgaROe?editors=0010).\n\n\n### Import what you need\n\nThe `preact` module provides both named and default exports, so you can either import everything under a namespace of your choosing, or just what you need as locals:\n\n##### Named:\n\n```js\nimport { h, render, Component } from 'preact';\n\n// Tell Babel to transform JSX into h() calls:\n/** @jsx h */\n```\n\n##### Default:\n\n```js\nimport preact from 'preact';\n\n// Tell Babel to transform JSX into preact.h() calls:\n/** @jsx preact.h */\n```\n\n> Named imports work well for highly structured applications, whereas the default import is quick and never needs to be updated when using different parts of the library.\n>\n> Instead of declaring the `@jsx` pragma in your code, it's best to configure it globally in a `.babelrc`:\n>\n> **For Babel 5 and prior:**\n>\n> ```json\n> { \"jsxPragma\": \"h\" }\n> ```\n>\n> **For Babel 6:**\n>\n> ```json\n> {\n> \"plugins\": [\n> [\"transform-react-jsx\", { \"pragma\":\"h\" }]\n> ]\n> }\n> ```\n>\n> **For Babel 7:**\n>\n> ```json\n> {\n> \"plugins\": [\n> [\"@babel/plugin-transform-react-jsx\", { \"pragma\":\"h\" }]\n> ]\n> }\n> ```\n> **For using Preact along with TypeScript add to `tsconfig.json`:**\n>\n> ```json\n> {\n> \"jsx\": \"react\",\n> \"jsxFactory\": \"h\",\n> }\n> ```\n\n\n### Rendering JSX\n\nOut of the box, Preact provides an `h()` function that turns your JSX into Virtual DOM elements _([here's how](http://jasonformat.com/wtf-is-jsx))_. It also provides a `render()` function that creates a DOM tree from that Virtual DOM.\n\nTo render some JSX, just import those two functions and use them like so:\n\n```js\nimport { h, render } from 'preact';\n\nrender((\n\t
\n\t\tHello, world!\n\t\t\n\t
\n), document.body);\n```\n\nThis should seem pretty straightforward if you've used hyperscript or one of its many friends. If you're not, the short of it is that the `h()` function import gets used in the final, transpiled code as a drop in replacement for `React.createElement()`, and so needs to be imported even if you don't explicitly use it in the code you write. Also note that if you're the kind of person who likes writing your React code in \"pure JavaScript\" (you know who you are) you will need to use `h()` wherever you would otherwise use `React.createElement()`.\n\nRendering hyperscript with a virtual DOM is pointless, though. We want to render components and have them updated when data changes - that's where the power of virtual DOM diffing shines. :star2:\n\n\n### Components\n\nPreact exports a generic `Component` class, which can be extended to build encapsulated, self-updating pieces of a User Interface. Components support all of the standard React [lifecycle methods], like `shouldComponentUpdate()` and `componentWillReceiveProps()`. Providing specific implementations of these methods is the preferred mechanism for controlling _when_ and _how_ components update.\n\nComponents also have a `render()` method, but unlike React this method is passed `(props, state)` as arguments. This provides an ergonomic means to destructure `props` and `state` into local variables to be referenced from JSX.\n\nLet's take a look at a very simple `Clock` component, which shows the current time.\n\n```js\nimport { h, render, Component } from 'preact';\n\nclass Clock extends Component {\n\trender() {\n\t\tlet time = new Date();\n\t\treturn ;\n\t}\n}\n\n// render an instance of Clock into :\nrender(, document.body);\n```\n\n\nThat's great. Running this produces the following HTML DOM structure:\n\n```html\n10:28:57 PM\n```\n\nIn order to have the clock's time update every second, we need to know when `` gets mounted to the DOM. _If you've used HTML5 Custom Elements, this is similar to the `attachedCallback` and `detachedCallback` lifecycle methods._ Preact invokes the following lifecycle methods if they are defined for a Component:\n\n| Lifecycle method | When it gets called |\n|-----------------------------|--------------------------------------------------|\n| `componentWillMount` | before the component gets mounted to the DOM |\n| `componentDidMount` | after the component gets mounted to the DOM |\n| `componentWillUnmount` | prior to removal from the DOM |\n| `componentWillReceiveProps` | before new props get accepted |\n| `shouldComponentUpdate` | before `render()`. Return `false` to skip render |\n| `componentWillUpdate` | before `render()` |\n| `componentDidUpdate` | after `render()` |\n\n\n\nSo, we want to have a 1-second timer start once the Component gets added to the DOM, and stop if it is removed. We'll create the timer and store a reference to it in `componentDidMount()`, and stop the timer in `componentWillUnmount()`. On each timer tick, we'll update the component's `state` object with a new time value. Doing this will automatically re-render the component.\n\n```js\nimport { h, render, Component } from 'preact';\n\nclass Clock extends Component {\n\tconstructor() {\n\t\tsuper();\n\t\t// set initial time:\n\t\tthis.state = {\n\t\t\ttime: Date.now()\n\t\t};\n\t}\n\n\tcomponentDidMount() {\n\t\t// update time every second\n\t\tthis.timer = setInterval(() => {\n\t\t\tthis.setState({ time: Date.now() });\n\t\t}, 1000);\n\t}\n\n\tcomponentWillUnmount() {\n\t\t// stop when not renderable\n\t\tclearInterval(this.timer);\n\t}\n\n\trender(props, state) {\n\t\tlet time = new Date(state.time).toLocaleTimeString();\n\t\treturn { time };\n\t}\n}\n\n// render an instance of Clock into :\nrender(, document.body);\n```\n\nNow we have [a ticking clock](http://jsfiddle.net/developit/u9m5x0L7/embedded/result,js/)!\n\n\n### Props & State\n\nThe concept (and nomenclature) for `props` and `state` is the same as in React. `props` are passed to a component by defining attributes in JSX, `state` is internal state. Changing either triggers a re-render, though by default Preact re-renders Components asynchronously for `state` changes and synchronously for `props` changes. You can tell Preact to render `prop` changes asynchronously by setting `options.syncComponentUpdates` to `false`.\n\n\n---\n\n\n## Linked State\n\nOne area Preact takes a little further than React is in optimizing state changes. A common pattern in ES2015 React code is to use Arrow functions within a `render()` method in order to update state in response to events. Creating functions enclosed in a scope on every render is inefficient and forces the garbage collector to do more work than is necessary.\n\nOne solution to this is to bind component methods declaratively.\nHere is an example using [decko](http://git.io/decko):\n\n```js\nclass Foo extends Component {\n\t@bind\n\tupdateText(e) {\n\t\tthis.setState({ text: e.target.value });\n\t}\n\trender({ }, { text }) {\n\t\treturn ;\n\t}\n}\n```\n\nWhile this achieves much better runtime performance, it's still a lot of unnecessary code to wire up state to UI.\n\nFortunately there is a solution, in the form of a module called [linkstate](https://github.com/developit/linkstate). Calling `linkState(component, 'text')` returns a function that accepts an Event and uses its associated value to update the given property in your component's state. Calls to `linkState()` with the same arguments are cached, so there is no performance penalty. Here is the previous example rewritten using _Linked State_:\n\n```js\nimport linkState from 'linkstate';\n\nclass Foo extends Component {\n\trender({ }, { text }) {\n\t\treturn ;\n\t}\n}\n```\n\nSimple and effective. It handles linking state from any input type, or an optional second parameter can be used to explicitly provide a keypath to the new state value.\n\n> **Note:** In Preact 7 and prior, `linkState()` was built right into Component. In 8.0, it was moved to a separate module. You can restore the 7.x behavior by using linkstate as a polyfill - see [the linkstate docs](https://github.com/developit/linkstate#usage).\n\n\n\n## Examples\n\nHere is a somewhat verbose Preact `` component:\n\n```js\nclass Link extends Component {\n\trender(props, state) {\n\t\treturn {props.children};\n\t}\n}\n```\n\nSince this is ES6/ES2015, we can further simplify:\n\n```js\nclass Link extends Component {\n render({ href, children }) {\n return ;\n }\n}\n\n// or, for wide-open props support:\nclass Link extends Component {\n render(props) {\n return ;\n }\n}\n\n// or, as a stateless functional component:\nconst Link = ({ children, ...props }) => (\n { children }\n);\n```\n\n\n## Extensions\n\nIt is likely that some projects based on Preact would wish to extend Component with great new functionality.\n\nPerhaps automatic connection to stores for a Flux-like architecture, or mixed-in context bindings to make it feel more like `React.createClass()`. Just use ES2015 inheritance:\n\n```js\nclass BoundComponent extends Component {\n\tconstructor(props) {\n\t\tsuper(props);\n\t\tthis.bind();\n\t}\n\tbind() {\n\t\tthis.binds = {};\n\t\tfor (let i in this) {\n\t\t\tthis.binds[i] = this[i].bind(this);\n\t\t}\n\t}\n}\n\n// example usage\nclass Link extends BoundComponent {\n\tclick() {\n\t\topen(this.href);\n\t}\n\trender() {\n\t\tlet { click } = this.binds;\n\t\treturn { children };\n\t}\n}\n```\n\n\nThe possibilities are pretty endless here. You could even add support for rudimentary mixins:\n\n```js\nclass MixedComponent extends Component {\n\tconstructor() {\n\t\tsuper();\n\t\t(this.mixins || []).forEach( m => Object.assign(this, m) );\n\t}\n}\n```\n\n## Debug Mode\n\nYou can inspect and modify the state of your Preact UI components at runtime using the\n[React Developer Tools](https://github.com/facebook/react-devtools) browser extension.\n\n1. Install the [React Developer Tools](https://github.com/facebook/react-devtools) extension\n2. Import the \"preact/debug\" module in your app\n3. Set `process.env.NODE_ENV` to 'development'\n4. Reload and go to the 'React' tab in the browser's development tools\n\n\n```js\nimport { h, Component, render } from 'preact';\n\n// Enable debug mode. You can reduce the size of your app by only including this\n// module in development builds. eg. In Webpack, wrap this with an `if (module.hot) {...}`\n// check.\nrequire('preact/debug');\n```\n\n### Runtime Error Checking\n\nTo enable debug mode, you need to set `process.env.NODE_ENV=development`. You can do this\nwith webpack via a builtin plugin.\n\n```js\n// webpack.config.js\n\n// Set NODE_ENV=development to enable error checking\nnew webpack.DefinePlugin({\n 'process.env': {\n 'NODE_ENV': JSON.stringify('development')\n }\n});\n```\n\nWhen enabled, warnings are logged to the console when undefined components or string refs\nare detected.\n\n### Developer Tools\n\nIf you only want to include devtool integration, without runtime error checking, you can\nreplace `preact/debug` in the above example with `preact/devtools`. This option doesn't\nrequire setting `NODE_ENV=development`.\n\n\n\n## Backers\nSupport us with a monthly donation and help us continue our activities. [[Become a backer](https://opencollective.com/preact#backer)]\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n## Sponsors\nBecome a sponsor and get your logo on our README on GitHub with a link to your site. [[Become a sponsor](https://opencollective.com/preact#sponsor)]\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n## License\n\nMIT\n\n\n\n[![Preact](http://i.imgur.com/YqCHvEW.gif)](https://preactjs.com)\n\n\n[preact-compat]: https://github.com/developit/preact-compat\n[ES6 Class]: https://facebook.github.io/react/docs/reusable-components.html#es6-classes\n[Functional Components]: https://facebook.github.io/react/blog/2015/10/07/react-v0.14.html#stateless-functional-components\n[hyperscript]: https://github.com/dominictarr/hyperscript\n[preact-boilerplate]: https://github.com/developit/preact-boilerplate\n[lifecycle methods]: https://facebook.github.io/react/docs/component-specs.html\n","readmeFilename":"README.md","_id":"preact@10.0.0-beta.1","_npmVersion":"6.5.0","_nodeVersion":"11.7.0","_npmUser":{"name":"marvinhagemeister","email":"marvin@marvinhagemeister.de"},"dist":{"integrity":"sha512-1uhj3JXOEzEPUof5t/iQW5heEvTOpexwS0FLAjJQfgfT8OCXICyzI2TwkYyFJ+W9q9GsDmhZgFagH2G0akFveQ==","shasum":"f7d524668db72ed74e99d447f09600fa4db0b186","tarball":"http://localhost:4545/npm/registry/preact/preact-10.0.0-beta.1.tgz","fileCount":69,"unpackedSize":613790,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcy1e2CRA9TVsSAnZWagAAzB4P/RxJa7BK36cY+smFZSRU\ndGddJ0hU1LEOSfB7vVUa15okGJV7aGM/pn4UyFwGWYnqudpNHWajmcx+fb2q\nAFd5nACagXU7B/de0GN2Zpd8/5Mon0DImCZnnSKj2PErIRyvMMcPd1zQNkqZ\nVsP6PBgsXWdYxnGDQqce1sDe3jRdiOi3L+rn3iEkYlOG0BWygD/8l5fM/WZ/\nXlfUX1pIJlg9MPqC2lBv1VisizAgTznRUUxE8Lr56Q75morP8ORYfp0u4PNf\nXyxXOph5TMWNlzKnFanWZuHelKy6uu3W5C1sILkEhF4q/XuFRIcJBwBpW+5H\nlkOt6QYFb/yinRY8eUM4jeot6BKpntBaKWFIa2PZsmfkc4Dr7b8hYvi7irnX\nDg/QQV63bkIsY/+kaNU7b5qRSixA0CkqGJpxe+O8IxLbC2jg4tvtqaztrdFZ\niP1QZxqq8U7IQ3Wty7Bty75DnmSH5p9NYTXc0glao1hS5vIikI5fOe1RndA1\nNmJ3DyDBdgZuLvkT20Ilvoe/7WWD+SAEZFodg0CznN890/7iIm/8awbGjiEa\n05ZIN+X70sz079jGnnf5gzsTzXcans4DuzUVC2wKCOwcdK1jwImCYjhSq/TU\nFescKM9jBO0svbJaifk1c7qcevRz6TCfKooVivx+EITJs67JxWlqMQ+1VtKN\nrcD6\r\n=CamB\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD1MgDLzNT2Bl0BggTAQVhdtzKddWUv1260ZtzzUMHNwQIhANr79DGTo0dlg7VYDwDJX8q1BxUjqEC4/URhw4uJ7W6c"}]},"maintainers":[{"email":"jason@developit.ca","name":"developit"},{"email":"ulliftw@gmail.com","name":"harmony"},{"email":"luke@lukeed.com","name":"lukeed"},{"email":"marvin@marvinhagemeister.de","name":"marvinhagemeister"},{"email":"prateek89born@gmail.com","name":"prateekbh"},{"email":"hello@preactjs.com","name":"preactjs"},{"email":"allamsetty.anup@gmail.com","name":"reznord"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/preact_10.0.0-beta.1_1556830134309_0.15676413096740238"},"_hasShrinkwrap":false},"10.0.0-beta.2":{"name":"preact","amdName":"preact","version":"10.0.0-beta.2","private":false,"description":"Fast 3kb React-compatible Virtual DOM library.","main":"dist/preact.js","module":"dist/preact.module.js","umd:main":"dist/preact.umd.js","source":"src/index.js","license":"MIT","types":"src/index.d.ts","scripts":{"build":"npm-run-all --parallel build:*","build:core":"microbundle build --raw","build:debug":"microbundle build --raw --cwd debug","build:hooks":"microbundle build --raw --cwd hooks","build:test-utils":"microbundle build --raw --cwd test-utils","build:compat":"microbundle build --raw --cwd compat --globals 'preact/hooks=preactHooks'","dev":"microbundle watch --raw --format cjs,umd","dev:hooks":"microbundle watch --raw --format cjs --cwd hooks","test":"npm-run-all lint build --parallel test:mocha test:karma test:ts","test:flow":"flow check","test:ts":"tsc -p test/ts/ && mocha --require babel-register test/ts/**/*-test.js","test:mocha":"mocha --recursive --require babel-register test/shared test/node","test:karma":"cross-env COVERAGE=true karma start karma.conf.js --single-run","test:mocha:watch":"npm run test:mocha -- --watch","test:karma:watch":"karma start karma.conf.js --no-single-run","test:karma:hooks":"cross-env COVERAGE=false karma start karma.conf.js --grep=hooks/test/browser/**.js --no-single-run","test:karma:test-utils":"cross-env PERFORMANCE=false COVERAGE=false karma start karma.conf.js --grep=test-utils/test/shared/**.js --no-single-run","test:karma:bench":"cross-env PERFORMANCE=true COVERAGE=false karma start karma.conf.js --grep=test/benchmarks/**.js --single-run","benchmark":"npm run test:karma:bench -- no-single-run","lint":"eslint src test","postinstall":"node -e \"console.log('\\u001b[35m\\u001b[1mLove Preact? You can now donate to our open collective:\\u001b[22m\\u001b[39m\\n > \\u001b[34mhttps://opencollective.com/preact/donate\\u001b[0m')\""},"eslintConfig":{"extends":"developit","settings":{"react":{"pragma":"createElement"}},"rules":{"prefer-rest-params":0,"prefer-spread":0,"no-cond-assign":0,"react/jsx-no-bind":0,"react/prefer-stateless-function":0,"react/sort-comp":0,"jest/valid-expect":0,"jest/no-disabled-tests":0,"react/no-find-dom-node":0}},"keywords":["preact","react","virtual dom","vdom","components","virtual","dom"],"authors":["Jason Miller "],"repository":{"type":"git","url":"git+https://github.com/preactjs/preact.git"},"bugs":{"url":"https://github.com/preactjs/preact/issues"},"homepage":"https://github.com/preactjs/preact","devDependencies":{"@types/chai":"^4.1.2","@types/mocha":"^5.0.0","@types/node":"^10.5.2","babel-cli":"6.26.0","babel-core":"6.26.3","babel-loader":"7.1.5","babel-plugin-istanbul":"5.0.1","babel-plugin-transform-object-rest-spread":"^6.23.0","babel-plugin-transform-react-jsx":"^6.24.1","babel-preset-env":"^1.6.1","benchmark":"^2.1.4","chai":"^4.1.2","coveralls":"^3.0.0","cross-env":"^5.2.0","diff":"^3.5.0","eslint":"5.15.1","eslint-config-developit":"^1.1.1","eslint-plugin-react":"7.12.4","flow-bin":"^0.79.1","karma":"^3.0.0","karma-babel-preprocessor":"^7.0.0","karma-chai-sinon":"^0.1.5","karma-chrome-launcher":"^2.2.0","karma-coverage":"^1.1.2","karma-mocha":"^1.3.0","karma-mocha-reporter":"^2.2.5","karma-sauce-launcher":"^1.2.0","karma-sinon":"^1.0.5","karma-source-map-support":"^1.3.0","karma-sourcemap-loader":"^0.3.7","karma-webpack":"^3.0.5","lodash":"^4.17.10","microbundle":"^0.11.0","mocha":"^5.2.0","npm-run-all":"^4.0.0","prop-types":"^15.7.2","sinon":"^6.1.3","sinon-chai":"^3.0.0","travis-size-report":"^1.0.1","typescript":"^3.0.1","webpack":"^4.3.0"},"gitHead":"22a028f958e5d544b2ab09ea59ed9403a04edf58","readme":"
Fast 3kB alternative to React with the same modern API.
\n\n**All the power of Virtual DOM components, without the overhead:**\n\n- Familiar React API & patterns: [ES6 Class] and [Functional Components]\n- Extensive React compatibility via a simple [preact-compat] alias\n- Everything you need: JSX, VDOM, React DevTools, HMR, SSR..\n- A highly optimized diff algorithm and seamless Server Side Rendering\n- Transparent asynchronous rendering with a pluggable scheduler\n- 🆕💥 **Instant no-config app bundling with [Preact CLI](https://github.com/preactjs/preact-cli)**\n\n### 💁 More information at the [Preact Website ➞](https://preactjs.com)\n\n\n---\n\n\n\n- [Demos](#demos)\n- [Libraries & Add-ons](#libraries--add-ons)\n- [Getting Started](#getting-started)\n\t- [Import what you need](#import-what-you-need)\n\t- [Rendering JSX](#rendering-jsx)\n\t- [Components](#components)\n\t- [Props & State](#props--state)\n- [Linked State](#linked-state)\n- [Examples](#examples)\n- [Extensions](#extensions)\n- [Debug Mode](#debug-mode)\n- [Backers](#backers)\n- [Sponsors](#sponsors)\n- [License](#license)\n\n\n\n\n# Preact\n\n[![npm](https://img.shields.io/npm/v/preact.svg)](http://npm.im/preact)\n[![CDNJS](https://img.shields.io/cdnjs/v/preact.svg)](https://cdnjs.com/libraries/preact)\n[![Preact Slack Community](https://preact-slack.now.sh/badge.svg)](https://preact-slack.now.sh)\n[![OpenCollective Backers](https://opencollective.com/preact/backers/badge.svg)](#backers)\n[![OpenCollective Sponsors](https://opencollective.com/preact/sponsors/badge.svg)](#sponsors)\n[![travis](https://travis-ci.org/preactjs/preact.svg?branch=master)](https://travis-ci.org/preactjs/preact)\n[![coveralls](https://img.shields.io/coveralls/preactjs/preact/master.svg)](https://coveralls.io/github/preactjs/preact)\n[![gzip size](http://img.badgesize.io/https://unpkg.com/preact/dist/preact.min.js?compression=gzip)](https://unpkg.com/preact/dist/preact.min.js)\n[![install size](https://packagephobia.now.sh/badge?p=preact)](https://packagephobia.now.sh/result?p=preact)\n\nPreact supports modern browsers and IE9+:\n\n[![Browsers](https://saucelabs.com/browser-matrix/preact.svg)](https://saucelabs.com/u/preact)\n\n\n---\n\n\n## Demos\n\n#### Real-World Apps\n\n- [**Preact Hacker News**](https://hn.kristoferbaxter.com) _([GitHub Project](https://github.com/kristoferbaxter/preact-hn))_\n- [**Play.cash**](https://play.cash) :notes: _([GitHub Project](https://github.com/feross/play.cash))_\n- [**BitMidi**](https://bitmidi.com/) 🎹 Wayback machine for free MIDI files _([GitHub Project](https://github.com/feross/bitmidi.com))_\n- [**Ultimate Guitar**](https://www.ultimate-guitar.com) 🎸speed boosted by Preact.\n- [**ESBench**](http://esbench.com) is built using Preact.\n- [**BigWebQuiz**](https://bigwebquiz.com) _([GitHub Project](https://github.com/jakearchibald/big-web-quiz))_\n- [**Nectarine.rocks**](http://nectarine.rocks) _([GitHub Project](https://github.com/developit/nectarine))_ :peach:\n- [**TodoMVC**](https://preact-todomvc.surge.sh) _([GitHub Project](https://github.com/developit/preact-todomvc))_\n- [**OSS.Ninja**](https://oss.ninja) _([GitHub Project](https://github.com/developit/oss.ninja))_\n- [**GuriVR**](https://gurivr.com) _([GitHub Project](https://github.com/opennewslabs/guri-vr))_\n- [**Color Picker**](https://colors.now.sh) _([GitHub Project](https://github.com/lukeed/colors-app))_ :art:\n- [**Offline Gallery**](https://use-the-platform.com/offline-gallery/) _([GitHub Project](https://github.com/vaneenige/offline-gallery/))_ :balloon:\n- [**Periodic Weather**](https://use-the-platform.com/periodic-weather/) _([GitHub Project](https://github.com/vaneenige/periodic-weather/))_ :sunny:\n- [**Rugby News Board**](http://nbrugby.com) _[(GitHub Project)](https://github.com/rugby-board/rugby-board-node)_\n- [**Preact Gallery**](https://preact.gallery/) an 8KB photo gallery PWA built using Preact.\n- [**Rainbow Explorer**](https://use-the-platform.com/rainbow-explorer/) Preact app to translate real life color to digital color _([Github project](https://github.com/vaneenige/rainbow-explorer))_.\n- [**YASCC**](https://carlosqsilva.github.io/YASCC/#/) Yet Another SoundCloud Client _([Github project](https://github.com/carlosqsilva/YASCC))_.\n- [**Journalize**](https://preact-journal.herokuapp.com/) 14k offline-capable journaling PWA using preact. _([Github project](https://github.com/jpodwys/preact-journal))_.\n- [**Proxx**](https://proxx.app) A game of proximity by GoogleChromeLabs using preact. _([Github project](https://github.com/GoogleChromeLabs/proxx))_.\n\n\n#### Runnable Examples\n\n- [**Flickr Browser**](http://codepen.io/developit/full/VvMZwK/) (@ CodePen)\n- [**Animating Text**](http://codepen.io/developit/full/LpNOdm/) (@ CodePen)\n- [**60FPS Rainbow Spiral**](http://codepen.io/developit/full/xGoagz/) (@ CodePen)\n- [**Simple Clock**](http://jsfiddle.net/developit/u9m5x0L7/embedded/result,js/) (@ JSFiddle)\n- [**3D + ThreeJS**](http://codepen.io/developit/pen/PPMNjd?editors=0010) (@ CodePen)\n- [**Stock Ticker**](http://codepen.io/developit/pen/wMYoBb?editors=0010) (@ CodePen)\n- [*Create your Own!*](https://jsfiddle.net/developit/rs6zrh5f/embedded/result/) (@ JSFiddle)\n\n### Starter Projects\n\n- [**Preact Boilerplate**](https://preact-boilerplate.surge.sh) _([GitHub Project](https://github.com/developit/preact-boilerplate))_ :zap:\n- [**Preact Offline Starter**](https://preact-starter.now.sh) _([GitHub Project](https://github.com/lukeed/preact-starter))_ :100:\n- [**Preact PWA**](https://preact-pwa-yfxiijbzit.now.sh/) _([GitHub Project](https://github.com/ezekielchentnik/preact-pwa))_ :hamburger:\n- [**Parcel + Preact + Unistore Starter**](https://github.com/hwclass/parcel-preact-unistore-starter)\n- [**Preact Mobx Starter**](https://awaw00.github.io/preact-mobx-starter/) _([GitHub Project](https://github.com/awaw00/preact-mobx-starter))_ :sunny:\n- [**Preact Redux Example**](https://github.com/developit/preact-redux-example) :star:\n- [**Preact Redux/RxJS/Reselect Example**](https://github.com/continuata/preact-seed)\n- [**V2EX Preact**](https://github.com/yanni4night/v2ex-preact)\n- [**Preact Coffeescript**](https://github.com/crisward/preact-coffee)\n- [**Preact + TypeScript + Webpack**](https://github.com/k1r0s/bleeding-preact-starter)\n- [**0 config => Preact + Poi**](https://github.com/k1r0s/preact-poi-starter)\n- [**Zero configuration => Preact + Typescript + Parcel**](https://github.com/aalises/preact-typescript-parcel-starter)\n\n---\n\n## Libraries & Add-ons\n\n- :raised_hands: [**preact-compat**](https://git.io/preact-compat): use any React library with Preact *([full example](http://git.io/preact-compat-example))*\n- :twisted_rightwards_arrows: [**preact-context**](https://github.com/valotas/preact-context): React's `createContext` api for Preact\n- :page_facing_up: [**preact-render-to-string**](https://git.io/preact-render-to-string): Universal rendering.\n- :eyes: [**preact-render-spy**](https://github.com/mzgoddard/preact-render-spy): Enzyme-lite: Renderer with access to the produced virtual dom for testing.\n- :loop: [**preact-render-to-json**](https://git.io/preact-render-to-json): Render for Jest Snapshot testing.\n- :earth_americas: [**preact-router**](https://git.io/preact-router): URL routing for your components\n- :bookmark_tabs: [**preact-markup**](https://git.io/preact-markup): Render HTML & Custom Elements as JSX & Components\n- :satellite: [**preact-portal**](https://git.io/preact-portal): Render Preact components into (a) SPACE :milky_way:\n- :pencil: [**preact-richtextarea**](https://git.io/preact-richtextarea): Simple HTML editor component\n- :bookmark: [**preact-token-input**](https://github.com/developit/preact-token-input): Text field that tokenizes input, for things like tags\n- :card_index: [**preact-virtual-list**](https://github.com/developit/preact-virtual-list): Easily render lists with millions of rows ([demo](https://jsfiddle.net/developit/qqan9pdo/))\n- :repeat: [**preact-cycle**](https://git.io/preact-cycle): Functional-reactive paradigm for Preact\n- :triangular_ruler: [**preact-layout**](https://download.github.io/preact-layout/): Small and simple layout library\n- :thought_balloon: [**preact-socrates**](https://github.com/matthewmueller/preact-socrates): Preact plugin for [Socrates](http://github.com/matthewmueller/socrates)\n- :rowboat: [**preact-flyd**](https://github.com/xialvjun/preact-flyd): Use [flyd](https://github.com/paldepind/flyd) FRP streams in Preact + JSX\n- :speech_balloon: [**preact-i18nline**](https://github.com/download/preact-i18nline): Integrates the ecosystem around [i18n-js](https://github.com/everydayhero/i18n-js) with Preact via [i18nline](https://github.com/download/i18nline).\n- :microscope: [**preact-jsx-chai**](https://git.io/preact-jsx-chai): JSX assertion testing _(no DOM, right in Node)_\n- :tophat: [**preact-classless-component**](https://github.com/ld0rman/preact-classless-component): create preact components without the class keyword\n- :hammer: [**preact-hyperscript**](https://github.com/queckezz/preact-hyperscript): Hyperscript-like syntax for creating elements\n- :white_check_mark: [**shallow-compare**](https://github.com/tkh44/shallow-compare): simplified `shouldComponentUpdate` helper.\n- :shaved_ice: [**preact-codemod**](https://github.com/vutran/preact-codemod): Transform your React code to Preact.\n- :construction_worker: [**preact-helmet**](https://github.com/download/preact-helmet): A document head manager for Preact\n- :necktie: [**preact-delegate**](https://github.com/NekR/preact-delegate): Delegate DOM events\n- :art: [**preact-stylesheet-decorator**](https://github.com/k1r0s/preact-stylesheet-decorator): Add Scoped Stylesheets to your Preact Components\n- :electric_plug: [**preact-routlet**](https://github.com/k1r0s/preact-routlet): Simple `Component Driven` Routing for Preact using ES7 Decorators\n- :fax: [**preact-bind-group**](https://github.com/k1r0s/preact-bind-group): Preact Forms made easy, Group Events into a Single Callback\n- :hatching_chick: [**preact-habitat**](https://github.com/zouhir/preact-habitat): Declarative Preact widgets renderer in any CMS or DOM host ([demo](https://codepen.io/zouhir/pen/brrOPB)).\n- :tada: [**proppy-preact**](https://github.com/fahad19/proppy): Functional props composition for Preact components\n\n#### UI Component Libraries\n\n> Want to prototype something or speed up your development? Try one of these toolkits:\n\n- [**preact-material-components**](https://github.com/prateekbh/preact-material-components): Material Design Components for Preact ([website](https://material.preactjs.com/))\n- [**preact-mdc**](https://github.com/BerndWessels/preact-mdc): Material Design Components for Preact ([demo](https://github.com/BerndWessels/preact-mdc-demo))\n- [**preact-mui**](https://git.io/v1aVO): The MUI CSS Preact library.\n- [**preact-photon**](https://git.io/preact-photon): build beautiful desktop UI with [photon](http://photonkit.com)\n- [**preact-mdl**](https://git.io/preact-mdl): [Material Design Lite](https://getmdl.io) for Preact\n- [**preact-weui**](https://github.com/afeiship/preact-weui): [Weui](https://github.com/afeiship/preact-weui) for Preact\n\n\n---\n\n## Getting Started\n\n> 💁 _**Note:** You [don't need ES2015 to use Preact](https://github.com/developit/preact-in-es3)... but give it a try!_\n\nThe easiest way to get started with Preact is to install [Preact CLI](https://github.com/preactjs/preact-cli). This simple command-line tool wraps up the best possible Webpack and Babel setup for you, and even keeps you up-to-date as the underlying tools change. Best of all, it's easy to understand! It builds your app in a single command (`preact build`), doesn't need any configuration, and bakes in best-practises 🙌.\n\nThe following guide assumes you have some sort of ES2015 build set up using babel and/or webpack/browserify/gulp/grunt/etc.\n\nYou can also start with [preact-boilerplate] or a [CodePen Template](http://codepen.io/developit/pen/pgaROe?editors=0010).\n\n\n### Import what you need\n\nThe `preact` module provides both named and default exports, so you can either import everything under a namespace of your choosing, or just what you need as locals:\n\n##### Named:\n\n```js\nimport { h, render, Component } from 'preact';\n\n// Tell Babel to transform JSX into h() calls:\n/** @jsx h */\n```\n\n##### Default:\n\n```js\nimport preact from 'preact';\n\n// Tell Babel to transform JSX into preact.h() calls:\n/** @jsx preact.h */\n```\n\n> Named imports work well for highly structured applications, whereas the default import is quick and never needs to be updated when using different parts of the library.\n>\n> Instead of declaring the `@jsx` pragma in your code, it's best to configure it globally in a `.babelrc`:\n>\n> **For Babel 5 and prior:**\n>\n> ```json\n> { \"jsxPragma\": \"h\" }\n> ```\n>\n> **For Babel 6:**\n>\n> ```json\n> {\n> \"plugins\": [\n> [\"transform-react-jsx\", { \"pragma\":\"h\" }]\n> ]\n> }\n> ```\n>\n> **For Babel 7:**\n>\n> ```json\n> {\n> \"plugins\": [\n> [\"@babel/plugin-transform-react-jsx\", { \"pragma\":\"h\" }]\n> ]\n> }\n> ```\n> **For using Preact along with TypeScript add to `tsconfig.json`:**\n>\n> ```json\n> {\n> \"jsx\": \"react\",\n> \"jsxFactory\": \"h\",\n> }\n> ```\n\n\n### Rendering JSX\n\nOut of the box, Preact provides an `h()` function that turns your JSX into Virtual DOM elements _([here's how](http://jasonformat.com/wtf-is-jsx))_. It also provides a `render()` function that creates a DOM tree from that Virtual DOM.\n\nTo render some JSX, just import those two functions and use them like so:\n\n```js\nimport { h, render } from 'preact';\n\nrender((\n\t
\n\t\tHello, world!\n\t\t\n\t
\n), document.body);\n```\n\nThis should seem pretty straightforward if you've used hyperscript or one of its many friends. If you're not, the short of it is that the `h()` function import gets used in the final, transpiled code as a drop in replacement for `React.createElement()`, and so needs to be imported even if you don't explicitly use it in the code you write. Also note that if you're the kind of person who likes writing your React code in \"pure JavaScript\" (you know who you are) you will need to use `h()` wherever you would otherwise use `React.createElement()`.\n\nRendering hyperscript with a virtual DOM is pointless, though. We want to render components and have them updated when data changes - that's where the power of virtual DOM diffing shines. :star2:\n\n\n### Components\n\nPreact exports a generic `Component` class, which can be extended to build encapsulated, self-updating pieces of a User Interface. Components support all of the standard React [lifecycle methods], like `shouldComponentUpdate()` and `componentWillReceiveProps()`. Providing specific implementations of these methods is the preferred mechanism for controlling _when_ and _how_ components update.\n\nComponents also have a `render()` method, but unlike React this method is passed `(props, state)` as arguments. This provides an ergonomic means to destructure `props` and `state` into local variables to be referenced from JSX.\n\nLet's take a look at a very simple `Clock` component, which shows the current time.\n\n```js\nimport { h, render, Component } from 'preact';\n\nclass Clock extends Component {\n\trender() {\n\t\tlet time = new Date();\n\t\treturn ;\n\t}\n}\n\n// render an instance of Clock into :\nrender(, document.body);\n```\n\n\nThat's great. Running this produces the following HTML DOM structure:\n\n```html\n10:28:57 PM\n```\n\nIn order to have the clock's time update every second, we need to know when `` gets mounted to the DOM. _If you've used HTML5 Custom Elements, this is similar to the `attachedCallback` and `detachedCallback` lifecycle methods._ Preact invokes the following lifecycle methods if they are defined for a Component:\n\n| Lifecycle method | When it gets called |\n|-----------------------------|--------------------------------------------------|\n| `componentWillMount` | before the component gets mounted to the DOM |\n| `componentDidMount` | after the component gets mounted to the DOM |\n| `componentWillUnmount` | prior to removal from the DOM |\n| `componentWillReceiveProps` | before new props get accepted |\n| `shouldComponentUpdate` | before `render()`. Return `false` to skip render |\n| `componentWillUpdate` | before `render()` |\n| `componentDidUpdate` | after `render()` |\n\n\n\nSo, we want to have a 1-second timer start once the Component gets added to the DOM, and stop if it is removed. We'll create the timer and store a reference to it in `componentDidMount()`, and stop the timer in `componentWillUnmount()`. On each timer tick, we'll update the component's `state` object with a new time value. Doing this will automatically re-render the component.\n\n```js\nimport { h, render, Component } from 'preact';\n\nclass Clock extends Component {\n\tconstructor() {\n\t\tsuper();\n\t\t// set initial time:\n\t\tthis.state = {\n\t\t\ttime: Date.now()\n\t\t};\n\t}\n\n\tcomponentDidMount() {\n\t\t// update time every second\n\t\tthis.timer = setInterval(() => {\n\t\t\tthis.setState({ time: Date.now() });\n\t\t}, 1000);\n\t}\n\n\tcomponentWillUnmount() {\n\t\t// stop when not renderable\n\t\tclearInterval(this.timer);\n\t}\n\n\trender(props, state) {\n\t\tlet time = new Date(state.time).toLocaleTimeString();\n\t\treturn { time };\n\t}\n}\n\n// render an instance of Clock into :\nrender(, document.body);\n```\n\nNow we have [a ticking clock](http://jsfiddle.net/developit/u9m5x0L7/embedded/result,js/)!\n\n\n### Props & State\n\nThe concept (and nomenclature) for `props` and `state` is the same as in React. `props` are passed to a component by defining attributes in JSX, `state` is internal state. Changing either triggers a re-render, though by default Preact re-renders Components asynchronously for `state` changes and synchronously for `props` changes. You can tell Preact to render `prop` changes asynchronously by setting `options.syncComponentUpdates` to `false`.\n\n\n---\n\n\n## Linked State\n\nOne area Preact takes a little further than React is in optimizing state changes. A common pattern in ES2015 React code is to use Arrow functions within a `render()` method in order to update state in response to events. Creating functions enclosed in a scope on every render is inefficient and forces the garbage collector to do more work than is necessary.\n\nOne solution to this is to bind component methods declaratively.\nHere is an example using [decko](http://git.io/decko):\n\n```js\nclass Foo extends Component {\n\t@bind\n\tupdateText(e) {\n\t\tthis.setState({ text: e.target.value });\n\t}\n\trender({ }, { text }) {\n\t\treturn ;\n\t}\n}\n```\n\nWhile this achieves much better runtime performance, it's still a lot of unnecessary code to wire up state to UI.\n\nFortunately there is a solution, in the form of a module called [linkstate](https://github.com/developit/linkstate). Calling `linkState(component, 'text')` returns a function that accepts an Event and uses its associated value to update the given property in your component's state. Calls to `linkState()` with the same arguments are cached, so there is no performance penalty. Here is the previous example rewritten using _Linked State_:\n\n```js\nimport linkState from 'linkstate';\n\nclass Foo extends Component {\n\trender({ }, { text }) {\n\t\treturn ;\n\t}\n}\n```\n\nSimple and effective. It handles linking state from any input type, or an optional second parameter can be used to explicitly provide a keypath to the new state value.\n\n> **Note:** In Preact 7 and prior, `linkState()` was built right into Component. In 8.0, it was moved to a separate module. You can restore the 7.x behavior by using linkstate as a polyfill - see [the linkstate docs](https://github.com/developit/linkstate#usage).\n\n\n\n## Examples\n\nHere is a somewhat verbose Preact `` component:\n\n```js\nclass Link extends Component {\n\trender(props, state) {\n\t\treturn {props.children};\n\t}\n}\n```\n\nSince this is ES6/ES2015, we can further simplify:\n\n```js\nclass Link extends Component {\n render({ href, children }) {\n return ;\n }\n}\n\n// or, for wide-open props support:\nclass Link extends Component {\n render(props) {\n return ;\n }\n}\n\n// or, as a stateless functional component:\nconst Link = ({ children, ...props }) => (\n { children }\n);\n```\n\n\n## Extensions\n\nIt is likely that some projects based on Preact would wish to extend Component with great new functionality.\n\nPerhaps automatic connection to stores for a Flux-like architecture, or mixed-in context bindings to make it feel more like `React.createClass()`. Just use ES2015 inheritance:\n\n```js\nclass BoundComponent extends Component {\n\tconstructor(props) {\n\t\tsuper(props);\n\t\tthis.bind();\n\t}\n\tbind() {\n\t\tthis.binds = {};\n\t\tfor (let i in this) {\n\t\t\tthis.binds[i] = this[i].bind(this);\n\t\t}\n\t}\n}\n\n// example usage\nclass Link extends BoundComponent {\n\tclick() {\n\t\topen(this.href);\n\t}\n\trender() {\n\t\tlet { click } = this.binds;\n\t\treturn { children };\n\t}\n}\n```\n\n\nThe possibilities are pretty endless here. You could even add support for rudimentary mixins:\n\n```js\nclass MixedComponent extends Component {\n\tconstructor() {\n\t\tsuper();\n\t\t(this.mixins || []).forEach( m => Object.assign(this, m) );\n\t}\n}\n```\n\n## Debug Mode\n\nYou can inspect and modify the state of your Preact UI components at runtime using the\n[React Developer Tools](https://github.com/facebook/react-devtools) browser extension.\n\n1. Install the [React Developer Tools](https://github.com/facebook/react-devtools) extension\n2. Import the \"preact/debug\" module in your app\n3. Set `process.env.NODE_ENV` to 'development'\n4. Reload and go to the 'React' tab in the browser's development tools\n\n\n```js\nimport { h, Component, render } from 'preact';\n\n// Enable debug mode. You can reduce the size of your app by only including this\n// module in development builds. eg. In Webpack, wrap this with an `if (module.hot) {...}`\n// check.\nrequire('preact/debug');\n```\n\n### Runtime Error Checking\n\nTo enable debug mode, you need to set `process.env.NODE_ENV=development`. You can do this\nwith webpack via a builtin plugin.\n\n```js\n// webpack.config.js\n\n// Set NODE_ENV=development to enable error checking\nnew webpack.DefinePlugin({\n 'process.env': {\n 'NODE_ENV': JSON.stringify('development')\n }\n});\n```\n\nWhen enabled, warnings are logged to the console when undefined components or string refs\nare detected.\n\n### Developer Tools\n\nIf you only want to include devtool integration, without runtime error checking, you can\nreplace `preact/debug` in the above example with `preact/devtools`. This option doesn't\nrequire setting `NODE_ENV=development`.\n\n\n\n## Backers\nSupport us with a monthly donation and help us continue our activities. [[Become a backer](https://opencollective.com/preact#backer)]\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n## Sponsors\nBecome a sponsor and get your logo on our README on GitHub with a link to your site. [[Become a sponsor](https://opencollective.com/preact#sponsor)]\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n## License\n\nMIT\n\n\n\n[![Preact](http://i.imgur.com/YqCHvEW.gif)](https://preactjs.com)\n\n\n[preact-compat]: https://github.com/developit/preact-compat\n[ES6 Class]: https://facebook.github.io/react/docs/reusable-components.html#es6-classes\n[Functional Components]: https://facebook.github.io/react/blog/2015/10/07/react-v0.14.html#stateless-functional-components\n[hyperscript]: https://github.com/dominictarr/hyperscript\n[preact-boilerplate]: https://github.com/developit/preact-boilerplate\n[lifecycle methods]: https://facebook.github.io/react/docs/component-specs.html\n","readmeFilename":"README.md","_id":"preact@10.0.0-beta.2","_npmVersion":"6.5.0","_nodeVersion":"11.7.0","_npmUser":{"name":"marvinhagemeister","email":"marvin@marvinhagemeister.de"},"dist":{"integrity":"sha512-sKu2tdECRcmG8B2Q0GIAhTR95PhaWy15RkYFgpzfkEQLo7qqnE5lYQO2ccHNTfwuzj0LVPRdG71s5QjhnRyVbQ==","shasum":"659b6520eb41d5a3d178a61b3311e6ae79d8cf56","tarball":"http://localhost:4545/npm/registry/preact/preact-10.0.0-beta.2.tgz","fileCount":72,"unpackedSize":647084,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc8RniCRA9TVsSAnZWagAATE4P/ReJg8hnCXPoiNEWnYpl\nCxsvpvs5IHdiYzNN4OUoBTNmHtFURTjX8uFFwo0rtM71Hdd8UltmEgo9OdAU\nFMEiXrZY9MZNgv/999DrPjjIRxP9E3pH6ZZQezkGwK80W/LXp5SWEe7Sa14C\njQUe4wDWCBPARaWNJi0LrBT/xDNGXJFIxsWk1lGvLx/kQ9cqDIIgs30hKUMt\nLAGv0bnNnj7pmWlZ6S4aYeqbqb6GabbcSkV23hoWqIn6sW3XTljsDI0bTE0a\nlbUzpTUMi/Cpf6GN0d6Kdc7oRBxxAx6LGGZCCjaUcIZ0ywC2Al+xFGz3BY8a\n31BWMvA4Pq5J2ergeAQIEt96F6yBiLoNN2dpRe3IksrOpYP89B8PhF5cPrFT\ngyzrKmZJycFuXTtP+asRaBTkO9H/moB4wTYPb/7NwC3PRqceARv20CfisxZv\nNeyduTy1IPl7JTd0XZ62MGb2b9pFvpFfdBk/nnTcNJykvTgR991pBKl2ZcGy\nIXe8x0+qx1KamLRpdvJAgagXKqMnY03bZK86+ey6q9BLjCNEYgMg0yJCgIxb\nfPozYyPD/2hVpSNnHxLNaSeK4Cbb9SbcMxUKsYoicyYfFlrXTnCoVQY3q0Zi\ndB/duGDo7RySbRhLjuMLg05MXUj2AaLOYhUTsU7zYRck4VhT5gJ6gqMFyy5g\nA7BE\r\n=a2Hx\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCU//Bty/FKP2pqxmnt6LeWTQ8AjtUpwjgUP5XLSf3X/AIgSnVBjrpozMRpQYKZkR4CVFdBA6iPvJdl7sZZzZtJwKY="}]},"maintainers":[{"email":"jason@developit.ca","name":"developit"},{"email":"ulliftw@gmail.com","name":"harmony"},{"email":"luke@lukeed.com","name":"lukeed"},{"email":"marvin@marvinhagemeister.de","name":"marvinhagemeister"},{"email":"prateek89born@gmail.com","name":"prateekbh"},{"email":"hello@preactjs.com","name":"preactjs"},{"email":"allamsetty.anup@gmail.com","name":"reznord"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/preact_10.0.0-beta.2_1559304673783_0.31605518883103056"},"_hasShrinkwrap":false},"10.0.0-beta.3":{"name":"preact","amdName":"preact","version":"10.0.0-beta.3","private":false,"description":"Fast 3kb React-compatible Virtual DOM library.","main":"dist/preact.js","module":"dist/preact.module.js","umd:main":"dist/preact.umd.js","source":"src/index.js","license":"MIT","types":"src/index.d.ts","scripts":{"build":"npm-run-all --parallel build:*","build:core":"microbundle build --raw","build:debug":"microbundle build --raw --cwd debug","build:hooks":"microbundle build --raw --cwd hooks","build:test-utils":"microbundle build --raw --cwd test-utils","build:compat":"microbundle build --raw --cwd compat --globals 'preact/hooks=preactHooks'","dev":"microbundle watch --raw --format cjs","dev:hooks":"microbundle watch --raw --format cjs --cwd hooks","dev:compat":"microbundle watch --raw --format cjs --cwd compat --globals 'preact/hooks=preactHooks'","test":"npm-run-all lint build --parallel test:mocha test:karma test:ts","test:flow":"flow check","test:ts":"tsc -p test/ts/ && mocha --require babel-register test/ts/**/*-test.js","test:mocha":"mocha --recursive --require babel-register test/shared test/node","test:karma":"cross-env COVERAGE=true karma start karma.conf.js --single-run","test:mocha:watch":"npm run test:mocha -- --watch","test:karma:watch":"karma start karma.conf.js --no-single-run","test:karma:hooks":"cross-env COVERAGE=false karma start karma.conf.js --grep=hooks/test/browser/**.js --no-single-run","test:karma:test-utils":"cross-env PERFORMANCE=false COVERAGE=false karma start karma.conf.js --grep=test-utils/test/shared/**.js --no-single-run","test:karma:bench":"cross-env PERFORMANCE=true COVERAGE=false karma start karma.conf.js --grep=test/benchmarks/**.js --single-run","benchmark":"npm run test:karma:bench -- no-single-run","lint":"eslint src test debug compat hooks test-utils","postinstall":"node -e \"console.log('\\u001b[35m\\u001b[1mLove Preact? You can now donate to our open collective:\\u001b[22m\\u001b[39m\\n > \\u001b[34mhttps://opencollective.com/preact/donate\\u001b[0m')\""},"eslintConfig":{"extends":"developit","settings":{"react":{"pragma":"createElement"}},"rules":{"camelcase":[1,{"allow":["__test__*","unstable_*","UNSAFE_*"]}],"prefer-rest-params":0,"prefer-spread":0,"no-cond-assign":0,"react/jsx-no-bind":0,"react/prefer-stateless-function":0,"react/sort-comp":0,"jest/valid-expect":0,"jest/no-disabled-tests":0,"react/no-find-dom-node":0}},"keywords":["preact","react","virtual dom","vdom","components","virtual","dom"],"authors":["Jason Miller "],"repository":{"type":"git","url":"git+https://github.com/preactjs/preact.git"},"bugs":{"url":"https://github.com/preactjs/preact/issues"},"homepage":"https://github.com/preactjs/preact","devDependencies":{"@types/chai":"^4.1.2","@types/mocha":"^5.0.0","@types/node":"^10.5.2","babel-cli":"6.26.0","babel-core":"6.26.3","babel-loader":"7.1.5","babel-plugin-istanbul":"5.0.1","babel-plugin-transform-object-rest-spread":"^6.23.0","babel-plugin-transform-react-jsx":"^6.24.1","babel-preset-env":"^1.6.1","benchmark":"^2.1.4","chai":"^4.1.2","coveralls":"^3.0.0","cross-env":"^5.2.0","diff":"^3.5.0","eslint":"5.15.1","eslint-config-developit":"^1.1.1","eslint-plugin-react":"7.12.4","flow-bin":"^0.79.1","karma":"^3.0.0","karma-babel-preprocessor":"^7.0.0","karma-chai-sinon":"^0.1.5","karma-chrome-launcher":"^2.2.0","karma-coverage":"^1.1.2","karma-mocha":"^1.3.0","karma-mocha-reporter":"^2.2.5","karma-sauce-launcher":"^1.2.0","karma-sinon":"^1.0.5","karma-source-map-support":"^1.3.0","karma-sourcemap-loader":"^0.3.7","karma-webpack":"^3.0.5","lodash":"^4.17.10","microbundle":"^0.11.0","mocha":"^5.2.0","npm-run-all":"^4.0.0","prop-types":"^15.7.2","sinon":"^6.1.3","sinon-chai":"^3.0.0","travis-size-report":"^1.0.1","typescript":"^3.0.1","webpack":"^4.3.0"},"gitHead":"7fe6f21aff0fd2b83dd5a53d1cef35a51a725e5f","readme":"
Fast 3kB alternative to React with the same modern API.
\n\n**All the power of Virtual DOM components, without the overhead:**\n\n- Familiar React API & patterns: [ES6 Class] and [Functional Components]\n- Extensive React compatibility via a simple [preact-compat] alias\n- Everything you need: JSX, VDOM, React DevTools, HMR, SSR..\n- A highly optimized diff algorithm and seamless Server Side Rendering\n- Transparent asynchronous rendering with a pluggable scheduler\n- 🆕💥 **Instant no-config app bundling with [Preact CLI](https://github.com/preactjs/preact-cli)**\n\n### 💁 More information at the [Preact Website ➞](https://preactjs.com)\n\n\n---\n\n\n\n- [Demos](#demos)\n- [Libraries & Add-ons](#libraries--add-ons)\n- [Getting Started](#getting-started)\n\t- [Import what you need](#import-what-you-need)\n\t- [Rendering JSX](#rendering-jsx)\n\t- [Components](#components)\n\t- [Props & State](#props--state)\n- [Linked State](#linked-state)\n- [Examples](#examples)\n- [Extensions](#extensions)\n- [Debug Mode](#debug-mode)\n- [Backers](#backers)\n- [Sponsors](#sponsors)\n- [License](#license)\n\n\n\n\n# Preact\n\n[![npm](https://img.shields.io/npm/v/preact.svg)](http://npm.im/preact)\n[![CDNJS](https://img.shields.io/cdnjs/v/preact.svg)](https://cdnjs.com/libraries/preact)\n[![Preact Slack Community](https://preact-slack.now.sh/badge.svg)](https://preact-slack.now.sh)\n[![OpenCollective Backers](https://opencollective.com/preact/backers/badge.svg)](#backers)\n[![OpenCollective Sponsors](https://opencollective.com/preact/sponsors/badge.svg)](#sponsors)\n[![travis](https://travis-ci.org/preactjs/preact.svg?branch=master)](https://travis-ci.org/preactjs/preact)\n[![coveralls](https://img.shields.io/coveralls/preactjs/preact/master.svg)](https://coveralls.io/github/preactjs/preact)\n[![gzip size](http://img.badgesize.io/https://unpkg.com/preact/dist/preact.min.js?compression=gzip)](https://unpkg.com/preact/dist/preact.min.js)\n[![install size](https://packagephobia.now.sh/badge?p=preact)](https://packagephobia.now.sh/result?p=preact)\n\nPreact supports modern browsers and IE9+:\n\n[![Browsers](https://saucelabs.com/browser-matrix/preact.svg)](https://saucelabs.com/u/preact)\n\n\n---\n\n\n## Demos\n\n#### Real-World Apps\n\n- [**Preact Hacker News**](https://hn.kristoferbaxter.com) _([GitHub Project](https://github.com/kristoferbaxter/preact-hn))_\n- [**Play.cash**](https://play.cash) :notes: _([GitHub Project](https://github.com/feross/play.cash))_\n- [**BitMidi**](https://bitmidi.com/) 🎹 Wayback machine for free MIDI files _([GitHub Project](https://github.com/feross/bitmidi.com))_\n- [**Ultimate Guitar**](https://www.ultimate-guitar.com) 🎸speed boosted by Preact.\n- [**ESBench**](http://esbench.com) is built using Preact.\n- [**BigWebQuiz**](https://bigwebquiz.com) _([GitHub Project](https://github.com/jakearchibald/big-web-quiz))_\n- [**Nectarine.rocks**](http://nectarine.rocks) _([GitHub Project](https://github.com/developit/nectarine))_ :peach:\n- [**TodoMVC**](https://preact-todomvc.surge.sh) _([GitHub Project](https://github.com/developit/preact-todomvc))_\n- [**OSS.Ninja**](https://oss.ninja) _([GitHub Project](https://github.com/developit/oss.ninja))_\n- [**GuriVR**](https://gurivr.com) _([GitHub Project](https://github.com/opennewslabs/guri-vr))_\n- [**Color Picker**](https://colors.now.sh) _([GitHub Project](https://github.com/lukeed/colors-app))_ :art:\n- [**Offline Gallery**](https://use-the-platform.com/offline-gallery/) _([GitHub Project](https://github.com/vaneenige/offline-gallery/))_ :balloon:\n- [**Periodic Weather**](https://use-the-platform.com/periodic-weather/) _([GitHub Project](https://github.com/vaneenige/periodic-weather/))_ :sunny:\n- [**Rugby News Board**](http://nbrugby.com) _[(GitHub Project)](https://github.com/rugby-board/rugby-board-node)_\n- [**Preact Gallery**](https://preact.gallery/) an 8KB photo gallery PWA built using Preact.\n- [**Rainbow Explorer**](https://use-the-platform.com/rainbow-explorer/) Preact app to translate real life color to digital color _([Github project](https://github.com/vaneenige/rainbow-explorer))_.\n- [**YASCC**](https://carlosqsilva.github.io/YASCC/#/) Yet Another SoundCloud Client _([Github project](https://github.com/carlosqsilva/YASCC))_.\n- [**Journalize**](https://preact-journal.herokuapp.com/) 14k offline-capable journaling PWA using preact. _([Github project](https://github.com/jpodwys/preact-journal))_.\n- [**Proxx**](https://proxx.app) A game of proximity by GoogleChromeLabs using preact. _([Github project](https://github.com/GoogleChromeLabs/proxx))_.\n\n\n#### Runnable Examples\n\n- [**Flickr Browser**](http://codepen.io/developit/full/VvMZwK/) (@ CodePen)\n- [**Animating Text**](http://codepen.io/developit/full/LpNOdm/) (@ CodePen)\n- [**60FPS Rainbow Spiral**](http://codepen.io/developit/full/xGoagz/) (@ CodePen)\n- [**Simple Clock**](http://jsfiddle.net/developit/u9m5x0L7/embedded/result,js/) (@ JSFiddle)\n- [**3D + ThreeJS**](http://codepen.io/developit/pen/PPMNjd?editors=0010) (@ CodePen)\n- [**Stock Ticker**](http://codepen.io/developit/pen/wMYoBb?editors=0010) (@ CodePen)\n- [*Create your Own!*](https://jsfiddle.net/developit/rs6zrh5f/embedded/result/) (@ JSFiddle)\n\n### Starter Projects\n\n- [**Preact Boilerplate**](https://preact-boilerplate.surge.sh) _([GitHub Project](https://github.com/developit/preact-boilerplate))_ :zap:\n- [**Preact Offline Starter**](https://preact-starter.now.sh) _([GitHub Project](https://github.com/lukeed/preact-starter))_ :100:\n- [**Preact PWA**](https://preact-pwa-yfxiijbzit.now.sh/) _([GitHub Project](https://github.com/ezekielchentnik/preact-pwa))_ :hamburger:\n- [**Parcel + Preact + Unistore Starter**](https://github.com/hwclass/parcel-preact-unistore-starter)\n- [**Preact Mobx Starter**](https://awaw00.github.io/preact-mobx-starter/) _([GitHub Project](https://github.com/awaw00/preact-mobx-starter))_ :sunny:\n- [**Preact Redux Example**](https://github.com/developit/preact-redux-example) :star:\n- [**Preact Redux/RxJS/Reselect Example**](https://github.com/continuata/preact-seed)\n- [**V2EX Preact**](https://github.com/yanni4night/v2ex-preact)\n- [**Preact Coffeescript**](https://github.com/crisward/preact-coffee)\n- [**Preact + TypeScript + Webpack**](https://github.com/k1r0s/bleeding-preact-starter)\n- [**0 config => Preact + Poi**](https://github.com/k1r0s/preact-poi-starter)\n- [**Zero configuration => Preact + Typescript + Parcel**](https://github.com/aalises/preact-typescript-parcel-starter)\n\n---\n\n## Libraries & Add-ons\n\n- :raised_hands: [**preact-compat**](https://git.io/preact-compat): use any React library with Preact *([full example](http://git.io/preact-compat-example))*\n- :twisted_rightwards_arrows: [**preact-context**](https://github.com/valotas/preact-context): React's `createContext` api for Preact\n- :page_facing_up: [**preact-render-to-string**](https://git.io/preact-render-to-string): Universal rendering.\n- :eyes: [**preact-render-spy**](https://github.com/mzgoddard/preact-render-spy): Enzyme-lite: Renderer with access to the produced virtual dom for testing.\n- :loop: [**preact-render-to-json**](https://git.io/preact-render-to-json): Render for Jest Snapshot testing.\n- :earth_americas: [**preact-router**](https://git.io/preact-router): URL routing for your components\n- :bookmark_tabs: [**preact-markup**](https://git.io/preact-markup): Render HTML & Custom Elements as JSX & Components\n- :satellite: [**preact-portal**](https://git.io/preact-portal): Render Preact components into (a) SPACE :milky_way:\n- :pencil: [**preact-richtextarea**](https://git.io/preact-richtextarea): Simple HTML editor component\n- :bookmark: [**preact-token-input**](https://github.com/developit/preact-token-input): Text field that tokenizes input, for things like tags\n- :card_index: [**preact-virtual-list**](https://github.com/developit/preact-virtual-list): Easily render lists with millions of rows ([demo](https://jsfiddle.net/developit/qqan9pdo/))\n- :repeat: [**preact-cycle**](https://git.io/preact-cycle): Functional-reactive paradigm for Preact\n- :triangular_ruler: [**preact-layout**](https://download.github.io/preact-layout/): Small and simple layout library\n- :thought_balloon: [**preact-socrates**](https://github.com/matthewmueller/preact-socrates): Preact plugin for [Socrates](http://github.com/matthewmueller/socrates)\n- :rowboat: [**preact-flyd**](https://github.com/xialvjun/preact-flyd): Use [flyd](https://github.com/paldepind/flyd) FRP streams in Preact + JSX\n- :speech_balloon: [**preact-i18nline**](https://github.com/download/preact-i18nline): Integrates the ecosystem around [i18n-js](https://github.com/everydayhero/i18n-js) with Preact via [i18nline](https://github.com/download/i18nline).\n- :microscope: [**preact-jsx-chai**](https://git.io/preact-jsx-chai): JSX assertion testing _(no DOM, right in Node)_\n- :tophat: [**preact-classless-component**](https://github.com/ld0rman/preact-classless-component): create preact components without the class keyword\n- :hammer: [**preact-hyperscript**](https://github.com/queckezz/preact-hyperscript): Hyperscript-like syntax for creating elements\n- :white_check_mark: [**shallow-compare**](https://github.com/tkh44/shallow-compare): simplified `shouldComponentUpdate` helper.\n- :shaved_ice: [**preact-codemod**](https://github.com/vutran/preact-codemod): Transform your React code to Preact.\n- :construction_worker: [**preact-helmet**](https://github.com/download/preact-helmet): A document head manager for Preact\n- :necktie: [**preact-delegate**](https://github.com/NekR/preact-delegate): Delegate DOM events\n- :art: [**preact-stylesheet-decorator**](https://github.com/k1r0s/preact-stylesheet-decorator): Add Scoped Stylesheets to your Preact Components\n- :electric_plug: [**preact-routlet**](https://github.com/k1r0s/preact-routlet): Simple `Component Driven` Routing for Preact using ES7 Decorators\n- :fax: [**preact-bind-group**](https://github.com/k1r0s/preact-bind-group): Preact Forms made easy, Group Events into a Single Callback\n- :hatching_chick: [**preact-habitat**](https://github.com/zouhir/preact-habitat): Declarative Preact widgets renderer in any CMS or DOM host ([demo](https://codepen.io/zouhir/pen/brrOPB)).\n- :tada: [**proppy-preact**](https://github.com/fahad19/proppy): Functional props composition for Preact components\n\n#### UI Component Libraries\n\n> Want to prototype something or speed up your development? Try one of these toolkits:\n\n- [**preact-material-components**](https://github.com/prateekbh/preact-material-components): Material Design Components for Preact ([website](https://material.preactjs.com/))\n- [**preact-mdc**](https://github.com/BerndWessels/preact-mdc): Material Design Components for Preact ([demo](https://github.com/BerndWessels/preact-mdc-demo))\n- [**preact-mui**](https://git.io/v1aVO): The MUI CSS Preact library.\n- [**preact-photon**](https://git.io/preact-photon): build beautiful desktop UI with [photon](http://photonkit.com)\n- [**preact-mdl**](https://git.io/preact-mdl): [Material Design Lite](https://getmdl.io) for Preact\n- [**preact-weui**](https://github.com/afeiship/preact-weui): [Weui](https://github.com/afeiship/preact-weui) for Preact\n- [**preact-charts**](https://github.com/pmkroeker/preact-charts): Charts for Preact\n\n\n---\n\n## Getting Started\n\n> 💁 _**Note:** You [don't need ES2015 to use Preact](https://github.com/developit/preact-in-es3)... but give it a try!_\n\nThe easiest way to get started with Preact is to install [Preact CLI](https://github.com/preactjs/preact-cli). This simple command-line tool wraps up the best possible Webpack and Babel setup for you, and even keeps you up-to-date as the underlying tools change. Best of all, it's easy to understand! It builds your app in a single command (`preact build`), doesn't need any configuration, and bakes in best-practises 🙌.\n\nThe following guide assumes you have some sort of ES2015 build set up using babel and/or webpack/browserify/gulp/grunt/etc.\n\nYou can also start with [preact-boilerplate] or a [CodePen Template](http://codepen.io/developit/pen/pgaROe?editors=0010).\n\n\n### Import what you need\n\nThe `preact` module provides both named and default exports, so you can either import everything under a namespace of your choosing, or just what you need as locals:\n\n##### Named:\n\n```js\nimport { h, render, Component } from 'preact';\n\n// Tell Babel to transform JSX into h() calls:\n/** @jsx h */\n```\n\n##### Default:\n\n```js\nimport preact from 'preact';\n\n// Tell Babel to transform JSX into preact.h() calls:\n/** @jsx preact.h */\n```\n\n> Named imports work well for highly structured applications, whereas the default import is quick and never needs to be updated when using different parts of the library.\n>\n> Instead of declaring the `@jsx` pragma in your code, it's best to configure it globally in a `.babelrc`:\n>\n> **For Babel 5 and prior:**\n>\n> ```json\n> { \"jsxPragma\": \"h\" }\n> ```\n>\n> **For Babel 6:**\n>\n> ```json\n> {\n> \"plugins\": [\n> [\"transform-react-jsx\", { \"pragma\":\"h\" }]\n> ]\n> }\n> ```\n>\n> **For Babel 7:**\n>\n> ```json\n> {\n> \"plugins\": [\n> [\"@babel/plugin-transform-react-jsx\", { \"pragma\":\"h\" }]\n> ]\n> }\n> ```\n> **For using Preact along with TypeScript add to `tsconfig.json`:**\n>\n> ```json\n> {\n> \"jsx\": \"react\",\n> \"jsxFactory\": \"h\",\n> }\n> ```\n\n\n### Rendering JSX\n\nOut of the box, Preact provides an `h()` function that turns your JSX into Virtual DOM elements _([here's how](http://jasonformat.com/wtf-is-jsx))_. It also provides a `render()` function that creates a DOM tree from that Virtual DOM.\n\nTo render some JSX, just import those two functions and use them like so:\n\n```js\nimport { h, render } from 'preact';\n\nrender((\n\t
\n\t\tHello, world!\n\t\t\n\t
\n), document.body);\n```\n\nThis should seem pretty straightforward if you've used hyperscript or one of its many friends. If you're not, the short of it is that the `h()` function import gets used in the final, transpiled code as a drop in replacement for `React.createElement()`, and so needs to be imported even if you don't explicitly use it in the code you write. Also note that if you're the kind of person who likes writing your React code in \"pure JavaScript\" (you know who you are) you will need to use `h()` wherever you would otherwise use `React.createElement()`.\n\nRendering hyperscript with a virtual DOM is pointless, though. We want to render components and have them updated when data changes - that's where the power of virtual DOM diffing shines. :star2:\n\n\n### Components\n\nPreact exports a generic `Component` class, which can be extended to build encapsulated, self-updating pieces of a User Interface. Components support all of the standard React [lifecycle methods], like `shouldComponentUpdate()` and `componentWillReceiveProps()`. Providing specific implementations of these methods is the preferred mechanism for controlling _when_ and _how_ components update.\n\nComponents also have a `render()` method, but unlike React this method is passed `(props, state)` as arguments. This provides an ergonomic means to destructure `props` and `state` into local variables to be referenced from JSX.\n\nLet's take a look at a very simple `Clock` component, which shows the current time.\n\n```js\nimport { h, render, Component } from 'preact';\n\nclass Clock extends Component {\n\trender() {\n\t\tlet time = new Date();\n\t\treturn ;\n\t}\n}\n\n// render an instance of Clock into :\nrender(, document.body);\n```\n\n\nThat's great. Running this produces the following HTML DOM structure:\n\n```html\n10:28:57 PM\n```\n\nIn order to have the clock's time update every second, we need to know when `` gets mounted to the DOM. _If you've used HTML5 Custom Elements, this is similar to the `attachedCallback` and `detachedCallback` lifecycle methods._ Preact invokes the following lifecycle methods if they are defined for a Component:\n\n| Lifecycle method | When it gets called |\n|-----------------------------|--------------------------------------------------|\n| `componentWillMount` | before the component gets mounted to the DOM |\n| `componentDidMount` | after the component gets mounted to the DOM |\n| `componentWillUnmount` | prior to removal from the DOM |\n| `componentWillReceiveProps` | before new props get accepted |\n| `shouldComponentUpdate` | before `render()`. Return `false` to skip render |\n| `componentWillUpdate` | before `render()` |\n| `componentDidUpdate` | after `render()` |\n\n\n\nSo, we want to have a 1-second timer start once the Component gets added to the DOM, and stop if it is removed. We'll create the timer and store a reference to it in `componentDidMount()`, and stop the timer in `componentWillUnmount()`. On each timer tick, we'll update the component's `state` object with a new time value. Doing this will automatically re-render the component.\n\n```js\nimport { h, render, Component } from 'preact';\n\nclass Clock extends Component {\n\tconstructor() {\n\t\tsuper();\n\t\t// set initial time:\n\t\tthis.state = {\n\t\t\ttime: Date.now()\n\t\t};\n\t}\n\n\tcomponentDidMount() {\n\t\t// update time every second\n\t\tthis.timer = setInterval(() => {\n\t\t\tthis.setState({ time: Date.now() });\n\t\t}, 1000);\n\t}\n\n\tcomponentWillUnmount() {\n\t\t// stop when not renderable\n\t\tclearInterval(this.timer);\n\t}\n\n\trender(props, state) {\n\t\tlet time = new Date(state.time).toLocaleTimeString();\n\t\treturn { time };\n\t}\n}\n\n// render an instance of Clock into :\nrender(, document.body);\n```\n\nNow we have [a ticking clock](http://jsfiddle.net/developit/u9m5x0L7/embedded/result,js/)!\n\n\n### Props & State\n\nThe concept (and nomenclature) for `props` and `state` is the same as in React. `props` are passed to a component by defining attributes in JSX, `state` is internal state. Changing either triggers a re-render, though by default Preact re-renders Components asynchronously for `state` changes and synchronously for `props` changes. You can tell Preact to render `prop` changes asynchronously by setting `options.syncComponentUpdates` to `false`.\n\n\n---\n\n\n## Linked State\n\nOne area Preact takes a little further than React is in optimizing state changes. A common pattern in ES2015 React code is to use Arrow functions within a `render()` method in order to update state in response to events. Creating functions enclosed in a scope on every render is inefficient and forces the garbage collector to do more work than is necessary.\n\nOne solution to this is to bind component methods declaratively.\nHere is an example using [decko](http://git.io/decko):\n\n```js\nclass Foo extends Component {\n\t@bind\n\tupdateText(e) {\n\t\tthis.setState({ text: e.target.value });\n\t}\n\trender({ }, { text }) {\n\t\treturn ;\n\t}\n}\n```\n\nWhile this achieves much better runtime performance, it's still a lot of unnecessary code to wire up state to UI.\n\nFortunately there is a solution, in the form of a module called [linkstate](https://github.com/developit/linkstate). Calling `linkState(component, 'text')` returns a function that accepts an Event and uses its associated value to update the given property in your component's state. Calls to `linkState()` with the same arguments are cached, so there is no performance penalty. Here is the previous example rewritten using _Linked State_:\n\n```js\nimport linkState from 'linkstate';\n\nclass Foo extends Component {\n\trender({ }, { text }) {\n\t\treturn ;\n\t}\n}\n```\n\nSimple and effective. It handles linking state from any input type, or an optional second parameter can be used to explicitly provide a keypath to the new state value.\n\n> **Note:** In Preact 7 and prior, `linkState()` was built right into Component. In 8.0, it was moved to a separate module. You can restore the 7.x behavior by using linkstate as a polyfill - see [the linkstate docs](https://github.com/developit/linkstate#usage).\n\n\n\n## Examples\n\nHere is a somewhat verbose Preact `` component:\n\n```js\nclass Link extends Component {\n\trender(props, state) {\n\t\treturn {props.children};\n\t}\n}\n```\n\nSince this is ES6/ES2015, we can further simplify:\n\n```js\nclass Link extends Component {\n render({ href, children }) {\n return ;\n }\n}\n\n// or, for wide-open props support:\nclass Link extends Component {\n render(props) {\n return ;\n }\n}\n\n// or, as a stateless functional component:\nconst Link = ({ children, ...props }) => (\n { children }\n);\n```\n\n\n## Extensions\n\nIt is likely that some projects based on Preact would wish to extend Component with great new functionality.\n\nPerhaps automatic connection to stores for a Flux-like architecture, or mixed-in context bindings to make it feel more like `React.createClass()`. Just use ES2015 inheritance:\n\n```js\nclass BoundComponent extends Component {\n\tconstructor(props) {\n\t\tsuper(props);\n\t\tthis.bind();\n\t}\n\tbind() {\n\t\tthis.binds = {};\n\t\tfor (let i in this) {\n\t\t\tthis.binds[i] = this[i].bind(this);\n\t\t}\n\t}\n}\n\n// example usage\nclass Link extends BoundComponent {\n\tclick() {\n\t\topen(this.href);\n\t}\n\trender() {\n\t\tlet { click } = this.binds;\n\t\treturn { children };\n\t}\n}\n```\n\n\nThe possibilities are pretty endless here. You could even add support for rudimentary mixins:\n\n```js\nclass MixedComponent extends Component {\n\tconstructor() {\n\t\tsuper();\n\t\t(this.mixins || []).forEach( m => Object.assign(this, m) );\n\t}\n}\n```\n\n## Debug Mode\n\nYou can inspect and modify the state of your Preact UI components at runtime using the\n[React Developer Tools](https://github.com/facebook/react-devtools) browser extension.\n\n1. Install the [React Developer Tools](https://github.com/facebook/react-devtools) extension\n2. Import the \"preact/debug\" module in your app\n3. Set `process.env.NODE_ENV` to 'development'\n4. Reload and go to the 'React' tab in the browser's development tools\n\n\n```js\nimport { h, Component, render } from 'preact';\n\n// Enable debug mode. You can reduce the size of your app by only including this\n// module in development builds. eg. In Webpack, wrap this with an `if (module.hot) {...}`\n// check.\nrequire('preact/debug');\n```\n\n### Runtime Error Checking\n\nTo enable debug mode, you need to set `process.env.NODE_ENV=development`. You can do this\nwith webpack via a builtin plugin.\n\n```js\n// webpack.config.js\n\n// Set NODE_ENV=development to enable error checking\nnew webpack.DefinePlugin({\n 'process.env': {\n 'NODE_ENV': JSON.stringify('development')\n }\n});\n```\n\nWhen enabled, warnings are logged to the console when undefined components or string refs\nare detected.\n\n### Developer Tools\n\nIf you only want to include devtool integration, without runtime error checking, you can\nreplace `preact/debug` in the above example with `preact/devtools`. This option doesn't\nrequire setting `NODE_ENV=development`.\n\n\n\n## Backers\nSupport us with a monthly donation and help us continue our activities. [[Become a backer](https://opencollective.com/preact#backer)]\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n## Sponsors\nBecome a sponsor and get your logo on our README on GitHub with a link to your site. [[Become a sponsor](https://opencollective.com/preact#sponsor)]\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n## License\n\nMIT\n\n\n\n[![Preact](http://i.imgur.com/YqCHvEW.gif)](https://preactjs.com)\n\n\n[preact-compat]: https://github.com/developit/preact-compat\n[ES6 Class]: https://facebook.github.io/react/docs/reusable-components.html#es6-classes\n[Functional Components]: https://facebook.github.io/react/blog/2015/10/07/react-v0.14.html#stateless-functional-components\n[hyperscript]: https://github.com/dominictarr/hyperscript\n[preact-boilerplate]: https://github.com/developit/preact-boilerplate\n[lifecycle methods]: https://facebook.github.io/react/docs/component-specs.html\n","readmeFilename":"README.md","_id":"preact@10.0.0-beta.3","_nodeVersion":"11.15.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-JDeA+CVFBlv+r+v/tScG8hzOcOedXfBLUA5IhStqpfc7rPGY3T85pdlu4aGo2tV0AoZzQfO4LTnKkQEnKJ3UxQ==","shasum":"dabd0628d941f9e7908f68bb008e012ddff1b28f","tarball":"http://localhost:4545/npm/registry/preact/preact-10.0.0-beta.3.tgz","fileCount":72,"unpackedSize":650413,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdDSn8CRA9TVsSAnZWagAAMLsP+QDht3tprIeNeDl2ZIYV\nv/VF4jPhNwiE4/PcQN9JRxkNEXXDdeo2PeK4U8+8yhXKyxRGmLjSNChAohbn\nETHoqiDhbFSCpfiH7tTtTp1h3RhhQohlH1UmzxV6dHkhhFa3yo/Fre9powiB\nZujCnj4nShNV1b2ZZBK+p9GL1PC2sbjHonTX4zAMofULWnApeH/z0s5s4XMq\nd1tbmY1fIemKgUKhntwGSY5RacLbCqoVZjpvEUdQvYFmemIQ7cig9EoE49aM\nhJ4BQh/3zKCe8Eozm7WkdYocZDrgKxAfyH+FVn7QrSV2jhvQkeq76SbmWpsC\nwKGPsurfialtfGHB+uwNb5wER/ze0XABP38Rccm1+zvcpcoQcADxK+pzPmFt\nXcJ4AHqkb2yiMkC51Yz70NlCx5DApjaInAhzCX4w+f/tZ/VzE26vM3Xf8i7G\nCcM0/2Jt8U4Is2x2FoTjgxghWcu2Egr1ULBNrLT0ZuiP/JVlIT3dSsz+B1F+\nE0/JF0jjbOnXh/Cw/Pr3HzywRtx4GyuXCrTEiuSXYU5QLqvnrbk4ZGjxRa0B\nRhvKKpaNbIpe1AjtMf03VLcaf2TBC4HfrEAVqGAbCNYTeqUaClYW47xSLPsq\nF6bfBDX7jf7jUYKjau4GCY/Wx6aIXW82lhZBKduAxGuNbh/4hqPrTfdnJUcr\nBRcM\r\n=pykT\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDinxjKiaeAcCWdKfQFwYJcQqCO3oL03qkUggIJpxh2cAiAVzawQwYCIMW6rqkBGmkVr1ymfc585gU1Y05uSot3+6w=="}]},"maintainers":[{"email":"jason@developit.ca","name":"developit"},{"email":"ulliftw@gmail.com","name":"harmony"},{"email":"luke@lukeed.com","name":"lukeed"},{"email":"marvin@marvinhagemeister.de","name":"marvinhagemeister"},{"email":"prateek89born@gmail.com","name":"prateekbh"},{"email":"hello@preactjs.com","name":"preactjs"},{"email":"allamsetty.anup@gmail.com","name":"reznord"}],"_npmUser":{"name":"marvinhagemeister","email":"marvin@marvinhagemeister.de"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/preact_10.0.0-beta.3_1561143803767_0.2635183323839134"},"_hasShrinkwrap":false},"10.0.0-rc.0":{"name":"preact","amdName":"preact","version":"10.0.0-rc.0","private":false,"description":"Fast 3kb React-compatible Virtual DOM library.","main":"dist/preact.js","module":"dist/preact.module.js","umd:main":"dist/preact.umd.js","source":"src/index.js","license":"MIT","types":"src/index.d.ts","scripts":{"build":"npm-run-all --parallel build:*","build:core":"microbundle build --raw","build:debug":"microbundle build --raw --cwd debug","build:hooks":"microbundle build --raw --cwd hooks","build:test-utils":"microbundle build --raw --cwd test-utils","build:compat":"microbundle build --raw --cwd compat --globals 'preact/hooks=preactHooks'","dev":"microbundle watch --raw --format cjs","dev:hooks":"microbundle watch --raw --format cjs --cwd hooks","dev:compat":"microbundle watch --raw --format cjs --cwd compat --globals 'preact/hooks=preactHooks'","test":"npm-run-all lint build --parallel test:mocha test:karma test:ts","test:flow":"flow check","test:ts":"tsc -p test/ts/ && mocha --require babel-register test/ts/**/*-test.js","test:mocha":"mocha --recursive --require babel-register test/shared test/node","test:karma":"cross-env COVERAGE=true karma start karma.conf.js --single-run","test:mocha:watch":"npm run test:mocha -- --watch","test:karma:watch":"karma start karma.conf.js --no-single-run","test:karma:hooks":"cross-env COVERAGE=false karma start karma.conf.js --grep=hooks/test/browser/**.js --no-single-run","test:karma:test-utils":"cross-env PERFORMANCE=false COVERAGE=false karma start karma.conf.js --grep=test-utils/test/shared/**.js --no-single-run","test:karma:bench":"cross-env PERFORMANCE=true COVERAGE=false karma start karma.conf.js --grep=test/benchmarks/**.js --single-run","benchmark":"npm run test:karma:bench -- no-single-run","lint":"eslint src test debug compat hooks test-utils","postinstall":"node -e \"console.log('\\u001b[35m\\u001b[1mLove Preact? You can now donate to our open collective:\\u001b[22m\\u001b[39m\\n > \\u001b[34mhttps://opencollective.com/preact/donate\\u001b[0m')\""},"eslintConfig":{"extends":"developit","settings":{"react":{"pragma":"createElement"}},"rules":{"camelcase":[1,{"allow":["__test__*","unstable_*","UNSAFE_*"]}],"prefer-rest-params":0,"prefer-spread":0,"no-cond-assign":0,"react/jsx-no-bind":0,"react/prefer-stateless-function":0,"react/sort-comp":0,"jest/valid-expect":0,"jest/no-disabled-tests":0,"react/no-find-dom-node":0}},"eslintIgnore":["test/fixtures","test/ts/","*.ts","dist"],"keywords":["preact","react","virtual dom","vdom","components","virtual","dom"],"authors":["Jason Miller "],"repository":{"type":"git","url":"git+https://github.com/preactjs/preact.git"},"bugs":{"url":"https://github.com/preactjs/preact/issues"},"homepage":"https://github.com/preactjs/preact","devDependencies":{"@types/chai":"^4.1.2","@types/mocha":"^5.0.0","@types/node":"^10.5.2","babel-cli":"6.26.0","babel-core":"6.26.3","babel-loader":"7.1.5","babel-plugin-istanbul":"5.0.1","babel-plugin-transform-object-rest-spread":"^6.23.0","babel-plugin-transform-react-jsx":"^6.24.1","babel-preset-env":"^1.6.1","benchmark":"^2.1.4","chai":"^4.1.2","coveralls":"^3.0.0","cross-env":"^5.2.0","diff":"^3.5.0","eslint":"5.15.1","eslint-config-developit":"^1.1.1","eslint-plugin-react":"7.12.4","flow-bin":"^0.79.1","karma":"^3.0.0","karma-babel-preprocessor":"^7.0.0","karma-chai-sinon":"^0.1.5","karma-chrome-launcher":"^2.2.0","karma-coverage":"^1.1.2","karma-mocha":"^1.3.0","karma-mocha-reporter":"^2.2.5","karma-sauce-launcher":"^1.2.0","karma-sinon":"^1.0.5","karma-source-map-support":"^1.3.0","karma-sourcemap-loader":"^0.3.7","karma-webpack":"^3.0.5","lodash":"^4.17.10","microbundle":"^0.11.0","mocha":"^5.2.0","npm-run-all":"^4.0.0","prop-types":"^15.7.2","sinon":"^6.1.3","sinon-chai":"^3.0.0","travis-size-report":"^1.0.1","typescript":"^3.0.1","webpack":"^4.3.0"},"gitHead":"95aa28f90b56c023438fe106150c76f270798578","readme":"
Fast 3kB alternative to React with the same modern API.
\n\n**All the power of Virtual DOM components, without the overhead:**\n\n- Familiar React API & patterns: [ES6 Class] and [Functional Components]\n- Extensive React compatibility via a simple [preact-compat] alias\n- Everything you need: JSX, VDOM, React DevTools, HMR, SSR..\n- A highly optimized diff algorithm and seamless Server Side Rendering\n- Transparent asynchronous rendering with a pluggable scheduler\n- 🆕💥 **Instant no-config app bundling with [Preact CLI](https://github.com/preactjs/preact-cli)**\n\n### 💁 More information at the [Preact Website ➞](https://preactjs.com)\n\n\n---\n\n\n\n- [Demos](#demos)\n- [Libraries & Add-ons](#libraries--add-ons)\n- [Getting Started](#getting-started)\n\t- [Import what you need](#import-what-you-need)\n\t- [Rendering JSX](#rendering-jsx)\n\t- [Components](#components)\n\t- [Props & State](#props--state)\n- [Linked State](#linked-state)\n- [Examples](#examples)\n- [Extensions](#extensions)\n- [Debug Mode](#debug-mode)\n- [Backers](#backers)\n- [Sponsors](#sponsors)\n- [License](#license)\n\n\n\n\n# Preact\n\n[![npm](https://img.shields.io/npm/v/preact.svg)](http://npm.im/preact)\n[![CDNJS](https://img.shields.io/cdnjs/v/preact.svg)](https://cdnjs.com/libraries/preact)\n[![Preact Slack Community](https://preact-slack.now.sh/badge.svg)](https://preact-slack.now.sh)\n[![OpenCollective Backers](https://opencollective.com/preact/backers/badge.svg)](#backers)\n[![OpenCollective Sponsors](https://opencollective.com/preact/sponsors/badge.svg)](#sponsors)\n[![travis](https://travis-ci.org/preactjs/preact.svg?branch=master)](https://travis-ci.org/preactjs/preact)\n[![coveralls](https://img.shields.io/coveralls/preactjs/preact/master.svg)](https://coveralls.io/github/preactjs/preact)\n[![gzip size](http://img.badgesize.io/https://unpkg.com/preact/dist/preact.min.js?compression=gzip)](https://unpkg.com/preact/dist/preact.min.js)\n[![install size](https://packagephobia.now.sh/badge?p=preact)](https://packagephobia.now.sh/result?p=preact)\n\nPreact supports modern browsers and IE9+:\n\n[![Browsers](https://saucelabs.com/browser-matrix/preact.svg)](https://saucelabs.com/u/preact)\n\n\n---\n\n\n## Demos\n\n#### Real-World Apps\n\n- [**Preact Hacker News**](https://hn.kristoferbaxter.com) _([GitHub Project](https://github.com/kristoferbaxter/preact-hn))_\n- [**Play.cash**](https://play.cash) :notes: _([GitHub Project](https://github.com/feross/play.cash))_\n- [**BitMidi**](https://bitmidi.com/) 🎹 Wayback machine for free MIDI files _([GitHub Project](https://github.com/feross/bitmidi.com))_\n- [**Ultimate Guitar**](https://www.ultimate-guitar.com) 🎸speed boosted by Preact.\n- [**ESBench**](http://esbench.com) is built using Preact.\n- [**BigWebQuiz**](https://bigwebquiz.com) _([GitHub Project](https://github.com/jakearchibald/big-web-quiz))_\n- [**Nectarine.rocks**](http://nectarine.rocks) _([GitHub Project](https://github.com/developit/nectarine))_ :peach:\n- [**TodoMVC**](https://preact-todomvc.surge.sh) _([GitHub Project](https://github.com/developit/preact-todomvc))_\n- [**OSS.Ninja**](https://oss.ninja) _([GitHub Project](https://github.com/developit/oss.ninja))_\n- [**GuriVR**](https://gurivr.com) _([GitHub Project](https://github.com/opennewslabs/guri-vr))_\n- [**Color Picker**](https://colors.now.sh) _([GitHub Project](https://github.com/lukeed/colors-app))_ :art:\n- [**Offline Gallery**](https://use-the-platform.com/offline-gallery/) _([GitHub Project](https://github.com/vaneenige/offline-gallery/))_ :balloon:\n- [**Periodic Weather**](https://use-the-platform.com/periodic-weather/) _([GitHub Project](https://github.com/vaneenige/periodic-weather/))_ :sunny:\n- [**Rugby News Board**](http://nbrugby.com) _[(GitHub Project)](https://github.com/rugby-board/rugby-board-node)_\n- [**Preact Gallery**](https://preact.gallery/) an 8KB photo gallery PWA built using Preact.\n- [**Rainbow Explorer**](https://use-the-platform.com/rainbow-explorer/) Preact app to translate real life color to digital color _([Github project](https://github.com/vaneenige/rainbow-explorer))_.\n- [**YASCC**](https://carlosqsilva.github.io/YASCC/#/) Yet Another SoundCloud Client _([Github project](https://github.com/carlosqsilva/YASCC))_.\n- [**Journalize**](https://preact-journal.herokuapp.com/) 14k offline-capable journaling PWA using preact. _([Github project](https://github.com/jpodwys/preact-journal))_.\n- [**Proxx**](https://proxx.app) A game of proximity by GoogleChromeLabs using preact. _([Github project](https://github.com/GoogleChromeLabs/proxx))_.\n\n\n#### Runnable Examples\n\n- [**Flickr Browser**](http://codepen.io/developit/full/VvMZwK/) (@ CodePen)\n- [**Animating Text**](http://codepen.io/developit/full/LpNOdm/) (@ CodePen)\n- [**60FPS Rainbow Spiral**](http://codepen.io/developit/full/xGoagz/) (@ CodePen)\n- [**Simple Clock**](http://jsfiddle.net/developit/u9m5x0L7/embedded/result,js/) (@ JSFiddle)\n- [**3D + ThreeJS**](http://codepen.io/developit/pen/PPMNjd?editors=0010) (@ CodePen)\n- [**Stock Ticker**](http://codepen.io/developit/pen/wMYoBb?editors=0010) (@ CodePen)\n- [*Create your Own!*](https://jsfiddle.net/developit/rs6zrh5f/embedded/result/) (@ JSFiddle)\n\n### Starter Projects\n\n- [**Preact Boilerplate**](https://preact-boilerplate.surge.sh) _([GitHub Project](https://github.com/developit/preact-boilerplate))_ :zap:\n- [**Preact Offline Starter**](https://preact-starter.now.sh) _([GitHub Project](https://github.com/lukeed/preact-starter))_ :100:\n- [**Preact PWA**](https://preact-pwa-yfxiijbzit.now.sh/) _([GitHub Project](https://github.com/ezekielchentnik/preact-pwa))_ :hamburger:\n- [**Parcel + Preact + Unistore Starter**](https://github.com/hwclass/parcel-preact-unistore-starter)\n- [**Preact Mobx Starter**](https://awaw00.github.io/preact-mobx-starter/) _([GitHub Project](https://github.com/awaw00/preact-mobx-starter))_ :sunny:\n- [**Preact Redux Example**](https://github.com/developit/preact-redux-example) :star:\n- [**Preact Redux/RxJS/Reselect Example**](https://github.com/continuata/preact-seed)\n- [**V2EX Preact**](https://github.com/yanni4night/v2ex-preact)\n- [**Preact Coffeescript**](https://github.com/crisward/preact-coffee)\n- [**Preact + TypeScript + Webpack**](https://github.com/k1r0s/bleeding-preact-starter)\n- [**0 config => Preact + Poi**](https://github.com/k1r0s/preact-poi-starter)\n- [**Zero configuration => Preact + Typescript + Parcel**](https://github.com/aalises/preact-typescript-parcel-starter)\n\n---\n\n## Libraries & Add-ons\n\n- :raised_hands: [**preact-compat**](https://git.io/preact-compat): use any React library with Preact *([full example](http://git.io/preact-compat-example))*\n- :twisted_rightwards_arrows: [**preact-context**](https://github.com/valotas/preact-context): React's `createContext` api for Preact\n- :page_facing_up: [**preact-render-to-string**](https://git.io/preact-render-to-string): Universal rendering.\n- :eyes: [**preact-render-spy**](https://github.com/mzgoddard/preact-render-spy): Enzyme-lite: Renderer with access to the produced virtual dom for testing.\n- :loop: [**preact-render-to-json**](https://git.io/preact-render-to-json): Render for Jest Snapshot testing.\n- :earth_americas: [**preact-router**](https://git.io/preact-router): URL routing for your components\n- :bookmark_tabs: [**preact-markup**](https://git.io/preact-markup): Render HTML & Custom Elements as JSX & Components\n- :satellite: [**preact-portal**](https://git.io/preact-portal): Render Preact components into (a) SPACE :milky_way:\n- :pencil: [**preact-richtextarea**](https://git.io/preact-richtextarea): Simple HTML editor component\n- :bookmark: [**preact-token-input**](https://github.com/developit/preact-token-input): Text field that tokenizes input, for things like tags\n- :card_index: [**preact-virtual-list**](https://github.com/developit/preact-virtual-list): Easily render lists with millions of rows ([demo](https://jsfiddle.net/developit/qqan9pdo/))\n- :repeat: [**preact-cycle**](https://git.io/preact-cycle): Functional-reactive paradigm for Preact\n- :triangular_ruler: [**preact-layout**](https://download.github.io/preact-layout/): Small and simple layout library\n- :thought_balloon: [**preact-socrates**](https://github.com/matthewmueller/preact-socrates): Preact plugin for [Socrates](http://github.com/matthewmueller/socrates)\n- :rowboat: [**preact-flyd**](https://github.com/xialvjun/preact-flyd): Use [flyd](https://github.com/paldepind/flyd) FRP streams in Preact + JSX\n- :speech_balloon: [**preact-i18nline**](https://github.com/download/preact-i18nline): Integrates the ecosystem around [i18n-js](https://github.com/everydayhero/i18n-js) with Preact via [i18nline](https://github.com/download/i18nline).\n- :microscope: [**preact-jsx-chai**](https://git.io/preact-jsx-chai): JSX assertion testing _(no DOM, right in Node)_\n- :tophat: [**preact-classless-component**](https://github.com/ld0rman/preact-classless-component): create preact components without the class keyword\n- :hammer: [**preact-hyperscript**](https://github.com/queckezz/preact-hyperscript): Hyperscript-like syntax for creating elements\n- :white_check_mark: [**shallow-compare**](https://github.com/tkh44/shallow-compare): simplified `shouldComponentUpdate` helper.\n- :shaved_ice: [**preact-codemod**](https://github.com/vutran/preact-codemod): Transform your React code to Preact.\n- :construction_worker: [**preact-helmet**](https://github.com/download/preact-helmet): A document head manager for Preact\n- :necktie: [**preact-delegate**](https://github.com/NekR/preact-delegate): Delegate DOM events\n- :art: [**preact-stylesheet-decorator**](https://github.com/k1r0s/preact-stylesheet-decorator): Add Scoped Stylesheets to your Preact Components\n- :electric_plug: [**preact-routlet**](https://github.com/k1r0s/preact-routlet): Simple `Component Driven` Routing for Preact using ES7 Decorators\n- :fax: [**preact-bind-group**](https://github.com/k1r0s/preact-bind-group): Preact Forms made easy, Group Events into a Single Callback\n- :hatching_chick: [**preact-habitat**](https://github.com/zouhir/preact-habitat): Declarative Preact widgets renderer in any CMS or DOM host ([demo](https://codepen.io/zouhir/pen/brrOPB)).\n- :tada: [**proppy-preact**](https://github.com/fahad19/proppy): Functional props composition for Preact components\n\n#### UI Component Libraries\n\n> Want to prototype something or speed up your development? Try one of these toolkits:\n\n- [**preact-material-components**](https://github.com/prateekbh/preact-material-components): Material Design Components for Preact ([website](https://material.preactjs.com/))\n- [**preact-mdc**](https://github.com/BerndWessels/preact-mdc): Material Design Components for Preact ([demo](https://github.com/BerndWessels/preact-mdc-demo))\n- [**preact-mui**](https://git.io/v1aVO): The MUI CSS Preact library.\n- [**preact-photon**](https://git.io/preact-photon): build beautiful desktop UI with [photon](http://photonkit.com)\n- [**preact-mdl**](https://git.io/preact-mdl): [Material Design Lite](https://getmdl.io) for Preact\n- [**preact-weui**](https://github.com/afeiship/preact-weui): [Weui](https://github.com/afeiship/preact-weui) for Preact\n- [**preact-charts**](https://github.com/pmkroeker/preact-charts): Charts for Preact\n\n\n---\n\n## Getting Started\n\n> 💁 _**Note:** You [don't need ES2015 to use Preact](https://github.com/developit/preact-in-es3)... but give it a try!_\n\nThe easiest way to get started with Preact is to install [Preact CLI](https://github.com/preactjs/preact-cli). This simple command-line tool wraps up the best possible Webpack and Babel setup for you, and even keeps you up-to-date as the underlying tools change. Best of all, it's easy to understand! It builds your app in a single command (`preact build`), doesn't need any configuration, and bakes in best-practises 🙌.\n\nThe following guide assumes you have some sort of ES2015 build set up using babel and/or webpack/browserify/gulp/grunt/etc.\n\nYou can also start with [preact-boilerplate] or a [CodePen Template](http://codepen.io/developit/pen/pgaROe?editors=0010).\n\n\n### Import what you need\n\nThe `preact` module provides both named and default exports, so you can either import everything under a namespace of your choosing, or just what you need as locals:\n\n##### Named:\n\n```js\nimport { h, render, Component } from 'preact';\n\n// Tell Babel to transform JSX into h() calls:\n/** @jsx h */\n```\n\n##### Default:\n\n```js\nimport preact from 'preact';\n\n// Tell Babel to transform JSX into preact.h() calls:\n/** @jsx preact.h */\n```\n\n> Named imports work well for highly structured applications, whereas the default import is quick and never needs to be updated when using different parts of the library.\n>\n> Instead of declaring the `@jsx` pragma in your code, it's best to configure it globally in a `.babelrc`:\n>\n> **For Babel 5 and prior:**\n>\n> ```json\n> { \"jsxPragma\": \"h\" }\n> ```\n>\n> **For Babel 6:**\n>\n> ```json\n> {\n> \"plugins\": [\n> [\"transform-react-jsx\", { \"pragma\":\"h\" }]\n> ]\n> }\n> ```\n>\n> **For Babel 7:**\n>\n> ```json\n> {\n> \"plugins\": [\n> [\"@babel/plugin-transform-react-jsx\", { \"pragma\":\"h\" }]\n> ]\n> }\n> ```\n> **For using Preact along with TypeScript add to `tsconfig.json`:**\n>\n> ```json\n> {\n> \"jsx\": \"react\",\n> \"jsxFactory\": \"h\",\n> }\n> ```\n\n\n### Rendering JSX\n\nOut of the box, Preact provides an `h()` function that turns your JSX into Virtual DOM elements _([here's how](http://jasonformat.com/wtf-is-jsx))_. It also provides a `render()` function that creates a DOM tree from that Virtual DOM.\n\nTo render some JSX, just import those two functions and use them like so:\n\n```js\nimport { h, render } from 'preact';\n\nrender((\n\t
\n\t\tHello, world!\n\t\t\n\t
\n), document.body);\n```\n\nThis should seem pretty straightforward if you've used hyperscript or one of its many friends. If you're not, the short of it is that the `h()` function import gets used in the final, transpiled code as a drop in replacement for `React.createElement()`, and so needs to be imported even if you don't explicitly use it in the code you write. Also note that if you're the kind of person who likes writing your React code in \"pure JavaScript\" (you know who you are) you will need to use `h()` wherever you would otherwise use `React.createElement()`.\n\nRendering hyperscript with a virtual DOM is pointless, though. We want to render components and have them updated when data changes - that's where the power of virtual DOM diffing shines. :star2:\n\n\n### Components\n\nPreact exports a generic `Component` class, which can be extended to build encapsulated, self-updating pieces of a User Interface. Components support all of the standard React [lifecycle methods], like `shouldComponentUpdate()` and `componentWillReceiveProps()`. Providing specific implementations of these methods is the preferred mechanism for controlling _when_ and _how_ components update.\n\nComponents also have a `render()` method, but unlike React this method is passed `(props, state)` as arguments. This provides an ergonomic means to destructure `props` and `state` into local variables to be referenced from JSX.\n\nLet's take a look at a very simple `Clock` component, which shows the current time.\n\n```js\nimport { h, render, Component } from 'preact';\n\nclass Clock extends Component {\n\trender() {\n\t\tlet time = new Date();\n\t\treturn ;\n\t}\n}\n\n// render an instance of Clock into :\nrender(, document.body);\n```\n\n\nThat's great. Running this produces the following HTML DOM structure:\n\n```html\n10:28:57 PM\n```\n\nIn order to have the clock's time update every second, we need to know when `` gets mounted to the DOM. _If you've used HTML5 Custom Elements, this is similar to the `attachedCallback` and `detachedCallback` lifecycle methods._ Preact invokes the following lifecycle methods if they are defined for a Component:\n\n| Lifecycle method | When it gets called |\n|-----------------------------|--------------------------------------------------|\n| `componentWillMount` | before the component gets mounted to the DOM |\n| `componentDidMount` | after the component gets mounted to the DOM |\n| `componentWillUnmount` | prior to removal from the DOM |\n| `componentWillReceiveProps` | before new props get accepted |\n| `shouldComponentUpdate` | before `render()`. Return `false` to skip render |\n| `componentWillUpdate` | before `render()` |\n| `componentDidUpdate` | after `render()` |\n\n\n\nSo, we want to have a 1-second timer start once the Component gets added to the DOM, and stop if it is removed. We'll create the timer and store a reference to it in `componentDidMount()`, and stop the timer in `componentWillUnmount()`. On each timer tick, we'll update the component's `state` object with a new time value. Doing this will automatically re-render the component.\n\n```js\nimport { h, render, Component } from 'preact';\n\nclass Clock extends Component {\n\tconstructor() {\n\t\tsuper();\n\t\t// set initial time:\n\t\tthis.state = {\n\t\t\ttime: Date.now()\n\t\t};\n\t}\n\n\tcomponentDidMount() {\n\t\t// update time every second\n\t\tthis.timer = setInterval(() => {\n\t\t\tthis.setState({ time: Date.now() });\n\t\t}, 1000);\n\t}\n\n\tcomponentWillUnmount() {\n\t\t// stop when not renderable\n\t\tclearInterval(this.timer);\n\t}\n\n\trender(props, state) {\n\t\tlet time = new Date(state.time).toLocaleTimeString();\n\t\treturn { time };\n\t}\n}\n\n// render an instance of Clock into :\nrender(, document.body);\n```\n\nNow we have [a ticking clock](http://jsfiddle.net/developit/u9m5x0L7/embedded/result,js/)!\n\n\n### Props & State\n\nThe concept (and nomenclature) for `props` and `state` is the same as in React. `props` are passed to a component by defining attributes in JSX, `state` is internal state. Changing either triggers a re-render, though by default Preact re-renders Components asynchronously for `state` changes and synchronously for `props` changes. You can tell Preact to render `prop` changes asynchronously by setting `options.syncComponentUpdates` to `false`.\n\n\n---\n\n\n## Linked State\n\nOne area Preact takes a little further than React is in optimizing state changes. A common pattern in ES2015 React code is to use Arrow functions within a `render()` method in order to update state in response to events. Creating functions enclosed in a scope on every render is inefficient and forces the garbage collector to do more work than is necessary.\n\nOne solution to this is to bind component methods declaratively.\nHere is an example using [decko](http://git.io/decko):\n\n```js\nclass Foo extends Component {\n\t@bind\n\tupdateText(e) {\n\t\tthis.setState({ text: e.target.value });\n\t}\n\trender({ }, { text }) {\n\t\treturn ;\n\t}\n}\n```\n\nWhile this achieves much better runtime performance, it's still a lot of unnecessary code to wire up state to UI.\n\nFortunately there is a solution, in the form of a module called [linkstate](https://github.com/developit/linkstate). Calling `linkState(component, 'text')` returns a function that accepts an Event and uses its associated value to update the given property in your component's state. Calls to `linkState()` with the same arguments are cached, so there is no performance penalty. Here is the previous example rewritten using _Linked State_:\n\n```js\nimport linkState from 'linkstate';\n\nclass Foo extends Component {\n\trender({ }, { text }) {\n\t\treturn ;\n\t}\n}\n```\n\nSimple and effective. It handles linking state from any input type, or an optional second parameter can be used to explicitly provide a keypath to the new state value.\n\n> **Note:** In Preact 7 and prior, `linkState()` was built right into Component. In 8.0, it was moved to a separate module. You can restore the 7.x behavior by using linkstate as a polyfill - see [the linkstate docs](https://github.com/developit/linkstate#usage).\n\n\n\n## Examples\n\nHere is a somewhat verbose Preact `` component:\n\n```js\nclass Link extends Component {\n\trender(props, state) {\n\t\treturn {props.children};\n\t}\n}\n```\n\nSince this is ES6/ES2015, we can further simplify:\n\n```js\nclass Link extends Component {\n render({ href, children }) {\n return ;\n }\n}\n\n// or, for wide-open props support:\nclass Link extends Component {\n render(props) {\n return ;\n }\n}\n\n// or, as a stateless functional component:\nconst Link = ({ children, ...props }) => (\n { children }\n);\n```\n\n\n## Extensions\n\nIt is likely that some projects based on Preact would wish to extend Component with great new functionality.\n\nPerhaps automatic connection to stores for a Flux-like architecture, or mixed-in context bindings to make it feel more like `React.createClass()`. Just use ES2015 inheritance:\n\n```js\nclass BoundComponent extends Component {\n\tconstructor(props) {\n\t\tsuper(props);\n\t\tthis.bind();\n\t}\n\tbind() {\n\t\tthis.binds = {};\n\t\tfor (let i in this) {\n\t\t\tthis.binds[i] = this[i].bind(this);\n\t\t}\n\t}\n}\n\n// example usage\nclass Link extends BoundComponent {\n\tclick() {\n\t\topen(this.href);\n\t}\n\trender() {\n\t\tlet { click } = this.binds;\n\t\treturn { children };\n\t}\n}\n```\n\n\nThe possibilities are pretty endless here. You could even add support for rudimentary mixins:\n\n```js\nclass MixedComponent extends Component {\n\tconstructor() {\n\t\tsuper();\n\t\t(this.mixins || []).forEach( m => Object.assign(this, m) );\n\t}\n}\n```\n\n## Debug Mode\n\nYou can inspect and modify the state of your Preact UI components at runtime using the\n[React Developer Tools](https://github.com/facebook/react-devtools) browser extension.\n\n1. Install the [React Developer Tools](https://github.com/facebook/react-devtools) extension\n2. Import the \"preact/debug\" module in your app\n3. Set `process.env.NODE_ENV` to 'development'\n4. Reload and go to the 'React' tab in the browser's development tools\n\n\n```js\nimport { h, Component, render } from 'preact';\n\n// Enable debug mode. You can reduce the size of your app by only including this\n// module in development builds. eg. In Webpack, wrap this with an `if (module.hot) {...}`\n// check.\nrequire('preact/debug');\n```\n\n### Runtime Error Checking\n\nTo enable debug mode, you need to set `process.env.NODE_ENV=development`. You can do this\nwith webpack via a builtin plugin.\n\n```js\n// webpack.config.js\n\n// Set NODE_ENV=development to enable error checking\nnew webpack.DefinePlugin({\n 'process.env': {\n 'NODE_ENV': JSON.stringify('development')\n }\n});\n```\n\nWhen enabled, warnings are logged to the console when undefined components or string refs\nare detected.\n\n### Developer Tools\n\nIf you only want to include devtool integration, without runtime error checking, you can\nreplace `preact/debug` in the above example with `preact/devtools`. This option doesn't\nrequire setting `NODE_ENV=development`.\n\n\n\n## Backers\nSupport us with a monthly donation and help us continue our activities. [[Become a backer](https://opencollective.com/preact#backer)]\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n## Sponsors\nBecome a sponsor and get your logo on our README on GitHub with a link to your site. [[Become a sponsor](https://opencollective.com/preact#sponsor)]\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n## License\n\nMIT\n\n\n\n[![Preact](http://i.imgur.com/YqCHvEW.gif)](https://preactjs.com)\n\n\n[preact-compat]: https://github.com/developit/preact-compat\n[ES6 Class]: https://facebook.github.io/react/docs/reusable-components.html#es6-classes\n[Functional Components]: https://facebook.github.io/react/blog/2015/10/07/react-v0.14.html#stateless-functional-components\n[hyperscript]: https://github.com/dominictarr/hyperscript\n[preact-boilerplate]: https://github.com/developit/preact-boilerplate\n[lifecycle methods]: https://facebook.github.io/react/docs/component-specs.html\n","readmeFilename":"README.md","_id":"preact@10.0.0-rc.0","_nodeVersion":"11.15.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-mOOF2FoSt52uYPa+n2cvgI0NI+yo6Rxyamvu5z/8GHod3UhtExWhBcOeTawriR4HiGuR5VHENJEJ/dtBWMZZaQ==","shasum":"084316631ae6f0a965e889e7715cccb74c4a5d6e","tarball":"http://localhost:4545/npm/registry/preact/preact-10.0.0-rc.0.tgz","fileCount":72,"unpackedSize":674088,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdJ5huCRA9TVsSAnZWagAAdA4P/jhRON8m/OWg+N1M9hAc\nUhwr5UeSQNquKIxJbC8OgSKdcoGHyLkrbiG+D5vbjgNMF0Qgr34AT3ETBvGa\nThsDSRYqGI2Avv53dZyhne3T+Ui1duqygwFwJwLpgBTMwx/kWi4O9tO8nySH\ndFX58BInRXWJRhk+VAu8E44bCq44S7WDawAxev80EXrsKIjLktEQbffZU0te\nDbaw/q1fuaseVim2Hj814k8BEdJwkiNaLw7HGKEJ54lMflMVyz26AxKpCjr7\nWqS44QWy5IVx0+2tAy9hxCLI9LkOSq4iE4bgkMXe4PNnJWftYE7Uc21GXBlu\nx65pgNHK8G7tnYFh1vJNIgVqNUCYnzElSzC2D4xFL2CZUtdTBJi8zT87fy56\ngWp1LZwGNBEnOU8D2zaNDOv4yFXl8l/bOxvb4M+4Fp6B891E7O6BSdvGcinE\nMNOEZ/nPRZsWOMeJljZEvD8/s6QhXRTkwIOC7NhX4xhyFBKFuL1ZKk17xDXn\n/MsyazxJ3BjA7nYAkQ2qnTRCRIMG7geOK1LH+ldZN4TwykoW35rPUMck8D0Y\nMuYXkGU8Nt46YITnxPFrD81jVlYBXq3lHIrBqJX+JIXzeQikVpK5crHaqjtF\nG0H2HbBLcUPDc52pHsTO0NpjDGGMOWA4YKOcJHgNGw28GJIIQULjs02Ri/QF\nDqGN\r\n=P5nq\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDLSC6NfLDPlnoZwrHcXleR3RrTgIf8M4WwKAwihP2yKQIgEEdkW2Y839aCP7MEx/vXoTe/+mBP+oqGC/ZdtOtIxhA="}]},"maintainers":[{"email":"jason@developit.ca","name":"developit"},{"email":"ulliftw@gmail.com","name":"harmony"},{"email":"luke@lukeed.com","name":"lukeed"},{"email":"marvin@marvinhagemeister.de","name":"marvinhagemeister"},{"email":"prateek89born@gmail.com","name":"prateekbh"},{"email":"hello@preactjs.com","name":"preactjs"},{"email":"allamsetty.anup@gmail.com","name":"reznord"}],"_npmUser":{"name":"marvinhagemeister","email":"marvin@marvinhagemeister.de"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/preact_10.0.0-rc.0_1562876013402_0.09616019959928557"},"_hasShrinkwrap":false},"8.5.0":{"name":"preact","version":"8.5.0","description":"Fast 3kb React alternative with the same modern API. Components & Virtual DOM.","main":"dist/preact.js","jsnext:main":"dist/preact.mjs","module":"dist/preact.mjs","dev:main":"dist/preact.dev.js","minified:main":"dist/preact.min.js","unpkg":"dist/preact.min.js","types":"dist/preact.d.ts","browser":"dist/preact.umd.js","scripts":{"clean":"rimraf dist/ devtools.js devtools.js.map debug.js debug.js.map test/ts/**/*.js","copy-flow-definition":"copyfiles -f src/preact.js.flow dist","copy-typescript-definition":"copyfiles -f src/preact.d.ts dist","build":"npm-run-all --silent clean transpile copy-flow-definition copy-typescript-definition strip optimize minify size","flow":"flow","transpile:main":"rollup -c config/rollup.config.js","transpile:devtools":"rollup -c config/rollup.config.devtools.js","transpile:esm":"rollup -c config/rollup.config.module.js","transpile:umd":"rollup -c config/rollup.config.umd.js","transpile:debug":"babel debug/ -o debug.js -s","transpile":"npm-run-all transpile:main transpile:esm transpile:umd transpile:devtools transpile:debug","optimize":"uglifyjs dist/preact.dev.js -c conditionals=false,sequences=false,loops=false,join_vars=false,collapse_vars=false --pure-funcs=Object.defineProperty --mangle-props --mangle-regex=\"/^(_|normalizedNodeName|nextBase|prev[CPS]|_parentC)/\" --name-cache config/properties.json -b width=120,quote_style=3 -o dist/preact.js -p relative --in-source-map dist/preact.dev.js.map --source-map dist/preact.js.map","minify":"uglifyjs dist/preact.js -c collapse_vars,evaluate,screw_ie8,unsafe,loops=false,keep_fargs=false,pure_getters,unused,dead_code -m -o dist/preact.min.js -p relative --in-source-map dist/preact.js.map --source-map dist/preact.min.js.map","prepare":"npm run build","strip:main":"jscodeshift --run-in-band -s -t config/codemod-strip-tdz.js dist/preact.dev.js && jscodeshift --run-in-band -s -t config/codemod-const.js dist/preact.dev.js && jscodeshift --run-in-band -s -t config/codemod-let-name.js dist/preact.dev.js","strip:esm":"jscodeshift --run-in-band -s -t config/codemod-strip-tdz.js dist/preact.mjs && jscodeshift --run-in-band -s -t config/codemod-const.js dist/preact.mjs && jscodeshift --run-in-band -s -t config/codemod-let-name.js dist/preact.mjs","strip":"npm-run-all strip:main strip:esm","size":"node -e \"process.stdout.write('gzip size: ')\" && gzip-size --raw dist/preact.min.js","test":"npm-run-all lint --parallel test:mocha test:karma test:ts test:flow test:size","test:flow":"flow check","test:ts":"tsc -p test/ts/ && mocha --require babel-register test/ts/**/*-test.js","test:mocha":"mocha --recursive --require babel-register test/shared test/node","test:karma":"karma start test/karma.conf.js --single-run","test:mocha:watch":"npm run test:mocha -- --watch","test:karma:watch":"npm run test:karma -- no-single-run","test:size":"bundlesize","lint":"eslint debug devtools src test","prepublishOnly":"npm run build","smart-release":"npm run build && npm test && git commit -am $npm_package_version && git tag $npm_package_version && git push && git push --tags && npm publish","release":"cross-env npm run smart-release","postinstall":"node -e \"console.log('\\u001b[35m\\u001b[1mLove Preact? You can now donate to our open collective:\\u001b[22m\\u001b[39m\\n > \\u001b[34mhttps://opencollective.com/preact/donate\\u001b[0m')\""},"eslintConfig":{"extends":"./config/eslint-config.js"},"typings":"./dist/preact.d.ts","repository":{"type":"git","url":"https://github.com/developit/preact.git"},"keywords":["preact","react","virtual dom","vdom","components","virtual","dom"],"author":{"name":"Jason Miller","email":"jason@developit.ca"},"license":"MIT","bugs":{"url":"https://github.com/developit/preact/issues"},"homepage":"https://github.com/developit/preact","devDependencies":{"@types/chai":"^4.1.7","@types/mocha":"^5.2.5","@types/node":"^9.6.40","babel-cli":"^6.24.1","babel-core":"^6.24.1","babel-eslint":"^8.2.6","babel-loader":"^7.0.0","babel-plugin-transform-object-rest-spread":"^6.23.0","babel-plugin-transform-react-jsx":"^6.24.1","babel-preset-env":"^1.6.1","bundlesize":"^0.17.0","chai":"^4.2.0","copyfiles":"^2.1.0","core-js":"^2.6.0","coveralls":"^3.0.0","cross-env":"^5.1.4","diff":"^3.0.0","eslint":"^4.18.2","eslint-plugin-react":"^7.11.1","flow-bin":"^0.89.0","gzip-size-cli":"^2.0.0","istanbul-instrumenter-loader":"^3.0.0","jscodeshift":"^0.5.0","karma":"^3.1.3","karma-babel-preprocessor":"^7.0.0","karma-chai-sinon":"^0.1.5","karma-chrome-launcher":"^2.2.0","karma-coverage":"^1.1.2","karma-mocha":"^1.3.0","karma-mocha-reporter":"^2.2.5","karma-sauce-launcher":"^1.2.0","karma-sinon":"^1.0.5","karma-source-map-support":"^1.3.0","karma-sourcemap-loader":"^0.3.6","karma-webpack":"^3.0.5","mocha":"^5.0.4","npm-run-all":"^4.1.5","puppeteer":"^1.11.0","rimraf":"^2.5.3","rollup":"^0.57.1","rollup-plugin-babel":"^3.0.2","rollup-plugin-memory":"^3.0.0","rollup-plugin-node-resolve":"^3.4.0","sinon":"^4.4.2","sinon-chai":"^3.3.0","typescript":"^3.0.1","uglify-js":"^2.7.5","webpack":"^4.27.1"},"greenkeeper":{"ignore":["babel-cli","babel-core","babel-eslint","babel-loader","jscodeshift","rollup-plugin-babel"]},"bundlesize":[{"path":"./dist/preact.min.js","threshold":"4Kb"}],"licenseText":"The MIT License (MIT)\n\nCopyright (c) 2015-present Jason Miller\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n","_id":"preact@8.5.0","dist":{"shasum":"05690de3af035cd8ad393e8b4057b8ab29aedee1","integrity":"sha512-S2OOz+lRjfbqDbV5LOIcJ6yfYvshDtKvvsMwaFW84wuw4HtFUYH67T+hnWhdCDYtW8BfmyIg9utz16s6U80HbA==","tarball":"http://localhost:4545/npm/registry/preact/preact-8.5.0.tgz","fileCount":56,"unpackedSize":978252,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdRIIwCRA9TVsSAnZWagAAFiUP/j+wGH4kdXgyELOhS5qd\nHP2hzGFDVm6oViJKM4AboDQJtoqirCQHpfjB+QkeiPn97HHEGfsDxbxzdMMw\nGiaQKum0A6crCuEPxohR7bsV3xN6ANLnFWCBsQ80aLZ50lVUTkRQRMAjgEcT\n5zl1CaS9GSSmE1B5fMVTWWFSVU/mbGPcAkXZMjwdqci88RHf3mtgn8IJ/5oC\n4xiZSobSvIBUlv9cBqIVaflvxHl9xZpdqzV1iddF4C7Ou71edxVjWBwXdEoa\nL8tNmJmtJPEUR4h12ZAjQFDp1wiM/iBbT/5yXGE8rqlDxtDf1WLtDI2sU0SK\nYykUj3yCNwCT9Li7A6O6I0cTQu8CKIQ8B7JtrBjMR/PzLQFSsxXBYVfc2IB9\n5VcuUpmGvqcnn4l36dPzBQEZlkRQSZ92N0L2WZtkwuN6uTqAOP85XSQ+FjyD\nk1kuNrwXimBKuL4g7LiClTYMRylwcA8WR8T93Lc5DbXMQRcUlAqhQyE/2UBf\niTI2jBeJmjGyUJgyhmt56qaWk2Y+5ltXaq4evb5/JpAgrO0vMEsGbQ0B/RYo\nCt/OHE/LAHhZ+/OCTuDsJS1PsWoT81tXqizE9/wQ5KJTeew7b7tZOn6Au5S/\nyv0eQmO6mqk0voLz60hLauHhFFPP4MkNFGhCr4Dt7QT+G2QRuQmwNXOeLuJg\nQE+S\r\n=36vW\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCn0ujGzdwnThu9HSRBi0eCFunx+2lGs5QHORpDgof9GgIhAOYMIEO5fsehLX7jBaOKl/TA1Hz6iCeDzOAotrwSfmjV"}]},"maintainers":[{"email":"jason@developit.ca","name":"developit"},{"email":"ulliftw@gmail.com","name":"harmony"},{"email":"luke@lukeed.com","name":"lukeed"},{"email":"marvin@marvinhagemeister.de","name":"marvinhagemeister"},{"email":"prateek89born@gmail.com","name":"prateekbh"},{"email":"hello@preactjs.com","name":"preactjs"},{"email":"allamsetty.anup@gmail.com","name":"reznord"}],"_npmUser":{"name":"harmony","email":"npm.leah@hrmny.sh"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/preact_8.5.0_1564770863260_0.5179813670573445"},"_hasShrinkwrap":false},"10.0.0-rc.1":{"name":"preact","amdName":"preact","version":"10.0.0-rc.1","private":false,"description":"Fast 3kb React-compatible Virtual DOM library.","main":"dist/preact.js","module":"dist/preact.module.js","umd:main":"dist/preact.umd.js","source":"src/index.js","license":"MIT","types":"src/index.d.ts","scripts":{"build":"npm-run-all --parallel build:*","build:core":"microbundle build --raw","build:debug":"microbundle build --raw --cwd debug","build:hooks":"microbundle build --raw --cwd hooks","build:test-utils":"microbundle build --raw --cwd test-utils","build:compat":"microbundle build --raw --cwd compat --globals 'preact/hooks=preactHooks'","dev":"microbundle watch --raw --format cjs","dev:hooks":"microbundle watch --raw --format cjs --cwd hooks","dev:compat":"microbundle watch --raw --format cjs --cwd compat --globals 'preact/hooks=preactHooks'","test":"npm-run-all lint build --parallel test:mocha test:karma test:ts","test:flow":"flow check","test:ts":"tsc -p test/ts/ && mocha --require babel-register test/ts/**/*-test.js","test:mocha":"mocha --recursive --require babel-register test/shared test/node","test:karma":"cross-env COVERAGE=true karma start karma.conf.js --single-run","test:mocha:watch":"npm run test:mocha -- --watch","test:karma:watch":"karma start karma.conf.js --no-single-run","test:karma:hooks":"cross-env COVERAGE=false karma start karma.conf.js --grep=hooks/test/browser/**.js --no-single-run","test:karma:test-utils":"cross-env PERFORMANCE=false COVERAGE=false karma start karma.conf.js --grep=test-utils/test/shared/**.js --no-single-run","test:karma:bench":"cross-env PERFORMANCE=true COVERAGE=false karma start karma.conf.js --grep=test/benchmarks/**.js --single-run","benchmark":"npm run test:karma:bench -- no-single-run","lint":"eslint src test debug compat hooks test-utils","postinstall":"node -e \"console.log('\\u001b[35m\\u001b[1mLove Preact? You can now donate to our open collective:\\u001b[22m\\u001b[39m\\n > \\u001b[34mhttps://opencollective.com/preact/donate\\u001b[0m')\""},"eslintConfig":{"extends":"developit","settings":{"react":{"pragma":"createElement"}},"rules":{"camelcase":[1,{"allow":["__test__*","unstable_*","UNSAFE_*"]}],"prefer-rest-params":0,"prefer-spread":0,"no-cond-assign":0,"react/jsx-no-bind":0,"react/prefer-stateless-function":0,"react/sort-comp":0,"jest/valid-expect":0,"jest/no-disabled-tests":0,"react/no-find-dom-node":0}},"eslintIgnore":["test/fixtures","test/ts/","*.ts","dist"],"keywords":["preact","react","virtual dom","vdom","components","virtual","dom"],"authors":["Jason Miller "],"repository":{"type":"git","url":"git+https://github.com/preactjs/preact.git"},"bugs":{"url":"https://github.com/preactjs/preact/issues"},"homepage":"https://github.com/preactjs/preact","devDependencies":{"@types/chai":"^4.1.2","@types/mocha":"^5.0.0","@types/node":"^10.5.2","babel-cli":"6.26.0","babel-core":"6.26.3","babel-loader":"7.1.5","babel-plugin-istanbul":"5.0.1","babel-plugin-transform-object-rest-spread":"^6.23.0","babel-plugin-transform-react-jsx":"^6.24.1","babel-preset-env":"^1.6.1","benchmark":"^2.1.4","chai":"^4.1.2","coveralls":"^3.0.0","cross-env":"^5.2.0","diff":"^3.5.0","eslint":"5.15.1","eslint-config-developit":"^1.1.1","eslint-plugin-react":"7.12.4","flow-bin":"^0.79.1","karma":"^3.0.0","karma-babel-preprocessor":"^7.0.0","karma-chai-sinon":"^0.1.5","karma-chrome-launcher":"^2.2.0","karma-coverage":"^1.1.2","karma-mocha":"^1.3.0","karma-mocha-reporter":"^2.2.5","karma-sauce-launcher":"^1.2.0","karma-sinon":"^1.0.5","karma-source-map-support":"^1.3.0","karma-sourcemap-loader":"^0.3.7","karma-webpack":"^3.0.5","lodash":"^4.17.10","microbundle":"^0.11.0","mocha":"^5.2.0","npm-run-all":"^4.0.0","prop-types":"^15.7.2","sinon":"^6.1.3","sinon-chai":"^3.0.0","travis-size-report":"^1.0.1","typescript":"^3.0.1","webpack":"^4.3.0"},"gitHead":"e7c39e8528e5f407f5accb91efd49aeefb9776d7","readme":"
Fast 3kB alternative to React with the same modern API.
\n\n**All the power of Virtual DOM components, without the overhead:**\n\n- Familiar React API & patterns: [ES6 Class] and [Functional Components]\n- Extensive React compatibility via a simple [preact-compat] alias\n- Everything you need: JSX, VDOM, React DevTools, HMR, SSR..\n- A highly optimized diff algorithm and seamless Server Side Rendering\n- Transparent asynchronous rendering with a pluggable scheduler\n- 🆕💥 **Instant no-config app bundling with [Preact CLI](https://github.com/preactjs/preact-cli)**\n\n### 💁 More information at the [Preact Website ➞](https://preactjs.com)\n\n\n---\n\n\n\n- [Demos](#demos)\n- [Libraries & Add-ons](#libraries--add-ons)\n- [Getting Started](#getting-started)\n\t- [Import what you need](#import-what-you-need)\n\t- [Rendering JSX](#rendering-jsx)\n\t- [Components](#components)\n\t- [Props & State](#props--state)\n- [Linked State](#linked-state)\n- [Examples](#examples)\n- [Extensions](#extensions)\n- [Debug Mode](#debug-mode)\n- [Backers](#backers)\n- [Sponsors](#sponsors)\n- [License](#license)\n\n\n\n\n# Preact\n\n[![npm](https://img.shields.io/npm/v/preact.svg)](http://npm.im/preact)\n[![CDNJS](https://img.shields.io/cdnjs/v/preact.svg)](https://cdnjs.com/libraries/preact)\n[![Preact Slack Community](https://preact-slack.now.sh/badge.svg)](https://preact-slack.now.sh)\n[![OpenCollective Backers](https://opencollective.com/preact/backers/badge.svg)](#backers)\n[![OpenCollective Sponsors](https://opencollective.com/preact/sponsors/badge.svg)](#sponsors)\n[![travis](https://travis-ci.org/preactjs/preact.svg?branch=master)](https://travis-ci.org/preactjs/preact)\n[![coveralls](https://img.shields.io/coveralls/preactjs/preact/master.svg)](https://coveralls.io/github/preactjs/preact)\n[![gzip size](http://img.badgesize.io/https://unpkg.com/preact/dist/preact.min.js?compression=gzip)](https://unpkg.com/preact/dist/preact.min.js)\n[![install size](https://packagephobia.now.sh/badge?p=preact)](https://packagephobia.now.sh/result?p=preact)\n\nPreact supports modern browsers and IE9+:\n\n[![Browsers](https://saucelabs.com/browser-matrix/preact.svg)](https://saucelabs.com/u/preact)\n\n\n---\n\n\n## Demos\n\n#### Real-World Apps\n\n- [**Preact Hacker News**](https://hn.kristoferbaxter.com) _([GitHub Project](https://github.com/kristoferbaxter/preact-hn))_\n- [**Play.cash**](https://play.cash) :notes: _([GitHub Project](https://github.com/feross/play.cash))_\n- [**BitMidi**](https://bitmidi.com/) 🎹 Wayback machine for free MIDI files _([GitHub Project](https://github.com/feross/bitmidi.com))_\n- [**Ultimate Guitar**](https://www.ultimate-guitar.com) 🎸speed boosted by Preact.\n- [**ESBench**](http://esbench.com) is built using Preact.\n- [**BigWebQuiz**](https://bigwebquiz.com) _([GitHub Project](https://github.com/jakearchibald/big-web-quiz))_\n- [**Nectarine.rocks**](http://nectarine.rocks) _([GitHub Project](https://github.com/developit/nectarine))_ :peach:\n- [**TodoMVC**](https://preact-todomvc.surge.sh) _([GitHub Project](https://github.com/developit/preact-todomvc))_\n- [**OSS.Ninja**](https://oss.ninja) _([GitHub Project](https://github.com/developit/oss.ninja))_\n- [**GuriVR**](https://gurivr.com) _([GitHub Project](https://github.com/opennewslabs/guri-vr))_\n- [**Color Picker**](https://colors.now.sh) _([GitHub Project](https://github.com/lukeed/colors-app))_ :art:\n- [**Offline Gallery**](https://use-the-platform.com/offline-gallery/) _([GitHub Project](https://github.com/vaneenige/offline-gallery/))_ :balloon:\n- [**Periodic Weather**](https://use-the-platform.com/periodic-weather/) _([GitHub Project](https://github.com/vaneenige/periodic-weather/))_ :sunny:\n- [**Rugby News Board**](http://nbrugby.com) _[(GitHub Project)](https://github.com/rugby-board/rugby-board-node)_\n- [**Preact Gallery**](https://preact.gallery/) an 8KB photo gallery PWA built using Preact.\n- [**Rainbow Explorer**](https://use-the-platform.com/rainbow-explorer/) Preact app to translate real life color to digital color _([Github project](https://github.com/vaneenige/rainbow-explorer))_.\n- [**YASCC**](https://carlosqsilva.github.io/YASCC/#/) Yet Another SoundCloud Client _([Github project](https://github.com/carlosqsilva/YASCC))_.\n- [**Journalize**](https://preact-journal.herokuapp.com/) 14k offline-capable journaling PWA using preact. _([Github project](https://github.com/jpodwys/preact-journal))_.\n- [**Proxx**](https://proxx.app) A game of proximity by GoogleChromeLabs using preact. _([Github project](https://github.com/GoogleChromeLabs/proxx))_.\n- [**Web Maker**](https://webmaker.app) An offline and blazing fast frontend playground built using Preact. _([Github project](https://github.com/chinchang/web-maker))_.\n\n\n#### Runnable Examples\n\n- [**Flickr Browser**](http://codepen.io/developit/full/VvMZwK/) (@ CodePen)\n- [**Animating Text**](http://codepen.io/developit/full/LpNOdm/) (@ CodePen)\n- [**60FPS Rainbow Spiral**](http://codepen.io/developit/full/xGoagz/) (@ CodePen)\n- [**Simple Clock**](http://jsfiddle.net/developit/u9m5x0L7/embedded/result,js/) (@ JSFiddle)\n- [**3D + ThreeJS**](http://codepen.io/developit/pen/PPMNjd?editors=0010) (@ CodePen)\n- [**Stock Ticker**](http://codepen.io/developit/pen/wMYoBb?editors=0010) (@ CodePen)\n- [*Create your Own!*](https://jsfiddle.net/developit/rs6zrh5f/embedded/result/) (@ JSFiddle)\n\n### Starter Projects\n\n- [**Preact Boilerplate**](https://preact-boilerplate.surge.sh) _([GitHub Project](https://github.com/developit/preact-boilerplate))_ :zap:\n- [**Preact Offline Starter**](https://preact-starter.now.sh) _([GitHub Project](https://github.com/lukeed/preact-starter))_ :100:\n- [**Preact PWA**](https://preact-pwa-yfxiijbzit.now.sh/) _([GitHub Project](https://github.com/ezekielchentnik/preact-pwa))_ :hamburger:\n- [**Parcel + Preact + Unistore Starter**](https://github.com/hwclass/parcel-preact-unistore-starter)\n- [**Preact Mobx Starter**](https://awaw00.github.io/preact-mobx-starter/) _([GitHub Project](https://github.com/awaw00/preact-mobx-starter))_ :sunny:\n- [**Preact Redux Example**](https://github.com/developit/preact-redux-example) :star:\n- [**Preact Redux/RxJS/Reselect Example**](https://github.com/continuata/preact-seed)\n- [**V2EX Preact**](https://github.com/yanni4night/v2ex-preact)\n- [**Preact Coffeescript**](https://github.com/crisward/preact-coffee)\n- [**Preact + TypeScript + Webpack**](https://github.com/k1r0s/bleeding-preact-starter)\n- [**0 config => Preact + Poi**](https://github.com/k1r0s/preact-poi-starter)\n- [**Zero configuration => Preact + Typescript + Parcel**](https://github.com/aalises/preact-typescript-parcel-starter)\n\n---\n\n## Libraries & Add-ons\n\n- :raised_hands: [**preact-compat**](https://git.io/preact-compat): use any React library with Preact *([full example](http://git.io/preact-compat-example))*\n- :twisted_rightwards_arrows: [**preact-context**](https://github.com/valotas/preact-context): React's `createContext` api for Preact\n- :page_facing_up: [**preact-render-to-string**](https://git.io/preact-render-to-string): Universal rendering.\n- :eyes: [**preact-render-spy**](https://github.com/mzgoddard/preact-render-spy): Enzyme-lite: Renderer with access to the produced virtual dom for testing.\n- :loop: [**preact-render-to-json**](https://git.io/preact-render-to-json): Render for Jest Snapshot testing.\n- :earth_americas: [**preact-router**](https://git.io/preact-router): URL routing for your components\n- :bookmark_tabs: [**preact-markup**](https://git.io/preact-markup): Render HTML & Custom Elements as JSX & Components\n- :satellite: [**preact-portal**](https://git.io/preact-portal): Render Preact components into (a) SPACE :milky_way:\n- :pencil: [**preact-richtextarea**](https://git.io/preact-richtextarea): Simple HTML editor component\n- :bookmark: [**preact-token-input**](https://github.com/developit/preact-token-input): Text field that tokenizes input, for things like tags\n- :card_index: [**preact-virtual-list**](https://github.com/developit/preact-virtual-list): Easily render lists with millions of rows ([demo](https://jsfiddle.net/developit/qqan9pdo/))\n- :repeat: [**preact-cycle**](https://git.io/preact-cycle): Functional-reactive paradigm for Preact\n- :triangular_ruler: [**preact-layout**](https://download.github.io/preact-layout/): Small and simple layout library\n- :thought_balloon: [**preact-socrates**](https://github.com/matthewmueller/preact-socrates): Preact plugin for [Socrates](http://github.com/matthewmueller/socrates)\n- :rowboat: [**preact-flyd**](https://github.com/xialvjun/preact-flyd): Use [flyd](https://github.com/paldepind/flyd) FRP streams in Preact + JSX\n- :speech_balloon: [**preact-i18nline**](https://github.com/download/preact-i18nline): Integrates the ecosystem around [i18n-js](https://github.com/everydayhero/i18n-js) with Preact via [i18nline](https://github.com/download/i18nline).\n- :microscope: [**preact-jsx-chai**](https://git.io/preact-jsx-chai): JSX assertion testing _(no DOM, right in Node)_\n- :tophat: [**preact-classless-component**](https://github.com/ld0rman/preact-classless-component): create preact components without the class keyword\n- :hammer: [**preact-hyperscript**](https://github.com/queckezz/preact-hyperscript): Hyperscript-like syntax for creating elements\n- :white_check_mark: [**shallow-compare**](https://github.com/tkh44/shallow-compare): simplified `shouldComponentUpdate` helper.\n- :shaved_ice: [**preact-codemod**](https://github.com/vutran/preact-codemod): Transform your React code to Preact.\n- :construction_worker: [**preact-helmet**](https://github.com/download/preact-helmet): A document head manager for Preact\n- :necktie: [**preact-delegate**](https://github.com/NekR/preact-delegate): Delegate DOM events\n- :art: [**preact-stylesheet-decorator**](https://github.com/k1r0s/preact-stylesheet-decorator): Add Scoped Stylesheets to your Preact Components\n- :electric_plug: [**preact-routlet**](https://github.com/k1r0s/preact-routlet): Simple `Component Driven` Routing for Preact using ES7 Decorators\n- :fax: [**preact-bind-group**](https://github.com/k1r0s/preact-bind-group): Preact Forms made easy, Group Events into a Single Callback\n- :hatching_chick: [**preact-habitat**](https://github.com/zouhir/preact-habitat): Declarative Preact widgets renderer in any CMS or DOM host ([demo](https://codepen.io/zouhir/pen/brrOPB)).\n- :tada: [**proppy-preact**](https://github.com/fahad19/proppy): Functional props composition for Preact components\n\n#### UI Component Libraries\n\n> Want to prototype something or speed up your development? Try one of these toolkits:\n\n- [**preact-material-components**](https://github.com/prateekbh/preact-material-components): Material Design Components for Preact ([website](https://material.preactjs.com/))\n- [**preact-mdc**](https://github.com/BerndWessels/preact-mdc): Material Design Components for Preact ([demo](https://github.com/BerndWessels/preact-mdc-demo))\n- [**preact-mui**](https://git.io/v1aVO): The MUI CSS Preact library.\n- [**preact-photon**](https://git.io/preact-photon): build beautiful desktop UI with [photon](http://photonkit.com)\n- [**preact-mdl**](https://git.io/preact-mdl): [Material Design Lite](https://getmdl.io) for Preact\n- [**preact-weui**](https://github.com/afeiship/preact-weui): [Weui](https://github.com/afeiship/preact-weui) for Preact\n- [**preact-charts**](https://github.com/pmkroeker/preact-charts): Charts for Preact\n\n\n---\n\n## Getting Started\n\n> 💁 _**Note:** You [don't need ES2015 to use Preact](https://github.com/developit/preact-in-es3)... but give it a try!_\n\nThe easiest way to get started with Preact is to install [Preact CLI](https://github.com/preactjs/preact-cli). This simple command-line tool wraps up the best possible Webpack and Babel setup for you, and even keeps you up-to-date as the underlying tools change. Best of all, it's easy to understand! It builds your app in a single command (`preact build`), doesn't need any configuration, and bakes in best-practises 🙌.\n\nThe following guide assumes you have some sort of ES2015 build set up using babel and/or webpack/browserify/gulp/grunt/etc.\n\nYou can also start with [preact-boilerplate] or a [CodePen Template](http://codepen.io/developit/pen/pgaROe?editors=0010).\n\n\n### Import what you need\n\nThe `preact` module provides both named and default exports, so you can either import everything under a namespace of your choosing, or just what you need as locals:\n\n##### Named:\n\n```js\nimport { h, render, Component } from 'preact';\n\n// Tell Babel to transform JSX into h() calls:\n/** @jsx h */\n```\n\n##### Default:\n\n```js\nimport preact from 'preact';\n\n// Tell Babel to transform JSX into preact.h() calls:\n/** @jsx preact.h */\n```\n\n> Named imports work well for highly structured applications, whereas the default import is quick and never needs to be updated when using different parts of the library.\n>\n> Instead of declaring the `@jsx` pragma in your code, it's best to configure it globally in a `.babelrc`:\n>\n> **For Babel 5 and prior:**\n>\n> ```json\n> { \"jsxPragma\": \"h\" }\n> ```\n>\n> **For Babel 6:**\n>\n> ```json\n> {\n> \"plugins\": [\n> [\"transform-react-jsx\", { \"pragma\":\"h\" }]\n> ]\n> }\n> ```\n>\n> **For Babel 7:**\n>\n> ```json\n> {\n> \"plugins\": [\n> [\"@babel/plugin-transform-react-jsx\", { \"pragma\":\"h\" }]\n> ]\n> }\n> ```\n> **For using Preact along with TypeScript add to `tsconfig.json`:**\n>\n> ```json\n> {\n> \"jsx\": \"react\",\n> \"jsxFactory\": \"h\",\n> }\n> ```\n\n\n### Rendering JSX\n\nOut of the box, Preact provides an `h()` function that turns your JSX into Virtual DOM elements _([here's how](http://jasonformat.com/wtf-is-jsx))_. It also provides a `render()` function that creates a DOM tree from that Virtual DOM.\n\nTo render some JSX, just import those two functions and use them like so:\n\n```js\nimport { h, render } from 'preact';\n\nrender((\n\t
\n\t\tHello, world!\n\t\t\n\t
\n), document.body);\n```\n\nThis should seem pretty straightforward if you've used hyperscript or one of its many friends. If you're not, the short of it is that the `h()` function import gets used in the final, transpiled code as a drop in replacement for `React.createElement()`, and so needs to be imported even if you don't explicitly use it in the code you write. Also note that if you're the kind of person who likes writing your React code in \"pure JavaScript\" (you know who you are) you will need to use `h()` wherever you would otherwise use `React.createElement()`.\n\nRendering hyperscript with a virtual DOM is pointless, though. We want to render components and have them updated when data changes - that's where the power of virtual DOM diffing shines. :star2:\n\n\n### Components\n\nPreact exports a generic `Component` class, which can be extended to build encapsulated, self-updating pieces of a User Interface. Components support all of the standard React [lifecycle methods], like `shouldComponentUpdate()` and `componentWillReceiveProps()`. Providing specific implementations of these methods is the preferred mechanism for controlling _when_ and _how_ components update.\n\nComponents also have a `render()` method, but unlike React this method is passed `(props, state)` as arguments. This provides an ergonomic means to destructure `props` and `state` into local variables to be referenced from JSX.\n\nLet's take a look at a very simple `Clock` component, which shows the current time.\n\n```js\nimport { h, render, Component } from 'preact';\n\nclass Clock extends Component {\n\trender() {\n\t\tlet time = new Date();\n\t\treturn ;\n\t}\n}\n\n// render an instance of Clock into :\nrender(, document.body);\n```\n\n\nThat's great. Running this produces the following HTML DOM structure:\n\n```html\n10:28:57 PM\n```\n\nIn order to have the clock's time update every second, we need to know when `` gets mounted to the DOM. _If you've used HTML5 Custom Elements, this is similar to the `attachedCallback` and `detachedCallback` lifecycle methods._ Preact invokes the following lifecycle methods if they are defined for a Component:\n\n| Lifecycle method | When it gets called |\n|-----------------------------|--------------------------------------------------|\n| `componentWillMount` | before the component gets mounted to the DOM |\n| `componentDidMount` | after the component gets mounted to the DOM |\n| `componentWillUnmount` | prior to removal from the DOM |\n| `componentWillReceiveProps` | before new props get accepted |\n| `shouldComponentUpdate` | before `render()`. Return `false` to skip render |\n| `componentWillUpdate` | before `render()` |\n| `componentDidUpdate` | after `render()` |\n\n\n\nSo, we want to have a 1-second timer start once the Component gets added to the DOM, and stop if it is removed. We'll create the timer and store a reference to it in `componentDidMount()`, and stop the timer in `componentWillUnmount()`. On each timer tick, we'll update the component's `state` object with a new time value. Doing this will automatically re-render the component.\n\n```js\nimport { h, render, Component } from 'preact';\n\nclass Clock extends Component {\n\tconstructor() {\n\t\tsuper();\n\t\t// set initial time:\n\t\tthis.state = {\n\t\t\ttime: Date.now()\n\t\t};\n\t}\n\n\tcomponentDidMount() {\n\t\t// update time every second\n\t\tthis.timer = setInterval(() => {\n\t\t\tthis.setState({ time: Date.now() });\n\t\t}, 1000);\n\t}\n\n\tcomponentWillUnmount() {\n\t\t// stop when not renderable\n\t\tclearInterval(this.timer);\n\t}\n\n\trender(props, state) {\n\t\tlet time = new Date(state.time).toLocaleTimeString();\n\t\treturn { time };\n\t}\n}\n\n// render an instance of Clock into :\nrender(, document.body);\n```\n\nNow we have [a ticking clock](http://jsfiddle.net/developit/u9m5x0L7/embedded/result,js/)!\n\n\n### Props & State\n\nThe concept (and nomenclature) for `props` and `state` is the same as in React. `props` are passed to a component by defining attributes in JSX, `state` is internal state. Changing either triggers a re-render, though by default Preact re-renders Components asynchronously for `state` changes and synchronously for `props` changes. You can tell Preact to render `prop` changes asynchronously by setting `options.syncComponentUpdates` to `false`.\n\n\n---\n\n\n## Linked State\n\nOne area Preact takes a little further than React is in optimizing state changes. A common pattern in ES2015 React code is to use Arrow functions within a `render()` method in order to update state in response to events. Creating functions enclosed in a scope on every render is inefficient and forces the garbage collector to do more work than is necessary.\n\nOne solution to this is to bind component methods declaratively.\nHere is an example using [decko](http://git.io/decko):\n\n```js\nclass Foo extends Component {\n\t@bind\n\tupdateText(e) {\n\t\tthis.setState({ text: e.target.value });\n\t}\n\trender({ }, { text }) {\n\t\treturn ;\n\t}\n}\n```\n\nWhile this achieves much better runtime performance, it's still a lot of unnecessary code to wire up state to UI.\n\nFortunately there is a solution, in the form of a module called [linkstate](https://github.com/developit/linkstate). Calling `linkState(component, 'text')` returns a function that accepts an Event and uses its associated value to update the given property in your component's state. Calls to `linkState()` with the same arguments are cached, so there is no performance penalty. Here is the previous example rewritten using _Linked State_:\n\n```js\nimport linkState from 'linkstate';\n\nclass Foo extends Component {\n\trender({ }, { text }) {\n\t\treturn ;\n\t}\n}\n```\n\nSimple and effective. It handles linking state from any input type, or an optional second parameter can be used to explicitly provide a keypath to the new state value.\n\n> **Note:** In Preact 7 and prior, `linkState()` was built right into Component. In 8.0, it was moved to a separate module. You can restore the 7.x behavior by using linkstate as a polyfill - see [the linkstate docs](https://github.com/developit/linkstate#usage).\n\n\n\n## Examples\n\nHere is a somewhat verbose Preact `` component:\n\n```js\nclass Link extends Component {\n\trender(props, state) {\n\t\treturn {props.children};\n\t}\n}\n```\n\nSince this is ES6/ES2015, we can further simplify:\n\n```js\nclass Link extends Component {\n render({ href, children }) {\n return ;\n }\n}\n\n// or, for wide-open props support:\nclass Link extends Component {\n render(props) {\n return ;\n }\n}\n\n// or, as a stateless functional component:\nconst Link = ({ children, ...props }) => (\n { children }\n);\n```\n\n\n## Extensions\n\nIt is likely that some projects based on Preact would wish to extend Component with great new functionality.\n\nPerhaps automatic connection to stores for a Flux-like architecture, or mixed-in context bindings to make it feel more like `React.createClass()`. Just use ES2015 inheritance:\n\n```js\nclass BoundComponent extends Component {\n\tconstructor(props) {\n\t\tsuper(props);\n\t\tthis.bind();\n\t}\n\tbind() {\n\t\tthis.binds = {};\n\t\tfor (let i in this) {\n\t\t\tthis.binds[i] = this[i].bind(this);\n\t\t}\n\t}\n}\n\n// example usage\nclass Link extends BoundComponent {\n\tclick() {\n\t\topen(this.href);\n\t}\n\trender() {\n\t\tlet { click } = this.binds;\n\t\treturn { children };\n\t}\n}\n```\n\n\nThe possibilities are pretty endless here. You could even add support for rudimentary mixins:\n\n```js\nclass MixedComponent extends Component {\n\tconstructor() {\n\t\tsuper();\n\t\t(this.mixins || []).forEach( m => Object.assign(this, m) );\n\t}\n}\n```\n\n## Debug Mode\n\nYou can inspect and modify the state of your Preact UI components at runtime using the\n[React Developer Tools](https://github.com/facebook/react-devtools) browser extension.\n\n1. Install the [React Developer Tools](https://github.com/facebook/react-devtools) extension\n2. Import the \"preact/debug\" module in your app\n3. Set `process.env.NODE_ENV` to 'development'\n4. Reload and go to the 'React' tab in the browser's development tools\n\n\n```js\nimport { h, Component, render } from 'preact';\n\n// Enable debug mode. You can reduce the size of your app by only including this\n// module in development builds. eg. In Webpack, wrap this with an `if (module.hot) {...}`\n// check.\nrequire('preact/debug');\n```\n\n### Runtime Error Checking\n\nTo enable debug mode, you need to set `process.env.NODE_ENV=development`. You can do this\nwith webpack via a builtin plugin.\n\n```js\n// webpack.config.js\n\n// Set NODE_ENV=development to enable error checking\nnew webpack.DefinePlugin({\n 'process.env': {\n 'NODE_ENV': JSON.stringify('development')\n }\n});\n```\n\nWhen enabled, warnings are logged to the console when undefined components or string refs\nare detected.\n\n### Developer Tools\n\nIf you only want to include devtool integration, without runtime error checking, you can\nreplace `preact/debug` in the above example with `preact/devtools`. This option doesn't\nrequire setting `NODE_ENV=development`.\n\n\n\n## Backers\nSupport us with a monthly donation and help us continue our activities. [[Become a backer](https://opencollective.com/preact#backer)]\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n## Sponsors\nBecome a sponsor and get your logo on our README on GitHub with a link to your site. [[Become a sponsor](https://opencollective.com/preact#sponsor)]\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n## License\n\nMIT\n\n\n\n[![Preact](http://i.imgur.com/YqCHvEW.gif)](https://preactjs.com)\n\n\n[preact-compat]: https://github.com/developit/preact-compat\n[ES6 Class]: https://facebook.github.io/react/docs/reusable-components.html#es6-classes\n[Functional Components]: https://facebook.github.io/react/blog/2015/10/07/react-v0.14.html#stateless-functional-components\n[hyperscript]: https://github.com/dominictarr/hyperscript\n[preact-boilerplate]: https://github.com/developit/preact-boilerplate\n[lifecycle methods]: https://facebook.github.io/react/docs/component-specs.html\n","readmeFilename":"README.md","_id":"preact@10.0.0-rc.1","_nodeVersion":"11.15.0","_npmVersion":"6.10.1","dist":{"integrity":"sha512-DyG8ySCbrQZ8w4cSyxnofM6yH/hzyYLHmIrE3xL1FjSCX4DpvVmP7DTpkV535FSQX0d2zOscb7DCIY+crBtxow==","shasum":"bae4419f8e289c327504d4ee6e734c377983548c","tarball":"http://localhost:4545/npm/registry/preact/preact-10.0.0-rc.1.tgz","fileCount":72,"unpackedSize":679393,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdRJ5lCRA9TVsSAnZWagAAdW0P/1LRcC3kme3I27EBoRS3\nL58mBrQ/MxxMH687VNc2KOq8/oQnbT+PfxNQMvrNJPNl5t1flutUnjZWoezX\nZnbmmLj4tlA3PD37X6w8upDt6XW+dRIGUCYPioUT+vaR+U3m4/10wuUon5yO\nWg/IjspZ0HiauScdPSAev6s5hGeKKPZsjcAMWHT1ahSCU94Hnny9aZvzDV+J\nde7THknOGlkxdkOteJ4AL46qanFTZTDoebm4mzIZOHgk51RVnne+CPLbMkLv\nJEXgJP0TWyVSzkwRmnEgKbd80f6IE0CA4aoV1ye0O7WocKNy4fNq65OqVN/v\n4TbPMsxqQV8QvxRXQ8cAfW64Z3fQwfeJj40DOQPa7E7pfac3wvxlvXEXdiYc\nfDAw2VHPrkWDNUHJG3amBq5ZA6LqHEtD/Ewd/+LgP2VOAXMucCjWnMWqdI99\n3+gDp27jZBPYBqClYzpjO9pRouG0ESbnWEFHpF2f41/9oOJGQBsvoewsCU1J\nBhJMV+iPv3fK6N1u+StIqGDtssJ2iA8riswjMo7VqQJ232sTUPW+4zeKMhjP\n8dBg8jt/tDM7CdCHUvYsrsxuTMjeoc83nEhI13DfnJzxheN1s76pUaGzIdUs\n388SNBoIbeseE2QR/3vTbNZTcQW82r0gHhr6Z/cJqKwQSo6n3+Dbc8IOgNkR\nEaZt\r\n=0QW8\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGOurPCfiTUhoLJ34/QrbHP5OFoS619J7ZEuwB0rV96QAiB90nHDQFV5wwtQ6w0pdK3U3KCBOtOIk0LoxRy6S8ZReA=="}]},"maintainers":[{"email":"jason@developit.ca","name":"developit"},{"email":"ulliftw@gmail.com","name":"harmony"},{"email":"luke@lukeed.com","name":"lukeed"},{"email":"marvin@marvinhagemeister.de","name":"marvinhagemeister"},{"email":"prateek89born@gmail.com","name":"prateekbh"},{"email":"hello@preactjs.com","name":"preactjs"},{"email":"allamsetty.anup@gmail.com","name":"reznord"}],"_npmUser":{"name":"marvinhagemeister","email":"marvin@marvinhagemeister.de"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/preact_10.0.0-rc.1_1564778084833_0.9974358457635735"},"_hasShrinkwrap":false},"8.5.1":{"name":"preact","version":"8.5.1","description":"Fast 3kb React alternative with the same modern API. Components & Virtual DOM.","main":"dist/preact.js","jsnext:main":"dist/preact.mjs","module":"dist/preact.mjs","dev:main":"dist/preact.dev.js","minified:main":"dist/preact.min.js","unpkg":"dist/preact.min.js","types":"dist/preact.d.ts","browser":"dist/preact.umd.js","scripts":{"clean":"rimraf dist/ devtools.js devtools.js.map debug.js debug.js.map test/ts/**/*.js","copy-flow-definition":"copyfiles -f src/preact.js.flow dist","copy-typescript-definition":"copyfiles -f src/preact.d.ts dist","build":"npm-run-all --silent clean transpile copy-flow-definition copy-typescript-definition strip optimize minify size","flow":"flow","transpile:main":"rollup -c config/rollup.config.js","transpile:devtools":"rollup -c config/rollup.config.devtools.js","transpile:esm":"rollup -c config/rollup.config.module.js","transpile:umd":"rollup -c config/rollup.config.umd.js","transpile:debug":"babel debug/ -o debug.js -s","transpile":"npm-run-all transpile:main transpile:esm transpile:umd transpile:devtools transpile:debug","optimize":"uglifyjs dist/preact.dev.js -c conditionals=false,sequences=false,loops=false,join_vars=false,collapse_vars=false --pure-funcs=Object.defineProperty --mangle-props --mangle-regex=\"/^(_|normalizedNodeName|nextBase|prev[CPS]|_parentC)/\" --name-cache config/properties.json -b width=120,quote_style=3 -o dist/preact.js -p relative --in-source-map dist/preact.dev.js.map --source-map dist/preact.js.map","minify":"uglifyjs dist/preact.js -c collapse_vars,evaluate,screw_ie8,unsafe,loops=false,keep_fargs=false,pure_getters,unused,dead_code -m -o dist/preact.min.js -p relative --in-source-map dist/preact.js.map --source-map dist/preact.min.js.map","prepare":"npm run build","strip:main":"jscodeshift --run-in-band -s -t config/codemod-strip-tdz.js dist/preact.dev.js && jscodeshift --run-in-band -s -t config/codemod-const.js dist/preact.dev.js && jscodeshift --run-in-band -s -t config/codemod-let-name.js dist/preact.dev.js","strip:esm":"jscodeshift --run-in-band -s -t config/codemod-strip-tdz.js dist/preact.mjs && jscodeshift --run-in-band -s -t config/codemod-const.js dist/preact.mjs && jscodeshift --run-in-band -s -t config/codemod-let-name.js dist/preact.mjs","strip":"npm-run-all strip:main strip:esm","size":"node -e \"process.stdout.write('gzip size: ')\" && gzip-size --raw dist/preact.min.js","test":"npm-run-all lint --parallel test:mocha test:karma test:ts test:flow test:size","test:flow":"flow check","test:ts":"tsc -p test/ts/ && mocha --require babel-register test/ts/**/*-test.js","test:mocha":"mocha --recursive --require babel-register test/shared test/node","test:karma":"karma start test/karma.conf.js --single-run","test:mocha:watch":"npm run test:mocha -- --watch","test:karma:watch":"npm run test:karma -- no-single-run","test:size":"bundlesize","lint":"eslint debug devtools src test","prepublishOnly":"npm run build","smart-release":"npm run build && npm test && git commit -am $npm_package_version && git tag $npm_package_version && git push && git push --tags && npm publish","release":"cross-env npm run smart-release","postinstall":"node -e \"console.log('\\u001b[35m\\u001b[1mLove Preact? You can now donate to our open collective:\\u001b[22m\\u001b[39m\\n > \\u001b[34mhttps://opencollective.com/preact/donate\\u001b[0m')\""},"eslintConfig":{"extends":"./config/eslint-config.js"},"typings":"./dist/preact.d.ts","repository":{"type":"git","url":"git+https://github.com/developit/preact.git"},"keywords":["preact","react","virtual dom","vdom","components","virtual","dom"],"author":{"name":"Jason Miller","email":"jason@developit.ca"},"license":"MIT","bugs":{"url":"https://github.com/developit/preact/issues"},"homepage":"https://github.com/developit/preact","devDependencies":{"@types/chai":"^4.1.7","@types/mocha":"^5.2.5","@types/node":"^9.6.40","babel-cli":"^6.24.1","babel-core":"^6.24.1","babel-eslint":"^8.2.6","babel-loader":"^7.0.0","babel-plugin-transform-object-rest-spread":"^6.23.0","babel-plugin-transform-react-jsx":"^6.24.1","babel-preset-env":"^1.6.1","bundlesize":"^0.17.0","chai":"^4.2.0","copyfiles":"^2.1.0","core-js":"^2.6.0","coveralls":"^3.0.0","cross-env":"^5.1.4","diff":"^3.0.0","eslint":"^4.18.2","eslint-plugin-react":"^7.11.1","flow-bin":"^0.89.0","gzip-size-cli":"^2.0.0","istanbul-instrumenter-loader":"^3.0.0","jscodeshift":"^0.5.0","karma":"^3.1.3","karma-babel-preprocessor":"^7.0.0","karma-chai-sinon":"^0.1.5","karma-chrome-launcher":"^2.2.0","karma-coverage":"^1.1.2","karma-mocha":"^1.3.0","karma-mocha-reporter":"^2.2.5","karma-sauce-launcher":"^1.2.0","karma-sinon":"^1.0.5","karma-source-map-support":"^1.3.0","karma-sourcemap-loader":"^0.3.6","karma-webpack":"^3.0.5","mocha":"^5.0.4","npm-run-all":"^4.1.5","puppeteer":"^1.11.0","rimraf":"^2.5.3","rollup":"^0.57.1","rollup-plugin-babel":"^3.0.2","rollup-plugin-memory":"^3.0.0","rollup-plugin-node-resolve":"^3.4.0","sinon":"^4.4.2","sinon-chai":"^3.3.0","typescript":"^3.0.1","uglify-js":"^2.7.5","webpack":"^4.27.1"},"greenkeeper":{"ignore":["babel-cli","babel-core","babel-eslint","babel-loader","jscodeshift","rollup-plugin-babel"]},"bundlesize":[{"path":"./dist/preact.min.js","threshold":"4Kb"}],"gitHead":"45f5479de020982aabefb817ded51032f0b7b2e0","_id":"preact@8.5.1","_nodeVersion":"11.15.0","_npmVersion":"6.10.1","dist":{"integrity":"sha512-YVnCgcboxGrorFVIPjViqkEPOtfYVDxn5GOJuXHQZiOty+JOw7A+1xJytv/mb1O2QIIRC0SyT+kapA7Wj3jdZA==","shasum":"3a86cf5f3d4f6eb3349fa1f106ad59756c2af0e3","tarball":"http://localhost:4545/npm/registry/preact/preact-8.5.1.tgz","fileCount":40,"unpackedSize":630493,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdS9PnCRA9TVsSAnZWagAAwxsP/2OVVXRxrkUP5L+/UjJy\n22TkP7jsmGY5cscocNJXEgHgA7A9Kz2vO5VrlqgfdMTpvAIO78SaSs90n/W2\nTy2rjnZZd1wgkCFTJ4E9bsDUlsxkw7NNQK2C5+zj3PYAXoJOmPQtFEKNnggx\njqfTCydzwytieKNlEX93awYwA0mzu4z69aUjxLtuuPPlHM1QBTIuL2cB9fnV\n62br/l5fqROft7pPszNK4dMqm4Q9rhUaiFemRRMv4xg5kixmFoalpfelpmSl\nWolOivYrgNHS4FjrJzAh0hAF3Zt1pdGM5lidgbXXJmzyeh8eUqAytWufSIUH\nEf8/vD1e4Eic87fdYE2KRV1O5z7JS5im4mDHdxORN+9vXAH8oC8vH0quhOfx\nMyWf8LSIi5brz5CD5/PmNfTuaJIfPkbT7E75m6Sz9KJqqjBwmkI4GKeZwkQ6\n4y1SrCJq/aui1gSjRg0ObVmYGEevdLY0hmXw30TFGI6uTSPEg9vx58mzFSMt\ndmwYCUIVq2Gm6WToxriZ1pifHLFkzojw59hA+3sgmkl1RVE8ynwHsKNPf7tg\nbaXKRaG8A+3Zz2SieQgIh92aH+7NMRi8C7LSl4OTCzb/SqUmK6vtPMObWMNV\nLy/SMD88xr6IYLmdhCmZAee2vp7LKH1I3XDrE3UFMzwysftUGPzf7fbGEwTR\ngjcF\r\n=yC6m\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCdkPVtbCqR2Q+HeX1tHmlz1R6+nvJoeT3JnIpR71w/OAIgS1jO2scjmxSk2xA6B1On4Xlg4AlO2jIV3ahOmKvDw0o="}]},"maintainers":[{"email":"jason@developit.ca","name":"developit"},{"email":"ulliftw@gmail.com","name":"harmony"},{"email":"luke@lukeed.com","name":"lukeed"},{"email":"marvin@marvinhagemeister.de","name":"marvinhagemeister"},{"email":"prateek89born@gmail.com","name":"prateekbh"},{"email":"hello@preactjs.com","name":"preactjs"},{"email":"allamsetty.anup@gmail.com","name":"reznord"}],"_npmUser":{"name":"marvinhagemeister","email":"marvin@marvinhagemeister.de"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/preact_8.5.1_1565250534951_0.5421005330515134"},"_hasShrinkwrap":false},"8.5.2":{"name":"preact","version":"8.5.2","description":"Fast 3kb React alternative with the same modern API. Components & Virtual DOM.","main":"dist/preact.js","jsnext:main":"dist/preact.mjs","module":"dist/preact.mjs","dev:main":"dist/preact.dev.js","minified:main":"dist/preact.min.js","unpkg":"dist/preact.min.js","types":"dist/preact.d.ts","browser":"dist/preact.umd.js","scripts":{"clean":"rimraf dist/ devtools.js devtools.js.map debug.js debug.js.map test/ts/**/*.js","copy-flow-definition":"copyfiles -f src/preact.js.flow dist","copy-typescript-definition":"copyfiles -f src/preact.d.ts dist","build":"npm-run-all --silent clean transpile copy-flow-definition copy-typescript-definition strip optimize minify size","flow":"flow","transpile:main":"rollup -c config/rollup.config.js","transpile:devtools":"rollup -c config/rollup.config.devtools.js","transpile:esm":"rollup -c config/rollup.config.module.js","transpile:umd":"rollup -c config/rollup.config.umd.js","transpile:debug":"babel debug/ -o debug.js -s","transpile":"npm-run-all transpile:main transpile:esm transpile:umd transpile:devtools transpile:debug","optimize":"uglifyjs dist/preact.dev.js -c conditionals=false,sequences=false,loops=false,join_vars=false,collapse_vars=false --pure-funcs=Object.defineProperty --mangle-props --mangle-regex=\"/^(_|normalizedNodeName|nextBase|prev[CPS]|_parentC)/\" --name-cache config/properties.json -b width=120,quote_style=3 -o dist/preact.js -p relative --in-source-map dist/preact.dev.js.map --source-map dist/preact.js.map","minify":"uglifyjs dist/preact.js -c collapse_vars,evaluate,screw_ie8,unsafe,loops=false,keep_fargs=false,pure_getters,unused,dead_code -m -o dist/preact.min.js -p relative --in-source-map dist/preact.js.map --source-map dist/preact.min.js.map","prepare":"npm run build","strip:main":"jscodeshift --run-in-band -s -t config/codemod-strip-tdz.js dist/preact.dev.js && jscodeshift --run-in-band -s -t config/codemod-const.js dist/preact.dev.js && jscodeshift --run-in-band -s -t config/codemod-let-name.js dist/preact.dev.js","strip:esm":"jscodeshift --run-in-band -s -t config/codemod-strip-tdz.js dist/preact.mjs && jscodeshift --run-in-band -s -t config/codemod-const.js dist/preact.mjs && jscodeshift --run-in-band -s -t config/codemod-let-name.js dist/preact.mjs","strip":"npm-run-all strip:main strip:esm","size":"node -e \"process.stdout.write('gzip size: ')\" && gzip-size --raw dist/preact.min.js","test":"npm-run-all lint --parallel test:mocha test:karma test:ts test:flow","test:flow":"flow check","test:ts":"tsc -p test/ts/ && mocha --require babel-register test/ts/**/*-test.js","test:mocha":"mocha --recursive --require babel-register test/shared test/node","test:karma":"karma start test/karma.conf.js --single-run","test:mocha:watch":"npm run test:mocha -- --watch","test:karma:watch":"npm run test:karma -- no-single-run","test:size":"bundlesize","lint":"eslint debug devtools src test","prepublishOnly":"npm run build","smart-release":"npm run build && npm test && git commit -am $npm_package_version && git tag $npm_package_version && git push && git push --tags && npm publish","release":"cross-env npm run smart-release","postinstall":"node -e \"console.log('\\u001b[35m\\u001b[1mLove Preact? You can now donate to our open collective:\\u001b[22m\\u001b[39m\\n > \\u001b[34mhttps://opencollective.com/preact/donate\\u001b[0m')\""},"eslintConfig":{"extends":"./config/eslint-config.js"},"typings":"./dist/preact.d.ts","repository":{"type":"git","url":"git+https://github.com/developit/preact.git"},"keywords":["preact","react","virtual dom","vdom","components","virtual","dom"],"author":{"name":"Jason Miller","email":"jason@developit.ca"},"license":"MIT","bugs":{"url":"https://github.com/developit/preact/issues"},"homepage":"https://github.com/developit/preact","devDependencies":{"@types/chai":"^4.1.7","@types/mocha":"^5.2.5","@types/node":"^9.6.40","babel-cli":"^6.24.1","babel-core":"^6.24.1","babel-eslint":"^8.2.6","babel-loader":"^7.0.0","babel-plugin-transform-object-rest-spread":"^6.23.0","babel-plugin-transform-react-jsx":"^6.24.1","babel-preset-env":"^1.6.1","bundlesize":"^0.17.0","chai":"^4.2.0","copyfiles":"^2.1.0","core-js":"^2.6.0","coveralls":"^3.0.0","cross-env":"^5.1.4","diff":"^3.0.0","eslint":"^4.18.2","eslint-plugin-react":"^7.11.1","flow-bin":"^0.89.0","gzip-size-cli":"^2.0.0","istanbul-instrumenter-loader":"^3.0.0","jscodeshift":"^0.5.0","karma":"^3.1.3","karma-babel-preprocessor":"^7.0.0","karma-chai-sinon":"^0.1.5","karma-chrome-launcher":"^2.2.0","karma-coverage":"^1.1.2","karma-mocha":"^1.3.0","karma-mocha-reporter":"^2.2.5","karma-sauce-launcher":"^1.2.0","karma-sinon":"^1.0.5","karma-source-map-support":"^1.3.0","karma-sourcemap-loader":"^0.3.6","karma-webpack":"^3.0.5","mocha":"^5.0.4","npm-run-all":"^4.1.5","puppeteer":"^1.11.0","rimraf":"^2.5.3","rollup":"^0.57.1","rollup-plugin-babel":"^3.0.2","rollup-plugin-memory":"^3.0.0","rollup-plugin-node-resolve":"^3.4.0","sinon":"^4.4.2","sinon-chai":"^3.3.0","typescript":"^3.0.1","uglify-js":"^2.7.5","webpack":"^4.27.1"},"greenkeeper":{"ignore":["babel-cli","babel-core","babel-eslint","babel-loader","jscodeshift","rollup-plugin-babel"]},"bundlesize":[{"path":"./dist/preact.min.js","threshold":"4Kb"}],"gitHead":"b54401fb18098d990be9187db9764c39ab6b595c","_id":"preact@8.5.2","_nodeVersion":"11.15.0","_npmVersion":"6.10.1","dist":{"integrity":"sha512-37tlDJGq5IQKqGUbqPZ7qPtsTOWFyxe+ojAOFfzKo0dEPreenqrqgJuS83zGpeGAqD9h9L9Yr7QuxH2W4ZrKxg==","shasum":"2f532da485287c07369e08150cf4d23921a09789","tarball":"http://localhost:4545/npm/registry/preact/preact-8.5.2.tgz","fileCount":40,"unpackedSize":631471,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdWOdUCRA9TVsSAnZWagAAkhoQAIxI9IzRG/kNTfxX/jYb\ns13vLAGB2DU1dIS1hyxkZ4pdpV/8F9lfQIHqrwuFV+FUvyGRSMIk6ybTrnKg\nW8tOMs5DJ83jcD6KPQQyfvJkdejP755/wmZn0T6Do4sqVMSA91queWuRjeTw\nd53n5R8QULxOB1bwt55Sq8+Xn6tyQQazizBhTfFu1+EdY1sT38eC5/x4qOte\nu+259z5iYi7gugKsm3nhnnZ2SweqWf8F1ee7ZQ8dI/D2YVCaWfNbNYbTm+Jb\ngBqzw9kowAtLYCJlI+8Da8yjsvcQIJQxjCrGx4TRov1vMs9l5c6lCC3Tg7FS\nHb266KasA363PhnyDGONGCgaRiLSMVoYIhTFSzEFGXM6wKbVkvlsjFBlWvY4\nA8ZIYh2gmqDAq4ipQc5okbj7lpjA1cpESHOQqvXOrF6tNGeXM+FHynga2yw1\nE+QdIIJ9cq6qaZGVNag4DhJVHYUV5MgaPagEUSHnXtL6EbFzoXEhl0luJ6bX\nsDHLc13XeKeQvvxTQgCqt5m8hcR31mmzGBKvRbdSFH7tYjrnzZ0a2ENfQJSO\nveC2E/arbva04ossGAb8/ejhNqFUwm6VICyUpeompGFmBCtk24F8WNXBjOm/\nyF888GN+5mPKjyiO2+1n9sAWLkgiC9Zy1RqqAx6EqSMJ4MjUMOYtv74G3PxN\n0Dtc\r\n=LFK5\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD1+z25h17lrK7mrqYFZDuYHCFbK0XN3tnkxhJo+gLbSwIhALaE2jvt26Ut+jwrDsBQHtmOC9FepgbtO2W6qqriLscA"}]},"maintainers":[{"email":"jason@developit.ca","name":"developit"},{"email":"ulliftw@gmail.com","name":"harmony"},{"email":"luke@lukeed.com","name":"lukeed"},{"email":"marvin@marvinhagemeister.de","name":"marvinhagemeister"},{"email":"prateek89born@gmail.com","name":"prateekbh"},{"email":"hello@preactjs.com","name":"preactjs"},{"email":"allamsetty.anup@gmail.com","name":"reznord"}],"_npmUser":{"name":"marvinhagemeister","email":"marvin@marvinhagemeister.de"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/preact_8.5.2_1566107475724_0.5319568892611437"},"_hasShrinkwrap":false},"10.0.0-rc.2":{"name":"preact","amdName":"preact","version":"10.0.0-rc.2","private":false,"description":"Fast 3kb React-compatible Virtual DOM library.","main":"dist/preact.js","module":"dist/preact.module.js","umd:main":"dist/preact.umd.js","source":"src/index.js","license":"MIT","types":"src/index.d.ts","scripts":{"build":"npm-run-all --parallel build:*","build:core":"microbundle build --raw","build:debug":"microbundle build --raw --cwd debug","build:hooks":"microbundle build --raw --cwd hooks","build:test-utils":"microbundle build --raw --cwd test-utils","build:compat":"microbundle build --raw --cwd compat --globals 'preact/hooks=preactHooks'","dev":"microbundle watch --raw --format cjs","dev:hooks":"microbundle watch --raw --format cjs --cwd hooks","dev:compat":"microbundle watch --raw --format cjs --cwd compat --globals 'preact/hooks=preactHooks'","test":"npm-run-all lint build --parallel test:mocha test:karma test:ts","test:ts":"tsc -p test/ts/ && mocha --require babel-register test/ts/**/*-test.js","test:mocha":"mocha --recursive --require babel-register test/shared test/node","test:karma":"cross-env COVERAGE=true karma start karma.conf.js --single-run","test:mocha:watch":"npm run test:mocha -- --watch","test:karma:watch":"karma start karma.conf.js --no-single-run","test:karma:hooks":"cross-env COVERAGE=false karma start karma.conf.js --grep=hooks/test/browser/**.js --no-single-run","test:karma:test-utils":"cross-env PERFORMANCE=false COVERAGE=false karma start karma.conf.js --grep=test-utils/test/shared/**.js --no-single-run","test:karma:bench":"cross-env PERFORMANCE=true COVERAGE=false karma start karma.conf.js --grep=test/benchmarks/**.js --single-run","benchmark":"npm run test:karma:bench -- no-single-run","lint":"eslint src test debug compat hooks test-utils","postinstall":"node -e \"console.log('\\u001b[35m\\u001b[1mLove Preact? You can now donate to our open collective:\\u001b[22m\\u001b[39m\\n > \\u001b[34mhttps://opencollective.com/preact/donate\\u001b[0m')\""},"eslintConfig":{"extends":"developit","settings":{"react":{"pragma":"createElement"}},"rules":{"camelcase":[1,{"allow":["__test__*","unstable_*","UNSAFE_*"]}],"prefer-rest-params":0,"prefer-spread":0,"no-cond-assign":0,"react/jsx-no-bind":0,"react/prefer-stateless-function":0,"react/sort-comp":0,"jest/valid-expect":0,"jest/no-disabled-tests":0,"react/no-find-dom-node":0}},"eslintIgnore":["test/fixtures","test/ts/","*.ts","dist"],"keywords":["preact","react","virtual dom","vdom","components","virtual","dom"],"authors":["Jason Miller "],"repository":{"type":"git","url":"git+https://github.com/preactjs/preact.git"},"bugs":{"url":"https://github.com/preactjs/preact/issues"},"homepage":"https://github.com/preactjs/preact","devDependencies":{"@types/chai":"^4.1.2","@types/mocha":"^5.0.0","@types/node":"^10.5.2","babel-cli":"6.26.0","babel-core":"6.26.3","babel-loader":"7.1.5","babel-plugin-istanbul":"5.0.1","babel-plugin-transform-async-to-promises":"^0.8.14","babel-plugin-transform-object-rest-spread":"^6.23.0","babel-plugin-transform-react-jsx":"^6.24.1","babel-preset-env":"^1.6.1","benchmark":"^2.1.4","chai":"^4.1.2","coveralls":"^3.0.0","cross-env":"^5.2.0","diff":"^3.5.0","eslint":"5.15.1","eslint-config-developit":"^1.1.1","eslint-plugin-react":"7.12.4","karma":"^3.0.0","karma-babel-preprocessor":"^7.0.0","karma-chai-sinon":"^0.1.5","karma-chrome-launcher":"^2.2.0","karma-coverage":"^1.1.2","karma-mocha":"^1.3.0","karma-mocha-reporter":"^2.2.5","karma-sauce-launcher":"^1.2.0","karma-sinon":"^1.0.5","karma-source-map-support":"^1.3.0","karma-sourcemap-loader":"^0.3.7","karma-webpack":"^3.0.5","lodash":"^4.17.10","microbundle":"^0.11.0","mocha":"^5.2.0","npm-run-all":"^4.0.0","prop-types":"^15.7.2","sinon":"^6.1.3","sinon-chai":"^3.0.0","travis-size-report":"^1.0.1","typescript":"^3.0.1","webpack":"^4.3.0"},"gitHead":"9fb01cbb6a2e654bd0288fcec24ca70ddf94fa96","readme":"
Fast 3kB alternative to React with the same modern API.
\n\n**All the power of Virtual DOM components, without the overhead:**\n\n- Familiar React API & patterns: [ES6 Class] and [Functional Components]\n- Extensive React compatibility via a simple [preact-compat] alias\n- Everything you need: JSX, VDOM, React DevTools, HMR, SSR..\n- A highly optimized diff algorithm and seamless Server Side Rendering\n- Transparent asynchronous rendering with a pluggable scheduler\n- 🆕💥 **Instant no-config app bundling with [Preact CLI](https://github.com/preactjs/preact-cli)**\n\n### 💁 More information at the [Preact Website ➞](https://preactjs.com)\n\n\n---\n\n\n\n- [Demos](#demos)\n- [Libraries & Add-ons](#libraries--add-ons)\n- [Getting Started](#getting-started)\n\t- [Import what you need](#import-what-you-need)\n\t- [Rendering JSX](#rendering-jsx)\n\t- [Components](#components)\n\t- [Props & State](#props--state)\n- [Linked State](#linked-state)\n- [Examples](#examples)\n- [Extensions](#extensions)\n- [Debug Mode](#debug-mode)\n- [Backers](#backers)\n- [Sponsors](#sponsors)\n- [License](#license)\n\n\n\n\n# Preact\n\n[![npm](https://img.shields.io/npm/v/preact.svg)](http://npm.im/preact)\n[![CDNJS](https://img.shields.io/cdnjs/v/preact.svg)](https://cdnjs.com/libraries/preact)\n[![Preact Slack Community](https://preact-slack.now.sh/badge.svg)](https://preact-slack.now.sh)\n[![OpenCollective Backers](https://opencollective.com/preact/backers/badge.svg)](#backers)\n[![OpenCollective Sponsors](https://opencollective.com/preact/sponsors/badge.svg)](#sponsors)\n[![travis](https://travis-ci.org/preactjs/preact.svg?branch=master)](https://travis-ci.org/preactjs/preact)\n[![coveralls](https://img.shields.io/coveralls/preactjs/preact/master.svg)](https://coveralls.io/github/preactjs/preact)\n[![gzip size](http://img.badgesize.io/https://unpkg.com/preact/dist/preact.min.js?compression=gzip)](https://unpkg.com/preact/dist/preact.min.js)\n[![install size](https://packagephobia.now.sh/badge?p=preact)](https://packagephobia.now.sh/result?p=preact)\n\nPreact supports modern browsers and IE9+:\n\n[![Browsers](https://saucelabs.com/browser-matrix/preact.svg)](https://saucelabs.com/u/preact)\n\n\n---\n\n\n## Demos\n\n#### Real-World Apps\n\n- [**Preact Hacker News**](https://hn.kristoferbaxter.com) _([GitHub Project](https://github.com/kristoferbaxter/preact-hn))_\n- [**Play.cash**](https://play.cash) :notes: _([GitHub Project](https://github.com/feross/play.cash))_\n- [**BitMidi**](https://bitmidi.com/) 🎹 Wayback machine for free MIDI files _([GitHub Project](https://github.com/feross/bitmidi.com))_\n- [**Ultimate Guitar**](https://www.ultimate-guitar.com) 🎸speed boosted by Preact.\n- [**ESBench**](http://esbench.com) is built using Preact.\n- [**BigWebQuiz**](https://bigwebquiz.com) _([GitHub Project](https://github.com/jakearchibald/big-web-quiz))_\n- [**Nectarine.rocks**](http://nectarine.rocks) _([GitHub Project](https://github.com/developit/nectarine))_ :peach:\n- [**TodoMVC**](https://preact-todomvc.surge.sh) _([GitHub Project](https://github.com/developit/preact-todomvc))_\n- [**OSS.Ninja**](https://oss.ninja) _([GitHub Project](https://github.com/developit/oss.ninja))_\n- [**GuriVR**](https://gurivr.com) _([GitHub Project](https://github.com/opennewslabs/guri-vr))_\n- [**Color Picker**](https://colors.now.sh) _([GitHub Project](https://github.com/lukeed/colors-app))_ :art:\n- [**Offline Gallery**](https://use-the-platform.com/offline-gallery/) _([GitHub Project](https://github.com/vaneenige/offline-gallery/))_ :balloon:\n- [**Periodic Weather**](https://use-the-platform.com/periodic-weather/) _([GitHub Project](https://github.com/vaneenige/periodic-weather/))_ :sunny:\n- [**Rugby News Board**](http://nbrugby.com) _[(GitHub Project)](https://github.com/rugby-board/rugby-board-node)_\n- [**Preact Gallery**](https://preact.gallery/) an 8KB photo gallery PWA built using Preact.\n- [**Rainbow Explorer**](https://use-the-platform.com/rainbow-explorer/) Preact app to translate real life color to digital color _([Github project](https://github.com/vaneenige/rainbow-explorer))_.\n- [**YASCC**](https://carlosqsilva.github.io/YASCC/#/) Yet Another SoundCloud Client _([Github project](https://github.com/carlosqsilva/YASCC))_.\n- [**Journalize**](https://preact-journal.herokuapp.com/) 14k offline-capable journaling PWA using preact. _([Github project](https://github.com/jpodwys/preact-journal))_.\n- [**Proxx**](https://proxx.app) A game of proximity by GoogleChromeLabs using preact. _([Github project](https://github.com/GoogleChromeLabs/proxx))_.\n- [**Web Maker**](https://webmaker.app) An offline and blazing fast frontend playground built using Preact. _([Github project](https://github.com/chinchang/web-maker))_.\n\n\n#### Runnable Examples\n\n- [**Flickr Browser**](http://codepen.io/developit/full/VvMZwK/) (@ CodePen)\n- [**Animating Text**](http://codepen.io/developit/full/LpNOdm/) (@ CodePen)\n- [**60FPS Rainbow Spiral**](http://codepen.io/developit/full/xGoagz/) (@ CodePen)\n- [**Simple Clock**](http://jsfiddle.net/developit/u9m5x0L7/embedded/result,js/) (@ JSFiddle)\n- [**3D + ThreeJS**](http://codepen.io/developit/pen/PPMNjd?editors=0010) (@ CodePen)\n- [**Stock Ticker**](http://codepen.io/developit/pen/wMYoBb?editors=0010) (@ CodePen)\n- [*Create your Own!*](https://jsfiddle.net/developit/rs6zrh5f/embedded/result/) (@ JSFiddle)\n\n### Starter Projects\n\n- [**Preact Boilerplate**](https://preact-boilerplate.surge.sh) _([GitHub Project](https://github.com/developit/preact-boilerplate))_ :zap:\n- [**Preact Offline Starter**](https://preact-starter.now.sh) _([GitHub Project](https://github.com/lukeed/preact-starter))_ :100:\n- [**Preact PWA**](https://preact-pwa-yfxiijbzit.now.sh/) _([GitHub Project](https://github.com/ezekielchentnik/preact-pwa))_ :hamburger:\n- [**Parcel + Preact + Unistore Starter**](https://github.com/hwclass/parcel-preact-unistore-starter)\n- [**Preact Mobx Starter**](https://awaw00.github.io/preact-mobx-starter/) _([GitHub Project](https://github.com/awaw00/preact-mobx-starter))_ :sunny:\n- [**Preact Redux Example**](https://github.com/developit/preact-redux-example) :star:\n- [**Preact Redux/RxJS/Reselect Example**](https://github.com/continuata/preact-seed)\n- [**V2EX Preact**](https://github.com/yanni4night/v2ex-preact)\n- [**Preact Coffeescript**](https://github.com/crisward/preact-coffee)\n- [**Preact + TypeScript + Webpack**](https://github.com/k1r0s/bleeding-preact-starter)\n- [**0 config => Preact + Poi**](https://github.com/k1r0s/preact-poi-starter)\n- [**Zero configuration => Preact + Typescript + Parcel**](https://github.com/aalises/preact-typescript-parcel-starter)\n\n---\n\n## Libraries & Add-ons\n\n- :raised_hands: [**preact-compat**](https://git.io/preact-compat): use any React library with Preact *([full example](http://git.io/preact-compat-example))*\n- :twisted_rightwards_arrows: [**preact-context**](https://github.com/valotas/preact-context): React's `createContext` api for Preact\n- :page_facing_up: [**preact-render-to-string**](https://git.io/preact-render-to-string): Universal rendering.\n- :eyes: [**preact-render-spy**](https://github.com/mzgoddard/preact-render-spy): Enzyme-lite: Renderer with access to the produced virtual dom for testing.\n- :loop: [**preact-render-to-json**](https://git.io/preact-render-to-json): Render for Jest Snapshot testing.\n- :earth_americas: [**preact-router**](https://git.io/preact-router): URL routing for your components\n- :bookmark_tabs: [**preact-markup**](https://git.io/preact-markup): Render HTML & Custom Elements as JSX & Components\n- :satellite: [**preact-portal**](https://git.io/preact-portal): Render Preact components into (a) SPACE :milky_way:\n- :pencil: [**preact-richtextarea**](https://git.io/preact-richtextarea): Simple HTML editor component\n- :bookmark: [**preact-token-input**](https://github.com/developit/preact-token-input): Text field that tokenizes input, for things like tags\n- :card_index: [**preact-virtual-list**](https://github.com/developit/preact-virtual-list): Easily render lists with millions of rows ([demo](https://jsfiddle.net/developit/qqan9pdo/))\n- :repeat: [**preact-cycle**](https://git.io/preact-cycle): Functional-reactive paradigm for Preact\n- :triangular_ruler: [**preact-layout**](https://download.github.io/preact-layout/): Small and simple layout library\n- :thought_balloon: [**preact-socrates**](https://github.com/matthewmueller/preact-socrates): Preact plugin for [Socrates](http://github.com/matthewmueller/socrates)\n- :rowboat: [**preact-flyd**](https://github.com/xialvjun/preact-flyd): Use [flyd](https://github.com/paldepind/flyd) FRP streams in Preact + JSX\n- :speech_balloon: [**preact-i18nline**](https://github.com/download/preact-i18nline): Integrates the ecosystem around [i18n-js](https://github.com/everydayhero/i18n-js) with Preact via [i18nline](https://github.com/download/i18nline).\n- :microscope: [**preact-jsx-chai**](https://git.io/preact-jsx-chai): JSX assertion testing _(no DOM, right in Node)_\n- :tophat: [**preact-classless-component**](https://github.com/ld0rman/preact-classless-component): create preact components without the class keyword\n- :hammer: [**preact-hyperscript**](https://github.com/queckezz/preact-hyperscript): Hyperscript-like syntax for creating elements\n- :white_check_mark: [**shallow-compare**](https://github.com/tkh44/shallow-compare): simplified `shouldComponentUpdate` helper.\n- :shaved_ice: [**preact-codemod**](https://github.com/vutran/preact-codemod): Transform your React code to Preact.\n- :construction_worker: [**preact-helmet**](https://github.com/download/preact-helmet): A document head manager for Preact\n- :necktie: [**preact-delegate**](https://github.com/NekR/preact-delegate): Delegate DOM events\n- :art: [**preact-stylesheet-decorator**](https://github.com/k1r0s/preact-stylesheet-decorator): Add Scoped Stylesheets to your Preact Components\n- :electric_plug: [**preact-routlet**](https://github.com/k1r0s/preact-routlet): Simple `Component Driven` Routing for Preact using ES7 Decorators\n- :fax: [**preact-bind-group**](https://github.com/k1r0s/preact-bind-group): Preact Forms made easy, Group Events into a Single Callback\n- :hatching_chick: [**preact-habitat**](https://github.com/zouhir/preact-habitat): Declarative Preact widgets renderer in any CMS or DOM host ([demo](https://codepen.io/zouhir/pen/brrOPB)).\n- :tada: [**proppy-preact**](https://github.com/fahad19/proppy): Functional props composition for Preact components\n\n#### UI Component Libraries\n\n> Want to prototype something or speed up your development? Try one of these toolkits:\n\n- [**preact-material-components**](https://github.com/prateekbh/preact-material-components): Material Design Components for Preact ([website](https://material.preactjs.com/))\n- [**preact-mdc**](https://github.com/BerndWessels/preact-mdc): Material Design Components for Preact ([demo](https://github.com/BerndWessels/preact-mdc-demo))\n- [**preact-mui**](https://git.io/v1aVO): The MUI CSS Preact library.\n- [**preact-photon**](https://git.io/preact-photon): build beautiful desktop UI with [photon](http://photonkit.com)\n- [**preact-mdl**](https://git.io/preact-mdl): [Material Design Lite](https://getmdl.io) for Preact\n- [**preact-weui**](https://github.com/afeiship/preact-weui): [Weui](https://github.com/afeiship/preact-weui) for Preact\n- [**preact-charts**](https://github.com/pmkroeker/preact-charts): Charts for Preact\n\n\n---\n\n## Getting Started\n\n> 💁 _**Note:** You [don't need ES2015 to use Preact](https://github.com/developit/preact-in-es3)... but give it a try!_\n\nThe easiest way to get started with Preact is to install [Preact CLI](https://github.com/preactjs/preact-cli). This simple command-line tool wraps up the best possible Webpack and Babel setup for you, and even keeps you up-to-date as the underlying tools change. Best of all, it's easy to understand! It builds your app in a single command (`preact build`), doesn't need any configuration, and bakes in best-practises 🙌.\n\nThe following guide assumes you have some sort of ES2015 build set up using babel and/or webpack/browserify/gulp/grunt/etc.\n\nYou can also start with [preact-boilerplate] or a [CodePen Template](http://codepen.io/developit/pen/pgaROe?editors=0010).\n\n\n### Import what you need\n\nThe `preact` module provides both named and default exports, so you can either import everything under a namespace of your choosing, or just what you need as locals:\n\n##### Named:\n\n```js\nimport { h, render, Component } from 'preact';\n\n// Tell Babel to transform JSX into h() calls:\n/** @jsx h */\n```\n\n##### Default:\n\n```js\nimport preact from 'preact';\n\n// Tell Babel to transform JSX into preact.h() calls:\n/** @jsx preact.h */\n```\n\n> Named imports work well for highly structured applications, whereas the default import is quick and never needs to be updated when using different parts of the library.\n>\n> Instead of declaring the `@jsx` pragma in your code, it's best to configure it globally in a `.babelrc`:\n>\n> **For Babel 5 and prior:**\n>\n> ```json\n> { \"jsxPragma\": \"h\" }\n> ```\n>\n> **For Babel 6:**\n>\n> ```json\n> {\n> \"plugins\": [\n> [\"transform-react-jsx\", { \"pragma\":\"h\" }]\n> ]\n> }\n> ```\n>\n> **For Babel 7:**\n>\n> ```json\n> {\n> \"plugins\": [\n> [\"@babel/plugin-transform-react-jsx\", { \"pragma\":\"h\" }]\n> ]\n> }\n> ```\n> **For using Preact along with TypeScript add to `tsconfig.json`:**\n>\n> ```json\n> {\n> \"jsx\": \"react\",\n> \"jsxFactory\": \"h\",\n> }\n> ```\n\n\n### Rendering JSX\n\nOut of the box, Preact provides an `h()` function that turns your JSX into Virtual DOM elements _([here's how](http://jasonformat.com/wtf-is-jsx))_. It also provides a `render()` function that creates a DOM tree from that Virtual DOM.\n\nTo render some JSX, just import those two functions and use them like so:\n\n```js\nimport { h, render } from 'preact';\n\nrender((\n\t
\n\t\tHello, world!\n\t\t\n\t
\n), document.body);\n```\n\nThis should seem pretty straightforward if you've used hyperscript or one of its many friends. If you're not, the short of it is that the `h()` function import gets used in the final, transpiled code as a drop in replacement for `React.createElement()`, and so needs to be imported even if you don't explicitly use it in the code you write. Also note that if you're the kind of person who likes writing your React code in \"pure JavaScript\" (you know who you are) you will need to use `h()` wherever you would otherwise use `React.createElement()`.\n\nRendering hyperscript with a virtual DOM is pointless, though. We want to render components and have them updated when data changes - that's where the power of virtual DOM diffing shines. :star2:\n\n\n### Components\n\nPreact exports a generic `Component` class, which can be extended to build encapsulated, self-updating pieces of a User Interface. Components support all of the standard React [lifecycle methods], like `shouldComponentUpdate()` and `componentWillReceiveProps()`. Providing specific implementations of these methods is the preferred mechanism for controlling _when_ and _how_ components update.\n\nComponents also have a `render()` method, but unlike React this method is passed `(props, state)` as arguments. This provides an ergonomic means to destructure `props` and `state` into local variables to be referenced from JSX.\n\nLet's take a look at a very simple `Clock` component, which shows the current time.\n\n```js\nimport { h, render, Component } from 'preact';\n\nclass Clock extends Component {\n\trender() {\n\t\tlet time = new Date();\n\t\treturn ;\n\t}\n}\n\n// render an instance of Clock into :\nrender(, document.body);\n```\n\n\nThat's great. Running this produces the following HTML DOM structure:\n\n```html\n10:28:57 PM\n```\n\nIn order to have the clock's time update every second, we need to know when `` gets mounted to the DOM. _If you've used HTML5 Custom Elements, this is similar to the `attachedCallback` and `detachedCallback` lifecycle methods._ Preact invokes the following lifecycle methods if they are defined for a Component:\n\n| Lifecycle method | When it gets called |\n|-----------------------------|--------------------------------------------------|\n| `componentWillMount` | before the component gets mounted to the DOM |\n| `componentDidMount` | after the component gets mounted to the DOM |\n| `componentWillUnmount` | prior to removal from the DOM |\n| `componentWillReceiveProps` | before new props get accepted |\n| `shouldComponentUpdate` | before `render()`. Return `false` to skip render |\n| `componentWillUpdate` | before `render()` |\n| `componentDidUpdate` | after `render()` |\n\n\n\nSo, we want to have a 1-second timer start once the Component gets added to the DOM, and stop if it is removed. We'll create the timer and store a reference to it in `componentDidMount()`, and stop the timer in `componentWillUnmount()`. On each timer tick, we'll update the component's `state` object with a new time value. Doing this will automatically re-render the component.\n\n```js\nimport { h, render, Component } from 'preact';\n\nclass Clock extends Component {\n\tconstructor() {\n\t\tsuper();\n\t\t// set initial time:\n\t\tthis.state = {\n\t\t\ttime: Date.now()\n\t\t};\n\t}\n\n\tcomponentDidMount() {\n\t\t// update time every second\n\t\tthis.timer = setInterval(() => {\n\t\t\tthis.setState({ time: Date.now() });\n\t\t}, 1000);\n\t}\n\n\tcomponentWillUnmount() {\n\t\t// stop when not renderable\n\t\tclearInterval(this.timer);\n\t}\n\n\trender(props, state) {\n\t\tlet time = new Date(state.time).toLocaleTimeString();\n\t\treturn { time };\n\t}\n}\n\n// render an instance of Clock into :\nrender(, document.body);\n```\n\nNow we have [a ticking clock](http://jsfiddle.net/developit/u9m5x0L7/embedded/result,js/)!\n\n\n### Props & State\n\nThe concept (and nomenclature) for `props` and `state` is the same as in React. `props` are passed to a component by defining attributes in JSX, `state` is internal state. Changing either triggers a re-render, though by default Preact re-renders Components asynchronously for `state` changes and synchronously for `props` changes. You can tell Preact to render `prop` changes asynchronously by setting `options.syncComponentUpdates` to `false`.\n\n\n---\n\n\n## Linked State\n\nOne area Preact takes a little further than React is in optimizing state changes. A common pattern in ES2015 React code is to use Arrow functions within a `render()` method in order to update state in response to events. Creating functions enclosed in a scope on every render is inefficient and forces the garbage collector to do more work than is necessary.\n\nOne solution to this is to bind component methods declaratively.\nHere is an example using [decko](http://git.io/decko):\n\n```js\nclass Foo extends Component {\n\t@bind\n\tupdateText(e) {\n\t\tthis.setState({ text: e.target.value });\n\t}\n\trender({ }, { text }) {\n\t\treturn ;\n\t}\n}\n```\n\nWhile this achieves much better runtime performance, it's still a lot of unnecessary code to wire up state to UI.\n\nFortunately there is a solution, in the form of a module called [linkstate](https://github.com/developit/linkstate). Calling `linkState(component, 'text')` returns a function that accepts an Event and uses its associated value to update the given property in your component's state. Calls to `linkState()` with the same arguments are cached, so there is no performance penalty. Here is the previous example rewritten using _Linked State_:\n\n```js\nimport linkState from 'linkstate';\n\nclass Foo extends Component {\n\trender({ }, { text }) {\n\t\treturn ;\n\t}\n}\n```\n\nSimple and effective. It handles linking state from any input type, or an optional second parameter can be used to explicitly provide a keypath to the new state value.\n\n> **Note:** In Preact 7 and prior, `linkState()` was built right into Component. In 8.0, it was moved to a separate module. You can restore the 7.x behavior by using linkstate as a polyfill - see [the linkstate docs](https://github.com/developit/linkstate#usage).\n\n\n\n## Examples\n\nHere is a somewhat verbose Preact `` component:\n\n```js\nclass Link extends Component {\n\trender(props, state) {\n\t\treturn {props.children};\n\t}\n}\n```\n\nSince this is ES6/ES2015, we can further simplify:\n\n```js\nclass Link extends Component {\n render({ href, children }) {\n return ;\n }\n}\n\n// or, for wide-open props support:\nclass Link extends Component {\n render(props) {\n return ;\n }\n}\n\n// or, as a stateless functional component:\nconst Link = ({ children, ...props }) => (\n { children }\n);\n```\n\n\n## Extensions\n\nIt is likely that some projects based on Preact would wish to extend Component with great new functionality.\n\nPerhaps automatic connection to stores for a Flux-like architecture, or mixed-in context bindings to make it feel more like `React.createClass()`. Just use ES2015 inheritance:\n\n```js\nclass BoundComponent extends Component {\n\tconstructor(props) {\n\t\tsuper(props);\n\t\tthis.bind();\n\t}\n\tbind() {\n\t\tthis.binds = {};\n\t\tfor (let i in this) {\n\t\t\tthis.binds[i] = this[i].bind(this);\n\t\t}\n\t}\n}\n\n// example usage\nclass Link extends BoundComponent {\n\tclick() {\n\t\topen(this.href);\n\t}\n\trender() {\n\t\tlet { click } = this.binds;\n\t\treturn { children };\n\t}\n}\n```\n\n\nThe possibilities are pretty endless here. You could even add support for rudimentary mixins:\n\n```js\nclass MixedComponent extends Component {\n\tconstructor() {\n\t\tsuper();\n\t\t(this.mixins || []).forEach( m => Object.assign(this, m) );\n\t}\n}\n```\n\n## Debug Mode\n\nYou can inspect and modify the state of your Preact UI components at runtime using the\n[React Developer Tools](https://github.com/facebook/react-devtools) browser extension.\n\n1. Install the [React Developer Tools](https://github.com/facebook/react-devtools) extension\n2. Import the \"preact/debug\" module in your app\n3. Set `process.env.NODE_ENV` to 'development'\n4. Reload and go to the 'React' tab in the browser's development tools\n\n\n```js\nimport { h, Component, render } from 'preact';\n\n// Enable debug mode. You can reduce the size of your app by only including this\n// module in development builds. eg. In Webpack, wrap this with an `if (module.hot) {...}`\n// check.\nrequire('preact/debug');\n```\n\n### Runtime Error Checking\n\nTo enable debug mode, you need to set `process.env.NODE_ENV=development`. You can do this\nwith webpack via a builtin plugin.\n\n```js\n// webpack.config.js\n\n// Set NODE_ENV=development to enable error checking\nnew webpack.DefinePlugin({\n 'process.env': {\n 'NODE_ENV': JSON.stringify('development')\n }\n});\n```\n\nWhen enabled, warnings are logged to the console when undefined components or string refs\nare detected.\n\n### Developer Tools\n\nIf you only want to include devtool integration, without runtime error checking, you can\nreplace `preact/debug` in the above example with `preact/devtools`. This option doesn't\nrequire setting `NODE_ENV=development`.\n\n\n\n## Backers\nSupport us with a monthly donation and help us continue our activities. [[Become a backer](https://opencollective.com/preact#backer)]\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n## Sponsors\nBecome a sponsor and get your logo on our README on GitHub with a link to your site. [[Become a sponsor](https://opencollective.com/preact#sponsor)]\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n## License\n\nMIT\n\n\n\n[![Preact](http://i.imgur.com/YqCHvEW.gif)](https://preactjs.com)\n\n\n[preact-compat]: https://github.com/developit/preact-compat\n[ES6 Class]: https://facebook.github.io/react/docs/reusable-components.html#es6-classes\n[Functional Components]: https://facebook.github.io/react/blog/2015/10/07/react-v0.14.html#stateless-functional-components\n[hyperscript]: https://github.com/dominictarr/hyperscript\n[preact-boilerplate]: https://github.com/developit/preact-boilerplate\n[lifecycle methods]: https://facebook.github.io/react/docs/component-specs.html\n","readmeFilename":"README.md","_id":"preact@10.0.0-rc.2","_nodeVersion":"11.15.0","_npmVersion":"6.10.1","dist":{"integrity":"sha512-dM/ZK7ZIPDNPihNPcKmjK4EItcF4XH+mBAgcQ0JvMLzjvW0ZwCwaMcA5yBz8nB5WRwsm5zamgO0Y8rgAy8HB0Q==","shasum":"267d0bc2529792bb7c8802fb5a9401ac4fdeb53f","tarball":"http://localhost:4545/npm/registry/preact/preact-10.0.0-rc.2.tgz","fileCount":71,"unpackedSize":705251,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJddqvZCRA9TVsSAnZWagAAik0P/RFKr4wG03EOUUxojUNf\nTiWfQwTRGImjaPppfYD8Tc6lXtdJXtPgbrUEP1DhOaDKAaQZkfp5HleVwUoW\nskE2Bj1rwOQHIRhy5/Uyj39iK3cpOjZlkGYbNVBAqaZj1czivPD5PaRyvzWj\nS89xYBPWLMpxyRKKY1eNVbL4lprrCbeeiRLF5UGHwPThlKv6RHhbHss3Nrzx\nIceA1h9h2WsW4rdRpahcQF6Ko+lLygTHjwtkoaMyiYnrI8vqOTLNyN1TN7B7\n731D0FXdP89wuMQ9tkP0D5nsAndAcEIO2hifx/suLKDbICassdwscIsssJlh\n9w0ICSkuiMua3xRTCor/sMCrqPy3MZAOUdIUmbv3HpEeSsZPGwN/bakPpVYG\ntEZyykGCOs8LSHC/nBoS6EUiVxopRCswk3ckniV1nLmWkMN8129gBM+YoJMt\njyCDF14sfc0trUJ2tj7yIlgZ3QgvEVAPNHEn40hu0N82MdS4OvEIfjusU1NC\nFiPo6WxAC2ZgPXhuXUGcvHDFVpovdM9vVgyg9wg7C4Exr96YIbBWzVreyKsV\nGbromGfcUP4+bljCDBPCo+oRsAGvuavs+IBr62UkUlI2Kb8c9Ey6XpzTv7UJ\nYFBaS4lfju01HzlCI+wU5cQxttqJb8cyMP0X0mBcx8vnYRM5wE/iZtRCzY0T\n6PJp\r\n=7VC4\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCltnvmDq/udsX77WrNbYAXUmFvjVev4dOx3ec3RG5p2QIhAMw+At5A1xR3d9x5Oie3C1DlzAf4NBgD3I6dTqmlowUe"}]},"maintainers":[{"email":"jason@developit.ca","name":"developit"},{"email":"ulliftw@gmail.com","name":"harmony"},{"email":"luke@lukeed.com","name":"lukeed"},{"email":"marvin@marvinhagemeister.de","name":"marvinhagemeister"},{"email":"prateek89born@gmail.com","name":"prateekbh"},{"email":"hello@preactjs.com","name":"preactjs"},{"email":"allamsetty.anup@gmail.com","name":"reznord"}],"_npmUser":{"name":"marvinhagemeister","email":"marvin@marvinhagemeister.de"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/preact_10.0.0-rc.2_1568058328302_0.515304081564985"},"_hasShrinkwrap":false},"10.0.0-rc.3":{"name":"preact","amdName":"preact","version":"10.0.0-rc.3","private":false,"description":"Fast 3kb React-compatible Virtual DOM library.","main":"dist/preact.js","module":"dist/preact.module.js","umd:main":"dist/preact.umd.js","source":"src/index.js","license":"MIT","types":"src/index.d.ts","scripts":{"build":"npm-run-all --parallel build:*","build:core":"microbundle build --raw","build:debug":"microbundle build --raw --cwd debug","build:hooks":"microbundle build --raw --cwd hooks","build:test-utils":"microbundle build --raw --cwd test-utils","build:compat":"microbundle build --raw --cwd compat --globals 'preact/hooks=preactHooks'","dev":"microbundle watch --raw --format cjs","dev:hooks":"microbundle watch --raw --format cjs --cwd hooks","dev:compat":"microbundle watch --raw --format cjs --cwd compat --globals 'preact/hooks=preactHooks'","test":"npm-run-all lint build --parallel test:mocha test:karma test:ts","test:ts":"tsc -p test/ts/ && mocha --require babel-register test/ts/**/*-test.js","test:mocha":"mocha --recursive --require babel-register test/shared test/node","test:karma":"cross-env COVERAGE=true karma start karma.conf.js --single-run","test:mocha:watch":"npm run test:mocha -- --watch","test:karma:watch":"karma start karma.conf.js --no-single-run","test:karma:hooks":"cross-env COVERAGE=false karma start karma.conf.js --grep=hooks/test/browser/**.js --no-single-run","test:karma:test-utils":"cross-env PERFORMANCE=false COVERAGE=false karma start karma.conf.js --grep=test-utils/test/shared/**.js --no-single-run","test:karma:bench":"cross-env PERFORMANCE=true COVERAGE=false karma start karma.conf.js --grep=test/benchmarks/**.js --single-run","benchmark":"npm run test:karma:bench -- no-single-run","lint":"eslint src test debug compat hooks test-utils","postinstall":"node -e \"console.log('\\u001b[35m\\u001b[1mLove Preact? You can now donate to our open collective:\\u001b[22m\\u001b[39m\\n > \\u001b[34mhttps://opencollective.com/preact/donate\\u001b[0m')\""},"eslintConfig":{"extends":"developit","settings":{"react":{"pragma":"createElement"}},"rules":{"camelcase":[1,{"allow":["__test__*","unstable_*","UNSAFE_*"]}],"prefer-rest-params":0,"prefer-spread":0,"no-cond-assign":0,"react/jsx-no-bind":0,"react/prefer-stateless-function":0,"react/sort-comp":0,"jest/valid-expect":0,"jest/no-disabled-tests":0,"react/no-find-dom-node":0}},"eslintIgnore":["test/fixtures","test/ts/","*.ts","dist"],"keywords":["preact","react","virtual dom","vdom","components","virtual","dom"],"authors":["Jason Miller "],"repository":{"type":"git","url":"git+https://github.com/preactjs/preact.git"},"bugs":{"url":"https://github.com/preactjs/preact/issues"},"homepage":"https://github.com/preactjs/preact","devDependencies":{"@types/chai":"^4.1.2","@types/mocha":"^5.0.0","@types/node":"^10.5.2","babel-cli":"6.26.0","babel-core":"6.26.3","babel-loader":"7.1.5","babel-plugin-istanbul":"5.0.1","babel-plugin-transform-async-to-promises":"^0.8.14","babel-plugin-transform-object-rest-spread":"^6.23.0","babel-plugin-transform-react-jsx":"^6.24.1","babel-preset-env":"^1.6.1","benchmark":"^2.1.4","chai":"^4.1.2","coveralls":"^3.0.0","cross-env":"^5.2.0","diff":"^3.5.0","eslint":"5.15.1","eslint-config-developit":"^1.1.1","eslint-plugin-react":"7.12.4","karma":"^3.0.0","karma-babel-preprocessor":"^7.0.0","karma-chai-sinon":"^0.1.5","karma-chrome-launcher":"^2.2.0","karma-coverage":"^1.1.2","karma-mocha":"^1.3.0","karma-mocha-reporter":"^2.2.5","karma-sauce-launcher":"^1.2.0","karma-sinon":"^1.0.5","karma-source-map-support":"^1.3.0","karma-sourcemap-loader":"^0.3.7","karma-webpack":"^3.0.5","lodash":"^4.17.10","microbundle":"^0.11.0","mocha":"^5.2.0","npm-run-all":"^4.0.0","prop-types":"^15.7.2","sinon":"^6.1.3","sinon-chai":"^3.0.0","travis-size-report":"^1.0.1","typescript":"^3.0.1","webpack":"^4.3.0"},"gitHead":"96a45079713e604097d03573ff4333abda1334cb","readme":"
Fast 3kB alternative to React with the same modern API.
\n\n**All the power of Virtual DOM components, without the overhead:**\n\n- Familiar React API & patterns: [ES6 Class] and [Functional Components]\n- Extensive React compatibility via a simple [preact-compat] alias\n- Everything you need: JSX, VDOM, React DevTools, HMR, SSR..\n- A highly optimized diff algorithm and seamless Server Side Rendering\n- Transparent asynchronous rendering with a pluggable scheduler\n- 🆕💥 **Instant no-config app bundling with [Preact CLI](https://github.com/preactjs/preact-cli)**\n\n### 💁 More information at the [Preact Website ➞](https://preactjs.com)\n\n\n---\n\n\n\n- [Demos](#demos)\n- [Libraries & Add-ons](#libraries--add-ons)\n- [Getting Started](#getting-started)\n\t- [Import what you need](#import-what-you-need)\n\t- [Rendering JSX](#rendering-jsx)\n\t- [Components](#components)\n\t- [Props & State](#props--state)\n- [Linked State](#linked-state)\n- [Examples](#examples)\n- [Extensions](#extensions)\n- [Debug Mode](#debug-mode)\n- [Backers](#backers)\n- [Sponsors](#sponsors)\n- [License](#license)\n\n\n\n\n# Preact\n\n[![npm](https://img.shields.io/npm/v/preact.svg)](http://npm.im/preact)\n[![CDNJS](https://img.shields.io/cdnjs/v/preact.svg)](https://cdnjs.com/libraries/preact)\n[![Preact Slack Community](https://preact-slack.now.sh/badge.svg)](https://preact-slack.now.sh)\n[![OpenCollective Backers](https://opencollective.com/preact/backers/badge.svg)](#backers)\n[![OpenCollective Sponsors](https://opencollective.com/preact/sponsors/badge.svg)](#sponsors)\n[![travis](https://travis-ci.org/preactjs/preact.svg?branch=master)](https://travis-ci.org/preactjs/preact)\n[![coveralls](https://img.shields.io/coveralls/preactjs/preact/master.svg)](https://coveralls.io/github/preactjs/preact)\n[![gzip size](http://img.badgesize.io/https://unpkg.com/preact/dist/preact.min.js?compression=gzip)](https://unpkg.com/preact/dist/preact.min.js)\n[![install size](https://packagephobia.now.sh/badge?p=preact)](https://packagephobia.now.sh/result?p=preact)\n\nPreact supports modern browsers and IE9+:\n\n[![Browsers](https://saucelabs.com/browser-matrix/preact.svg)](https://saucelabs.com/u/preact)\n\n\n---\n\n\n## Demos\n\n#### Real-World Apps\n\n- [**Preact Hacker News**](https://hn.kristoferbaxter.com) _([GitHub Project](https://github.com/kristoferbaxter/preact-hn))_\n- [**Play.cash**](https://play.cash) :notes: _([GitHub Project](https://github.com/feross/play.cash))_\n- [**BitMidi**](https://bitmidi.com/) 🎹 Wayback machine for free MIDI files _([GitHub Project](https://github.com/feross/bitmidi.com))_\n- [**Ultimate Guitar**](https://www.ultimate-guitar.com) 🎸speed boosted by Preact.\n- [**ESBench**](http://esbench.com) is built using Preact.\n- [**BigWebQuiz**](https://bigwebquiz.com) _([GitHub Project](https://github.com/jakearchibald/big-web-quiz))_\n- [**Nectarine.rocks**](http://nectarine.rocks) _([GitHub Project](https://github.com/developit/nectarine))_ :peach:\n- [**TodoMVC**](https://preact-todomvc.surge.sh) _([GitHub Project](https://github.com/developit/preact-todomvc))_\n- [**OSS.Ninja**](https://oss.ninja) _([GitHub Project](https://github.com/developit/oss.ninja))_\n- [**GuriVR**](https://gurivr.com) _([GitHub Project](https://github.com/opennewslabs/guri-vr))_\n- [**Color Picker**](https://colors.now.sh) _([GitHub Project](https://github.com/lukeed/colors-app))_ :art:\n- [**Offline Gallery**](https://use-the-platform.com/offline-gallery/) _([GitHub Project](https://github.com/vaneenige/offline-gallery/))_ :balloon:\n- [**Periodic Weather**](https://use-the-platform.com/periodic-weather/) _([GitHub Project](https://github.com/vaneenige/periodic-weather/))_ :sunny:\n- [**Rugby News Board**](http://nbrugby.com) _[(GitHub Project)](https://github.com/rugby-board/rugby-board-node)_\n- [**Preact Gallery**](https://preact.gallery/) an 8KB photo gallery PWA built using Preact.\n- [**Rainbow Explorer**](https://use-the-platform.com/rainbow-explorer/) Preact app to translate real life color to digital color _([Github project](https://github.com/vaneenige/rainbow-explorer))_.\n- [**YASCC**](https://carlosqsilva.github.io/YASCC/#/) Yet Another SoundCloud Client _([Github project](https://github.com/carlosqsilva/YASCC))_.\n- [**Journalize**](https://preact-journal.herokuapp.com/) 14k offline-capable journaling PWA using preact. _([Github project](https://github.com/jpodwys/preact-journal))_.\n- [**Proxx**](https://proxx.app) A game of proximity by GoogleChromeLabs using preact. _([Github project](https://github.com/GoogleChromeLabs/proxx))_.\n- [**Web Maker**](https://webmaker.app) An offline and blazing fast frontend playground built using Preact. _([Github project](https://github.com/chinchang/web-maker))_.\n\n\n#### Runnable Examples\n\n- [**Flickr Browser**](http://codepen.io/developit/full/VvMZwK/) (@ CodePen)\n- [**Animating Text**](http://codepen.io/developit/full/LpNOdm/) (@ CodePen)\n- [**60FPS Rainbow Spiral**](http://codepen.io/developit/full/xGoagz/) (@ CodePen)\n- [**Simple Clock**](http://jsfiddle.net/developit/u9m5x0L7/embedded/result,js/) (@ JSFiddle)\n- [**3D + ThreeJS**](http://codepen.io/developit/pen/PPMNjd?editors=0010) (@ CodePen)\n- [**Stock Ticker**](http://codepen.io/developit/pen/wMYoBb?editors=0010) (@ CodePen)\n- [*Create your Own!*](https://jsfiddle.net/developit/rs6zrh5f/embedded/result/) (@ JSFiddle)\n\n### Starter Projects\n\n- [**Preact Boilerplate**](https://preact-boilerplate.surge.sh) _([GitHub Project](https://github.com/developit/preact-boilerplate))_ :zap:\n- [**Preact Offline Starter**](https://preact-starter.now.sh) _([GitHub Project](https://github.com/lukeed/preact-starter))_ :100:\n- [**Preact PWA**](https://preact-pwa-yfxiijbzit.now.sh/) _([GitHub Project](https://github.com/ezekielchentnik/preact-pwa))_ :hamburger:\n- [**Parcel + Preact + Unistore Starter**](https://github.com/hwclass/parcel-preact-unistore-starter)\n- [**Preact Mobx Starter**](https://awaw00.github.io/preact-mobx-starter/) _([GitHub Project](https://github.com/awaw00/preact-mobx-starter))_ :sunny:\n- [**Preact Redux Example**](https://github.com/developit/preact-redux-example) :star:\n- [**Preact Redux/RxJS/Reselect Example**](https://github.com/continuata/preact-seed)\n- [**V2EX Preact**](https://github.com/yanni4night/v2ex-preact)\n- [**Preact Coffeescript**](https://github.com/crisward/preact-coffee)\n- [**Preact + TypeScript + Webpack**](https://github.com/k1r0s/bleeding-preact-starter)\n- [**0 config => Preact + Poi**](https://github.com/k1r0s/preact-poi-starter)\n- [**Zero configuration => Preact + Typescript + Parcel**](https://github.com/aalises/preact-typescript-parcel-starter)\n\n---\n\n## Libraries & Add-ons\n\n- :raised_hands: [**preact-compat**](https://git.io/preact-compat): use any React library with Preact *([full example](http://git.io/preact-compat-example))*\n- :twisted_rightwards_arrows: [**preact-context**](https://github.com/valotas/preact-context): React's `createContext` api for Preact\n- :page_facing_up: [**preact-render-to-string**](https://git.io/preact-render-to-string): Universal rendering.\n- :eyes: [**preact-render-spy**](https://github.com/mzgoddard/preact-render-spy): Enzyme-lite: Renderer with access to the produced virtual dom for testing.\n- :loop: [**preact-render-to-json**](https://git.io/preact-render-to-json): Render for Jest Snapshot testing.\n- :earth_americas: [**preact-router**](https://git.io/preact-router): URL routing for your components\n- :bookmark_tabs: [**preact-markup**](https://git.io/preact-markup): Render HTML & Custom Elements as JSX & Components\n- :satellite: [**preact-portal**](https://git.io/preact-portal): Render Preact components into (a) SPACE :milky_way:\n- :pencil: [**preact-richtextarea**](https://git.io/preact-richtextarea): Simple HTML editor component\n- :bookmark: [**preact-token-input**](https://github.com/developit/preact-token-input): Text field that tokenizes input, for things like tags\n- :card_index: [**preact-virtual-list**](https://github.com/developit/preact-virtual-list): Easily render lists with millions of rows ([demo](https://jsfiddle.net/developit/qqan9pdo/))\n- :repeat: [**preact-cycle**](https://git.io/preact-cycle): Functional-reactive paradigm for Preact\n- :triangular_ruler: [**preact-layout**](https://download.github.io/preact-layout/): Small and simple layout library\n- :thought_balloon: [**preact-socrates**](https://github.com/matthewmueller/preact-socrates): Preact plugin for [Socrates](http://github.com/matthewmueller/socrates)\n- :rowboat: [**preact-flyd**](https://github.com/xialvjun/preact-flyd): Use [flyd](https://github.com/paldepind/flyd) FRP streams in Preact + JSX\n- :speech_balloon: [**preact-i18nline**](https://github.com/download/preact-i18nline): Integrates the ecosystem around [i18n-js](https://github.com/everydayhero/i18n-js) with Preact via [i18nline](https://github.com/download/i18nline).\n- :microscope: [**preact-jsx-chai**](https://git.io/preact-jsx-chai): JSX assertion testing _(no DOM, right in Node)_\n- :tophat: [**preact-classless-component**](https://github.com/ld0rman/preact-classless-component): create preact components without the class keyword\n- :hammer: [**preact-hyperscript**](https://github.com/queckezz/preact-hyperscript): Hyperscript-like syntax for creating elements\n- :white_check_mark: [**shallow-compare**](https://github.com/tkh44/shallow-compare): simplified `shouldComponentUpdate` helper.\n- :shaved_ice: [**preact-codemod**](https://github.com/vutran/preact-codemod): Transform your React code to Preact.\n- :construction_worker: [**preact-helmet**](https://github.com/download/preact-helmet): A document head manager for Preact\n- :necktie: [**preact-delegate**](https://github.com/NekR/preact-delegate): Delegate DOM events\n- :art: [**preact-stylesheet-decorator**](https://github.com/k1r0s/preact-stylesheet-decorator): Add Scoped Stylesheets to your Preact Components\n- :electric_plug: [**preact-routlet**](https://github.com/k1r0s/preact-routlet): Simple `Component Driven` Routing for Preact using ES7 Decorators\n- :fax: [**preact-bind-group**](https://github.com/k1r0s/preact-bind-group): Preact Forms made easy, Group Events into a Single Callback\n- :hatching_chick: [**preact-habitat**](https://github.com/zouhir/preact-habitat): Declarative Preact widgets renderer in any CMS or DOM host ([demo](https://codepen.io/zouhir/pen/brrOPB)).\n- :tada: [**proppy-preact**](https://github.com/fahad19/proppy): Functional props composition for Preact components\n\n#### UI Component Libraries\n\n> Want to prototype something or speed up your development? Try one of these toolkits:\n\n- [**preact-material-components**](https://github.com/prateekbh/preact-material-components): Material Design Components for Preact ([website](https://material.preactjs.com/))\n- [**preact-mdc**](https://github.com/BerndWessels/preact-mdc): Material Design Components for Preact ([demo](https://github.com/BerndWessels/preact-mdc-demo))\n- [**preact-mui**](https://git.io/v1aVO): The MUI CSS Preact library.\n- [**preact-photon**](https://git.io/preact-photon): build beautiful desktop UI with [photon](http://photonkit.com)\n- [**preact-mdl**](https://git.io/preact-mdl): [Material Design Lite](https://getmdl.io) for Preact\n- [**preact-weui**](https://github.com/afeiship/preact-weui): [Weui](https://github.com/afeiship/preact-weui) for Preact\n- [**preact-charts**](https://github.com/pmkroeker/preact-charts): Charts for Preact\n\n\n---\n\n## Getting Started\n\n> 💁 _**Note:** You [don't need ES2015 to use Preact](https://github.com/developit/preact-in-es3)... but give it a try!_\n\nThe easiest way to get started with Preact is to install [Preact CLI](https://github.com/preactjs/preact-cli). This simple command-line tool wraps up the best possible Webpack and Babel setup for you, and even keeps you up-to-date as the underlying tools change. Best of all, it's easy to understand! It builds your app in a single command (`preact build`), doesn't need any configuration, and bakes in best-practises 🙌.\n\nThe following guide assumes you have some sort of ES2015 build set up using babel and/or webpack/browserify/gulp/grunt/etc.\n\nYou can also start with [preact-boilerplate] or a [CodePen Template](http://codepen.io/developit/pen/pgaROe?editors=0010).\n\n\n### Import what you need\n\nThe `preact` module provides both named and default exports, so you can either import everything under a namespace of your choosing, or just what you need as locals:\n\n##### Named:\n\n```js\nimport { h, render, Component } from 'preact';\n\n// Tell Babel to transform JSX into h() calls:\n/** @jsx h */\n```\n\n##### Default:\n\n```js\nimport preact from 'preact';\n\n// Tell Babel to transform JSX into preact.h() calls:\n/** @jsx preact.h */\n```\n\n> Named imports work well for highly structured applications, whereas the default import is quick and never needs to be updated when using different parts of the library.\n>\n> Instead of declaring the `@jsx` pragma in your code, it's best to configure it globally in a `.babelrc`:\n>\n> **For Babel 5 and prior:**\n>\n> ```json\n> { \"jsxPragma\": \"h\" }\n> ```\n>\n> **For Babel 6:**\n>\n> ```json\n> {\n> \"plugins\": [\n> [\"transform-react-jsx\", { \"pragma\":\"h\" }]\n> ]\n> }\n> ```\n>\n> **For Babel 7:**\n>\n> ```json\n> {\n> \"plugins\": [\n> [\"@babel/plugin-transform-react-jsx\", { \"pragma\":\"h\" }]\n> ]\n> }\n> ```\n> **For using Preact along with TypeScript add to `tsconfig.json`:**\n>\n> ```json\n> {\n> \"jsx\": \"react\",\n> \"jsxFactory\": \"h\",\n> }\n> ```\n\n\n### Rendering JSX\n\nOut of the box, Preact provides an `h()` function that turns your JSX into Virtual DOM elements _([here's how](http://jasonformat.com/wtf-is-jsx))_. It also provides a `render()` function that creates a DOM tree from that Virtual DOM.\n\nTo render some JSX, just import those two functions and use them like so:\n\n```js\nimport { h, render } from 'preact';\n\nrender((\n\t
\n\t\tHello, world!\n\t\t\n\t
\n), document.body);\n```\n\nThis should seem pretty straightforward if you've used hyperscript or one of its many friends. If you're not, the short of it is that the `h()` function import gets used in the final, transpiled code as a drop in replacement for `React.createElement()`, and so needs to be imported even if you don't explicitly use it in the code you write. Also note that if you're the kind of person who likes writing your React code in \"pure JavaScript\" (you know who you are) you will need to use `h()` wherever you would otherwise use `React.createElement()`.\n\nRendering hyperscript with a virtual DOM is pointless, though. We want to render components and have them updated when data changes - that's where the power of virtual DOM diffing shines. :star2:\n\n\n### Components\n\nPreact exports a generic `Component` class, which can be extended to build encapsulated, self-updating pieces of a User Interface. Components support all of the standard React [lifecycle methods], like `shouldComponentUpdate()` and `componentWillReceiveProps()`. Providing specific implementations of these methods is the preferred mechanism for controlling _when_ and _how_ components update.\n\nComponents also have a `render()` method, but unlike React this method is passed `(props, state)` as arguments. This provides an ergonomic means to destructure `props` and `state` into local variables to be referenced from JSX.\n\nLet's take a look at a very simple `Clock` component, which shows the current time.\n\n```js\nimport { h, render, Component } from 'preact';\n\nclass Clock extends Component {\n\trender() {\n\t\tlet time = new Date();\n\t\treturn ;\n\t}\n}\n\n// render an instance of Clock into :\nrender(, document.body);\n```\n\n\nThat's great. Running this produces the following HTML DOM structure:\n\n```html\n10:28:57 PM\n```\n\nIn order to have the clock's time update every second, we need to know when `` gets mounted to the DOM. _If you've used HTML5 Custom Elements, this is similar to the `attachedCallback` and `detachedCallback` lifecycle methods._ Preact invokes the following lifecycle methods if they are defined for a Component:\n\n| Lifecycle method | When it gets called |\n|-----------------------------|--------------------------------------------------|\n| `componentWillMount` | before the component gets mounted to the DOM |\n| `componentDidMount` | after the component gets mounted to the DOM |\n| `componentWillUnmount` | prior to removal from the DOM |\n| `componentWillReceiveProps` | before new props get accepted |\n| `shouldComponentUpdate` | before `render()`. Return `false` to skip render |\n| `componentWillUpdate` | before `render()` |\n| `componentDidUpdate` | after `render()` |\n\n\n\nSo, we want to have a 1-second timer start once the Component gets added to the DOM, and stop if it is removed. We'll create the timer and store a reference to it in `componentDidMount()`, and stop the timer in `componentWillUnmount()`. On each timer tick, we'll update the component's `state` object with a new time value. Doing this will automatically re-render the component.\n\n```js\nimport { h, render, Component } from 'preact';\n\nclass Clock extends Component {\n\tconstructor() {\n\t\tsuper();\n\t\t// set initial time:\n\t\tthis.state = {\n\t\t\ttime: Date.now()\n\t\t};\n\t}\n\n\tcomponentDidMount() {\n\t\t// update time every second\n\t\tthis.timer = setInterval(() => {\n\t\t\tthis.setState({ time: Date.now() });\n\t\t}, 1000);\n\t}\n\n\tcomponentWillUnmount() {\n\t\t// stop when not renderable\n\t\tclearInterval(this.timer);\n\t}\n\n\trender(props, state) {\n\t\tlet time = new Date(state.time).toLocaleTimeString();\n\t\treturn { time };\n\t}\n}\n\n// render an instance of Clock into :\nrender(, document.body);\n```\n\nNow we have [a ticking clock](http://jsfiddle.net/developit/u9m5x0L7/embedded/result,js/)!\n\n\n### Props & State\n\nThe concept (and nomenclature) for `props` and `state` is the same as in React. `props` are passed to a component by defining attributes in JSX, `state` is internal state. Changing either triggers a re-render, though by default Preact re-renders Components asynchronously for `state` changes and synchronously for `props` changes. You can tell Preact to render `prop` changes asynchronously by setting `options.syncComponentUpdates` to `false`.\n\n\n---\n\n\n## Linked State\n\nOne area Preact takes a little further than React is in optimizing state changes. A common pattern in ES2015 React code is to use Arrow functions within a `render()` method in order to update state in response to events. Creating functions enclosed in a scope on every render is inefficient and forces the garbage collector to do more work than is necessary.\n\nOne solution to this is to bind component methods declaratively.\nHere is an example using [decko](http://git.io/decko):\n\n```js\nclass Foo extends Component {\n\t@bind\n\tupdateText(e) {\n\t\tthis.setState({ text: e.target.value });\n\t}\n\trender({ }, { text }) {\n\t\treturn ;\n\t}\n}\n```\n\nWhile this achieves much better runtime performance, it's still a lot of unnecessary code to wire up state to UI.\n\nFortunately there is a solution, in the form of a module called [linkstate](https://github.com/developit/linkstate). Calling `linkState(component, 'text')` returns a function that accepts an Event and uses its associated value to update the given property in your component's state. Calls to `linkState()` with the same arguments are cached, so there is no performance penalty. Here is the previous example rewritten using _Linked State_:\n\n```js\nimport linkState from 'linkstate';\n\nclass Foo extends Component {\n\trender({ }, { text }) {\n\t\treturn ;\n\t}\n}\n```\n\nSimple and effective. It handles linking state from any input type, or an optional second parameter can be used to explicitly provide a keypath to the new state value.\n\n> **Note:** In Preact 7 and prior, `linkState()` was built right into Component. In 8.0, it was moved to a separate module. You can restore the 7.x behavior by using linkstate as a polyfill - see [the linkstate docs](https://github.com/developit/linkstate#usage).\n\n\n\n## Examples\n\nHere is a somewhat verbose Preact `` component:\n\n```js\nclass Link extends Component {\n\trender(props, state) {\n\t\treturn {props.children};\n\t}\n}\n```\n\nSince this is ES6/ES2015, we can further simplify:\n\n```js\nclass Link extends Component {\n render({ href, children }) {\n return ;\n }\n}\n\n// or, for wide-open props support:\nclass Link extends Component {\n render(props) {\n return ;\n }\n}\n\n// or, as a stateless functional component:\nconst Link = ({ children, ...props }) => (\n { children }\n);\n```\n\n\n## Extensions\n\nIt is likely that some projects based on Preact would wish to extend Component with great new functionality.\n\nPerhaps automatic connection to stores for a Flux-like architecture, or mixed-in context bindings to make it feel more like `React.createClass()`. Just use ES2015 inheritance:\n\n```js\nclass BoundComponent extends Component {\n\tconstructor(props) {\n\t\tsuper(props);\n\t\tthis.bind();\n\t}\n\tbind() {\n\t\tthis.binds = {};\n\t\tfor (let i in this) {\n\t\t\tthis.binds[i] = this[i].bind(this);\n\t\t}\n\t}\n}\n\n// example usage\nclass Link extends BoundComponent {\n\tclick() {\n\t\topen(this.href);\n\t}\n\trender() {\n\t\tlet { click } = this.binds;\n\t\treturn { children };\n\t}\n}\n```\n\n\nThe possibilities are pretty endless here. You could even add support for rudimentary mixins:\n\n```js\nclass MixedComponent extends Component {\n\tconstructor() {\n\t\tsuper();\n\t\t(this.mixins || []).forEach( m => Object.assign(this, m) );\n\t}\n}\n```\n\n## Debug Mode\n\nYou can inspect and modify the state of your Preact UI components at runtime using the\n[React Developer Tools](https://github.com/facebook/react-devtools) browser extension.\n\n1. Install the [React Developer Tools](https://github.com/facebook/react-devtools) extension\n2. Import the \"preact/debug\" module in your app\n3. Set `process.env.NODE_ENV` to 'development'\n4. Reload and go to the 'React' tab in the browser's development tools\n\n\n```js\nimport { h, Component, render } from 'preact';\n\n// Enable debug mode. You can reduce the size of your app by only including this\n// module in development builds. eg. In Webpack, wrap this with an `if (module.hot) {...}`\n// check.\nrequire('preact/debug');\n```\n\n### Runtime Error Checking\n\nTo enable debug mode, you need to set `process.env.NODE_ENV=development`. You can do this\nwith webpack via a builtin plugin.\n\n```js\n// webpack.config.js\n\n// Set NODE_ENV=development to enable error checking\nnew webpack.DefinePlugin({\n 'process.env': {\n 'NODE_ENV': JSON.stringify('development')\n }\n});\n```\n\nWhen enabled, warnings are logged to the console when undefined components or string refs\nare detected.\n\n### Developer Tools\n\nIf you only want to include devtool integration, without runtime error checking, you can\nreplace `preact/debug` in the above example with `preact/devtools`. This option doesn't\nrequire setting `NODE_ENV=development`.\n\n\n\n## Backers\nSupport us with a monthly donation and help us continue our activities. [[Become a backer](https://opencollective.com/preact#backer)]\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n## Sponsors\nBecome a sponsor and get your logo on our README on GitHub with a link to your site. [[Become a sponsor](https://opencollective.com/preact#sponsor)]\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n## License\n\nMIT\n\n\n\n[![Preact](http://i.imgur.com/YqCHvEW.gif)](https://preactjs.com)\n\n\n[preact-compat]: https://github.com/developit/preact-compat\n[ES6 Class]: https://facebook.github.io/react/docs/reusable-components.html#es6-classes\n[Functional Components]: https://facebook.github.io/react/blog/2015/10/07/react-v0.14.html#stateless-functional-components\n[hyperscript]: https://github.com/dominictarr/hyperscript\n[preact-boilerplate]: https://github.com/developit/preact-boilerplate\n[lifecycle methods]: https://facebook.github.io/react/docs/component-specs.html\n","readmeFilename":"README.md","_id":"preact@10.0.0-rc.3","_nodeVersion":"11.15.0","_npmVersion":"6.10.1","dist":{"integrity":"sha512-IvDc2AGvHJncEtORciLDzpluDF2MsZqf9eo6xHt7HVY4E6OvxZzAePYJtv3siVdEntxmB9NciQpbToT1APqJYQ==","shasum":"258d1bbf11744e0460b8681422cd6a0c18200df7","tarball":"http://localhost:4545/npm/registry/preact/preact-10.0.0-rc.3.tgz","fileCount":71,"unpackedSize":705527,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdd+k5CRA9TVsSAnZWagAAbWMP/1NqWbs2xYBACoO5X+k0\nLFzjkxcqs5CLXIeva4QEzGvguBsmJ1hBDKW+xjbE5rSLz25643SDv027/Ep8\nefeYavPKmxW367DavRZ67l0ZlI1iYiQh8+lGrhG1hDDN4rQ+tBCpmPgXHuTx\nliBR8geA6tcDB20x7m2MrI6UemCeRQUzHburJ51ED55FU2NDv0DmsG0zrlYM\n0PCrCVjXDVVD8MuPEvRBA5bU9UWGI+2pq/UMIqm9JMt1w2wp7wdbYhtrNeGf\ncop23tPsKGMdbSZBgtY2WbrhTmqV5npCgcF1jCe8ZTZMdbUlpgXyqgMenbDg\n96JNUE3jw8Nep7as/vcyDTvSwXEkM9OrcwicYzI7iuMX0A4HvVVqTDBqbrgD\n1F7iWcY4vTfeLLwWAhIUmVmExfGNOo7y2KbOgfwkwR70bkz++jRBJxf+rvKq\nFtsuDLkJCQzeCU3/fDlafHg6dl82FecVmnAwboCOQlAScWL2XHHYYDyECxVT\n+RWgWH7R1NLgkQMLrZlU3OuUjZRJ6IMCw8dISIfhUwegXLSM2KLkrDnBvwLD\nOw4rzpqoSUo/1Bns96xWlWixvIJNngtkTnfTjeVIQ9SN0hasPVuAAY84R7Nq\nMa4r0XzblpZoVEVfgVKI1kQHOvkS9abPy+KAsrAvNHkNg7znmXfVKzLf7Eik\nAG2e\r\n=ke/U\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBh6kbsPn6pSUKt23ny5OnfBtrEVFaH8kkub/wrLTEo3AiADJMqWfcQzkkqfDr/FymcVUqsChHn7Emx72R0PGahAgg=="}]},"maintainers":[{"email":"jason@developit.ca","name":"developit"},{"email":"ulliftw@gmail.com","name":"harmony"},{"email":"luke@lukeed.com","name":"lukeed"},{"email":"marvin@marvinhagemeister.de","name":"marvinhagemeister"},{"email":"prateek89born@gmail.com","name":"prateekbh"},{"email":"hello@preactjs.com","name":"preactjs"},{"email":"allamsetty.anup@gmail.com","name":"reznord"}],"_npmUser":{"name":"marvinhagemeister","email":"marvin@marvinhagemeister.de"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/preact_10.0.0-rc.3_1568139577055_0.224646169949128"},"_hasShrinkwrap":false},"10.0.0":{"name":"preact","amdName":"preact","version":"10.0.0","private":false,"description":"Fast 3kb React-compatible Virtual DOM library.","main":"dist/preact.js","module":"dist/preact.module.js","umd:main":"dist/preact.umd.js","source":"src/index.js","license":"MIT","types":"src/index.d.ts","scripts":{"build":"npm-run-all --parallel build:*","build:core":"microbundle build --raw","build:debug":"microbundle build --raw --cwd debug","build:hooks":"microbundle build --raw --cwd hooks","build:test-utils":"microbundle build --raw --cwd test-utils","build:compat":"microbundle build --raw --cwd compat --globals 'preact/hooks=preactHooks'","dev":"microbundle watch --raw --format cjs","dev:hooks":"microbundle watch --raw --format cjs --cwd hooks","dev:compat":"microbundle watch --raw --format cjs --cwd compat --globals 'preact/hooks=preactHooks'","test":"npm-run-all lint build --parallel test:mocha test:karma test:ts","test:ts":"tsc -p test/ts/ && mocha --require babel-register test/ts/**/*-test.js","test:mocha":"mocha --recursive --require babel-register test/shared test/node","test:karma":"cross-env COVERAGE=true karma start karma.conf.js --single-run","test:mocha:watch":"npm run test:mocha -- --watch","test:karma:watch":"karma start karma.conf.js --no-single-run","test:karma:hooks":"cross-env COVERAGE=false karma start karma.conf.js --grep=hooks/test/browser/**.js --no-single-run","test:karma:test-utils":"cross-env PERFORMANCE=false COVERAGE=false karma start karma.conf.js --grep=test-utils/test/shared/**.js --no-single-run","test:karma:bench":"cross-env PERFORMANCE=true COVERAGE=false karma start karma.conf.js --grep=test/benchmarks/**.js --single-run","benchmark":"npm run test:karma:bench -- no-single-run","lint":"eslint src test debug compat hooks test-utils","postinstall":"node -e \"console.log('\\u001b[35m\\u001b[1mLove Preact? You can now donate to our open collective:\\u001b[22m\\u001b[39m\\n > \\u001b[34mhttps://opencollective.com/preact/donate\\u001b[0m')\""},"eslintConfig":{"extends":"developit","settings":{"react":{"pragma":"createElement"}},"rules":{"camelcase":[1,{"allow":["__test__*","unstable_*","UNSAFE_*"]}],"prefer-rest-params":0,"prefer-spread":0,"no-cond-assign":0,"react/jsx-no-bind":0,"react/prefer-stateless-function":0,"react/sort-comp":0,"jest/valid-expect":0,"jest/no-disabled-tests":0,"react/no-find-dom-node":0}},"eslintIgnore":["test/fixtures","test/ts/","*.ts","dist"],"keywords":["preact","react","virtual dom","vdom","components","virtual","dom"],"authors":["Jason Miller "],"repository":{"type":"git","url":"git+https://github.com/preactjs/preact.git"},"bugs":{"url":"https://github.com/preactjs/preact/issues"},"homepage":"https://github.com/preactjs/preact","devDependencies":{"@types/chai":"^4.1.2","@types/mocha":"^5.0.0","@types/node":"^10.5.2","babel-cli":"6.26.0","babel-core":"6.26.3","babel-loader":"7.1.5","babel-plugin-istanbul":"5.0.1","babel-plugin-transform-async-to-promises":"^0.8.14","babel-plugin-transform-object-rest-spread":"^6.23.0","babel-plugin-transform-react-jsx":"^6.24.1","babel-preset-env":"^1.6.1","benchmark":"^2.1.4","chai":"^4.1.2","coveralls":"^3.0.0","cross-env":"^5.2.0","diff":"^3.5.0","eslint":"5.15.1","eslint-config-developit":"^1.1.1","eslint-plugin-react":"7.12.4","karma":"^3.0.0","karma-babel-preprocessor":"^7.0.0","karma-chai-sinon":"^0.1.5","karma-chrome-launcher":"^2.2.0","karma-coverage":"^1.1.2","karma-mocha":"^1.3.0","karma-mocha-reporter":"^2.2.5","karma-sauce-launcher":"^1.2.0","karma-sinon":"^1.0.5","karma-source-map-support":"^1.3.0","karma-sourcemap-loader":"^0.3.7","karma-webpack":"^3.0.5","lodash":"^4.17.10","microbundle":"^0.11.0","mocha":"^5.2.0","npm-run-all":"^4.0.0","prop-types":"^15.7.2","sinon":"^6.1.3","sinon-chai":"^3.0.0","travis-size-report":"^1.0.1","typescript":"^3.0.1","webpack":"^4.3.0"},"gitHead":"9ddc04e5ba846813e349c52036acba1f685188b7","_id":"preact@10.0.0","_nodeVersion":"11.15.0","_npmVersion":"6.10.1","dist":{"integrity":"sha512-v5geBMq8xlX7Ai8ed0QFXIs7/SQ+4lzdu3fpApRspZ6IiFDRHeEXQ3fqns0jDsXseHjYqgWlK1QxqdWF4QrdFw==","shasum":"c528f04ac6c792a04d8c98a5144d8b13e0cf2aed","tarball":"http://localhost:4545/npm/registry/preact/preact-10.0.0.tgz","fileCount":71,"unpackedSize":710623,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdk5pLCRA9TVsSAnZWagAAeI0P/i5mrpI/C7s4qdydmZCf\nmGDpI+JkuiWJkwRme4wzj0uUoqBc2YXJWdYpEtTZ3eluNmCBn8rOdE2hzayk\nJciq4nzCD7S8ZRI26ivPvm07BQOkFODP4/c5TIeV3/q5aPt/sRp3pEeD1w60\nGTToG6R5vlyddKfOgF899VooD+UhB6dy+MOnpG0bQ2IcsstsUnzcyuSnSQNc\nDyZs0htJF14rob855QiSZI27Uzr6BneaYHjFmFlb0/99j3uLVNzjSg9Q9Dnb\nQ/B4y8VoVJ4Z6qeygxCinTciehTZbEBDa5Z9f3tC5Vz5I+bfHifOiqHQeZ1j\nEl4YO13y6qb1DSLgQkAUS4mdqdAOQiT5e+MCWM6mlOCPnGI1nRC1LPsnBvPW\njlWPDyA4O/UABhEe6u7bamytKV46dB48Im6HrcUHsWr0Z4TGxjEPg7eaSN5a\npfTzaINkms/UXREGP7I4kKZtEu+CPnVvIqjFe3FIC2dQmBMWDYp2Ki7GoefP\nMIsfAP9ioKctVd8OO061AsC6eIjLcCeQoIZyLgZ94micwcjY/0hneSXiOmUW\nuYFaFqDM8yXWYo4qXDcQwu4j0j4+bkW9Ds7ZH/R5oz4sVYqRqVZL61Tvs4O6\n2SlYQT/QN2BuDSENJptbfznrH6uB+6pP3hv/mnKrjINfdRxBxWBYmdQiqd2L\nh2NR\r\n=8P5x\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBKonZIGPRgDxkonsxWNFnRFSzjw/VabtzWOubHDrwi6AiEAgwoBAbb1Oi5W6WZrRjQj8kyOzWx23hMUL/DAQb4evAs="}]},"maintainers":[{"email":"jason@developit.ca","name":"developit"},{"email":"npm.leah@hrmny.sh","name":"harmony"},{"email":"luke@lukeed.com","name":"lukeed"},{"email":"marvin@marvinhagemeister.de","name":"marvinhagemeister"},{"email":"prateek89born@gmail.com","name":"prateekbh"},{"email":"hello@preactjs.com","name":"preactjs"},{"email":"allamsetty.anup@gmail.com","name":"reznord"},{"email":"solarliner@gmail.com","name":"solarliner"}],"_npmUser":{"name":"marvinhagemeister","email":"marvin@marvinhagemeister.de"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/preact_10.0.0_1569954378194_0.7701957303344609"},"_hasShrinkwrap":false},"10.0.1":{"name":"preact","amdName":"preact","version":"10.0.1","private":false,"description":"Fast 3kb React-compatible Virtual DOM library.","main":"dist/preact.js","module":"dist/preact.module.js","umd:main":"dist/preact.umd.js","source":"src/index.js","license":"MIT","types":"src/index.d.ts","scripts":{"build":"npm-run-all --parallel build:*","build:core":"microbundle build --raw","build:debug":"microbundle build --raw --cwd debug","build:hooks":"microbundle build --raw --cwd hooks","build:test-utils":"microbundle build --raw --cwd test-utils","build:compat":"microbundle build --raw --cwd compat --globals 'preact/hooks=preactHooks'","dev":"microbundle watch --raw --format cjs","dev:hooks":"microbundle watch --raw --format cjs --cwd hooks","dev:compat":"microbundle watch --raw --format cjs --cwd compat --globals 'preact/hooks=preactHooks'","test":"npm-run-all lint build --parallel test:mocha test:karma test:ts","test:ts":"tsc -p test/ts/ && mocha --require babel-register test/ts/**/*-test.js","test:mocha":"mocha --recursive --require babel-register test/shared test/node","test:karma":"cross-env COVERAGE=true karma start karma.conf.js --single-run","test:mocha:watch":"npm run test:mocha -- --watch","test:karma:watch":"karma start karma.conf.js --no-single-run","test:karma:hooks":"cross-env COVERAGE=false karma start karma.conf.js --grep=hooks/test/browser/**.js --no-single-run","test:karma:test-utils":"cross-env PERFORMANCE=false COVERAGE=false karma start karma.conf.js --grep=test-utils/test/shared/**.js --no-single-run","test:karma:bench":"cross-env PERFORMANCE=true COVERAGE=false karma start karma.conf.js --grep=test/benchmarks/**.js --single-run","benchmark":"npm run test:karma:bench -- no-single-run","lint":"eslint src test debug compat hooks test-utils","postinstall":"node -e \"console.log('\\u001b[35m\\u001b[1mLove Preact? You can now donate to our open collective:\\u001b[22m\\u001b[39m\\n > \\u001b[34mhttps://opencollective.com/preact/donate\\u001b[0m')\""},"eslintConfig":{"extends":"developit","settings":{"react":{"pragma":"createElement"}},"rules":{"camelcase":[1,{"allow":["__test__*","unstable_*","UNSAFE_*"]}],"prefer-rest-params":0,"prefer-spread":0,"no-cond-assign":0,"react/jsx-no-bind":0,"react/prefer-stateless-function":0,"react/sort-comp":0,"jest/valid-expect":0,"jest/no-disabled-tests":0,"react/no-find-dom-node":0}},"eslintIgnore":["test/fixtures","test/ts/","*.ts","dist"],"keywords":["preact","react","virtual dom","vdom","components","virtual","dom"],"authors":["Jason Miller "],"repository":{"type":"git","url":"git+https://github.com/preactjs/preact.git"},"bugs":{"url":"https://github.com/preactjs/preact/issues"},"homepage":"https://github.com/preactjs/preact","devDependencies":{"@types/chai":"^4.1.2","@types/mocha":"^5.0.0","@types/node":"^10.5.2","babel-cli":"6.26.0","babel-core":"6.26.3","babel-loader":"7.1.5","babel-plugin-istanbul":"5.0.1","babel-plugin-transform-async-to-promises":"^0.8.14","babel-plugin-transform-object-rest-spread":"^6.23.0","babel-plugin-transform-react-jsx":"^6.24.1","babel-preset-env":"^1.6.1","benchmark":"^2.1.4","chai":"^4.1.2","coveralls":"^3.0.0","cross-env":"^5.2.0","diff":"^3.5.0","eslint":"5.15.1","eslint-config-developit":"^1.1.1","eslint-plugin-react":"7.12.4","karma":"^3.0.0","karma-babel-preprocessor":"^7.0.0","karma-chai-sinon":"^0.1.5","karma-chrome-launcher":"^2.2.0","karma-coverage":"^1.1.2","karma-mocha":"^1.3.0","karma-mocha-reporter":"^2.2.5","karma-sauce-launcher":"^1.2.0","karma-sinon":"^1.0.5","karma-source-map-support":"^1.3.0","karma-sourcemap-loader":"^0.3.7","karma-webpack":"^3.0.5","lodash":"^4.17.10","microbundle":"^0.11.0","mocha":"^5.2.0","npm-run-all":"^4.0.0","prop-types":"^15.7.2","sinon":"^6.1.3","sinon-chai":"^3.0.0","travis-size-report":"^1.0.1","typescript":"^3.0.1","webpack":"^4.3.0"},"gitHead":"a803e68e852e00594490e9500fd901da9f430092","_id":"preact@10.0.1","_nodeVersion":"11.15.0","_npmVersion":"6.10.1","dist":{"integrity":"sha512-lq7jo1rwwCd1YkiBcuOxRc3I0y1FZACa6O7tgNXt47QZJtSlLEE53f/FDNsLtiB2IVQTHbaey20TjSPmejhDyQ==","shasum":"16451887a8490dd534d60d1bc7d2ff4a70f7e0ee","tarball":"http://localhost:4545/npm/registry/preact/preact-10.0.1.tgz","fileCount":71,"unpackedSize":710409,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdqK5UCRA9TVsSAnZWagAAX4sQAIXTnEjVpKB2FfBOTkoT\nuR2II326NW4ecSCXh7wn/g6iaGfi2/Tb/1bxsadkFmJxmLq5N/6BNWzo7jqK\n07ijhizTuCvvnGk/vmxgRE1V/YWQz7o7RdxB13vwpIZFHuJAAo10WAyQfAD3\nER6PMgvKKlal6sDt2GM6SNkYU4/R8jgvyJ4+cnyIIuBwGnNUNQp4d+epkiPK\nQmq1naSAWaI1c4ctS6bqvfrCIGyUYWcpSdbHpsaYfchK2zNEgketvsnTCtyQ\nuPEeOyznfRHLeWVfMN/12tAIIKMddDBNmvuRQD4Z2esPSXVCYPyo6TPxCtHH\nHKEiYDYOCdGCjd9AS6klKo7nFt/siAnJFyOErTp91r5tE0t/Ry2wQoflwC5G\ngh45dOmvoxlXeiJNQyY1YQkHlh4nPk7mz1AtIXXKS3OwdrXSYMB/pZYJ+DWi\nq7j7q7JIsz43k6gUlV8az7JGGFnriBliiC5tIclojlC28xnFXn/gXKCUNmdv\nNCBgDlp717LiobpMVuJW4WsuvW66lyPFsGNncegG7VIQ5jokzYho+dDyLqdD\nYAecEkXAGsFiUPGL5pTTwwuMLTIAMbNvuDl9k+J+ND+X1VJmHksjp2P/UwOs\nLmsajLxIpRdOPxTO5Nv78D6LtdYbN1In3dip0njynP0EC4MqKWKtgWboYBy7\nbYRO\r\n=9Z+R\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBUDQDLvpER8cf4cDArM3cv+M5/YkpCOD7yWd/eT/UsHAiBd+U2Ti9WEHzG7NCGIlN1r7Xn6Hjwq6g3/vAcT4iR7/Q=="}]},"maintainers":[{"email":"jason@developit.ca","name":"developit"},{"email":"npm.leah@hrmny.sh","name":"harmony"},{"email":"luke@lukeed.com","name":"lukeed"},{"email":"marvin@marvinhagemeister.de","name":"marvinhagemeister"},{"email":"prateek89born@gmail.com","name":"prateekbh"},{"email":"hello@preactjs.com","name":"preactjs"},{"email":"allamsetty.anup@gmail.com","name":"reznord"},{"email":"solarliner@gmail.com","name":"solarliner"}],"_npmUser":{"name":"marvinhagemeister","email":"marvin@marvinhagemeister.de"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/preact_10.0.1_1571335763408_0.2985634315008716"},"_hasShrinkwrap":false},"10.0.2":{"name":"preact","amdName":"preact","version":"10.0.2","private":false,"description":"Fast 3kb React-compatible Virtual DOM library.","main":"dist/preact.js","module":"dist/preact.module.js","umd:main":"dist/preact.umd.js","unpkg":"dist/preact.umd.js","source":"src/index.js","license":"MIT","types":"src/index.d.ts","scripts":{"build":"npm-run-all --parallel build:*","build:core":"microbundle build --raw && cp dist/preact.js dist/preact.min.js","build:debug":"microbundle build --raw --cwd debug","build:hooks":"microbundle build --raw --cwd hooks","build:test-utils":"microbundle build --raw --cwd test-utils","build:compat":"microbundle build --raw --cwd compat --globals 'preact/hooks=preactHooks'","dev":"microbundle watch --raw --format cjs","dev:hooks":"microbundle watch --raw --format cjs --cwd hooks","dev:compat":"microbundle watch --raw --format cjs --cwd compat --globals 'preact/hooks=preactHooks'","test":"npm-run-all lint build --parallel test:mocha test:karma test:ts","test:ts":"run-p test:ts:*","test:ts:core":"tsc -p test/ts/ && mocha --require babel-register test/ts/**/*-test.js","test:ts:compat":"tsc -p compat/test/ts/","test:mocha":"mocha --recursive --require babel-register test/shared test/node","test:karma":"cross-env COVERAGE=true karma start karma.conf.js --single-run","test:mocha:watch":"npm run test:mocha -- --watch","test:karma:watch":"karma start karma.conf.js --no-single-run","test:karma:hooks":"cross-env COVERAGE=false karma start karma.conf.js --grep=hooks/test/browser/**.js --no-single-run","test:karma:test-utils":"cross-env PERFORMANCE=false COVERAGE=false karma start karma.conf.js --grep=test-utils/test/shared/**.js --no-single-run","test:karma:bench":"cross-env PERFORMANCE=true COVERAGE=false karma start karma.conf.js --grep=test/benchmarks/**.js --single-run","benchmark":"npm run test:karma:bench -- no-single-run","lint":"eslint src test debug compat hooks test-utils"},"eslintConfig":{"extends":"developit","settings":{"react":{"pragma":"createElement"}},"rules":{"camelcase":[1,{"allow":["__test__*","unstable_*","UNSAFE_*"]}],"prefer-rest-params":0,"prefer-spread":0,"no-cond-assign":0,"react/jsx-no-bind":0,"react/prefer-stateless-function":0,"react/sort-comp":0,"jest/valid-expect":0,"jest/no-disabled-tests":0,"react/no-find-dom-node":0}},"eslintIgnore":["test/fixtures","test/ts/","*.ts","dist"],"keywords":["preact","react","virtual dom","vdom","components","virtual","dom"],"authors":["Jason Miller "],"repository":{"type":"git","url":"git+https://github.com/preactjs/preact.git"},"bugs":{"url":"https://github.com/preactjs/preact/issues"},"homepage":"https://github.com/preactjs/preact","devDependencies":{"@types/chai":"^4.1.2","@types/mocha":"^5.0.0","@types/node":"^10.5.2","babel-cli":"6.26.0","babel-core":"6.26.3","babel-loader":"7.1.5","babel-plugin-istanbul":"5.0.1","babel-plugin-transform-async-to-promises":"^0.8.14","babel-plugin-transform-object-rest-spread":"^6.23.0","babel-plugin-transform-react-jsx":"^6.24.1","babel-preset-env":"^1.6.1","benchmark":"^2.1.4","chai":"^4.1.2","coveralls":"^3.0.0","cross-env":"^5.2.0","diff":"^3.5.0","eslint":"5.15.1","eslint-config-developit":"^1.1.1","eslint-plugin-react":"7.12.4","karma":"^3.0.0","karma-babel-preprocessor":"^7.0.0","karma-chai-sinon":"^0.1.5","karma-chrome-launcher":"^2.2.0","karma-coverage":"^1.1.2","karma-mocha":"^1.3.0","karma-mocha-reporter":"^2.2.5","karma-sauce-launcher":"^1.2.0","karma-sinon":"^1.0.5","karma-source-map-support":"^1.3.0","karma-sourcemap-loader":"^0.3.7","karma-webpack":"^3.0.5","lodash":"^4.17.10","microbundle":"^0.11.0","mocha":"^5.2.0","npm-run-all":"^4.0.0","prop-types":"^15.7.2","sinon":"^6.1.3","sinon-chai":"^3.0.0","travis-size-report":"^1.0.1","typescript":"^3.0.1","webpack":"^4.3.0"},"gitHead":"8e848b037e8316acb725eb2b7e98d839d3817f62","_id":"preact@10.0.2","_nodeVersion":"11.15.0","_npmVersion":"6.10.1","dist":{"integrity":"sha512-itBKz7eM5DFpwzsO/XVb9MM0BJwhsZadPnXRAZwrs31I07gcWMS61QKrjzz69At2L4wBIkRneyx5AnlxHfrgVw==","shasum":"fd65b1cdd3c864ce482749466dfb97fb4f363bea","tarball":"http://localhost:4545/npm/registry/preact/preact-10.0.2.tgz","fileCount":72,"unpackedSize":731073,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdtyv9CRA9TVsSAnZWagAAOYEP/0AnC2qodkMGF3Xujorx\nUuFs1WL5rFCrx1ftyoKK5OFDNneux7VwxcJLIdn+DjKb2sId120+qxKZLH7Z\nNms5lb6Pcam+3zX+6AtjrUYpnQ7oUkZsiaF4YN3bmyyP0ztrZiLpDMVfqvnF\nRC0bZjnRzPgNKc/ucucB7M5mtn6XXR0JPkQruua2uc6X6aso7cLNneXGstSU\nw7aJxW8TYsa4AMVI2F3/4NiNnVqC15k4CoWwoYUU7MAvEN+5xvY3y/lt54FM\nKpHNPYp5vvB3hk4W9V5plLquGfOruO6IYgV8VkccNAkbNkfyPYuLgB+GmKno\nOoYT9UrrwQtcwPGYOSAUF41Y0luFSFAQnySsS+joJRPpV0h4o0F165OjIo7i\ncVMGd5zUU3vapj3CtIrkf3DJiMPJi9SDqf6M9vlpWuk6S+/ouFv6QTTDR23h\nN4GYS/SqSQCmKaIUBpKtofo7bWJTMGQnauP4M7Cu0og1hjO5vbsp+5VbXMK2\nuLc3nWX6l28jL/2mWPCm6m/1VZeENquj5cB2SnqOEZ3DUgoGLR5Ei+UMAjZe\nS2I8CXJFIGvxdthr4AQjuBDhUAJ1LIkUSgBSdrxtv+X1F3+wsVl8bdBCj1PR\nWpiTZoHGnLoLkwDYk4p79gHirh9z1jiyjskvXz8HpONvy8Wv3aWPEcF2bqL+\n3PqF\r\n=ZK9R\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCqHQfoAFsWGrmho1Hn2QLTFmlWPOXYr4Dz8eiZjwV0vAIgDVYoOK60HyHIUB/T0Gp+XOpYTKWZX2Xmu4xbeBi0vbA="}]},"maintainers":[{"email":"jason@developit.ca","name":"developit"},{"email":"npm.leah@hrmny.sh","name":"harmony"},{"email":"luke@lukeed.com","name":"lukeed"},{"email":"marvin@marvinhagemeister.de","name":"marvinhagemeister"},{"email":"prateek89born@gmail.com","name":"prateekbh"},{"email":"hello@preactjs.com","name":"preactjs"},{"email":"allamsetty.anup@gmail.com","name":"reznord"},{"email":"solarliner@gmail.com","name":"solarliner"}],"_npmUser":{"name":"marvinhagemeister","email":"marvin@marvinhagemeister.de"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/preact_10.0.2_1572285436489_0.19859824508300905"},"_hasShrinkwrap":false},"10.0.3":{"name":"preact","amdName":"preact","version":"10.0.3","private":false,"description":"Fast 3kb React-compatible Virtual DOM library.","main":"dist/preact.js","module":"dist/preact.module.js","umd:main":"dist/preact.umd.js","unpkg":"dist/preact.umd.js","source":"src/index.js","license":"MIT","types":"src/index.d.ts","scripts":{"build":"npm-run-all --parallel build:*","build:core":"microbundle build --raw && cp dist/preact.js dist/preact.min.js","build:debug":"microbundle build --raw --cwd debug","build:hooks":"microbundle build --raw --cwd hooks","build:test-utils":"microbundle build --raw --cwd test-utils","build:compat":"microbundle build --raw --cwd compat --globals 'preact/hooks=preactHooks'","dev":"microbundle watch --raw --format cjs","dev:hooks":"microbundle watch --raw --format cjs --cwd hooks","dev:compat":"microbundle watch --raw --format cjs --cwd compat --globals 'preact/hooks=preactHooks'","test":"npm-run-all lint build --parallel test:mocha test:karma test:ts","test:ts":"run-p test:ts:*","test:ts:core":"tsc -p test/ts/ && mocha --require babel-register test/ts/**/*-test.js","test:ts:compat":"tsc -p compat/test/ts/","test:mocha":"mocha --recursive --require babel-register test/shared test/node","test:karma":"cross-env COVERAGE=true karma start karma.conf.js --single-run","test:mocha:watch":"npm run test:mocha -- --watch","test:karma:watch":"karma start karma.conf.js --no-single-run","test:karma:hooks":"cross-env COVERAGE=false karma start karma.conf.js --grep=hooks/test/browser/**.js --no-single-run","test:karma:test-utils":"cross-env PERFORMANCE=false COVERAGE=false karma start karma.conf.js --grep=test-utils/test/shared/**.js --no-single-run","test:karma:bench":"cross-env PERFORMANCE=true COVERAGE=false karma start karma.conf.js --grep=test/benchmarks/**.js --single-run","benchmark":"npm run test:karma:bench -- no-single-run","lint":"eslint src test debug compat hooks test-utils"},"eslintConfig":{"extends":"developit","settings":{"react":{"pragma":"createElement"}},"rules":{"camelcase":[1,{"allow":["__test__*","unstable_*","UNSAFE_*"]}],"prefer-rest-params":0,"prefer-spread":0,"no-cond-assign":0,"react/jsx-no-bind":0,"react/prefer-stateless-function":0,"react/sort-comp":0,"jest/valid-expect":0,"jest/no-disabled-tests":0,"react/no-find-dom-node":0}},"eslintIgnore":["test/fixtures","test/ts/","*.ts","dist"],"keywords":["preact","react","virtual dom","vdom","components","virtual","dom"],"authors":["Jason Miller "],"repository":{"type":"git","url":"git+https://github.com/preactjs/preact.git"},"bugs":{"url":"https://github.com/preactjs/preact/issues"},"homepage":"https://github.com/preactjs/preact","devDependencies":{"@types/chai":"^4.1.2","@types/mocha":"^5.0.0","@types/node":"^10.5.2","babel-cli":"6.26.0","babel-core":"6.26.3","babel-loader":"7.1.5","babel-plugin-istanbul":"5.0.1","babel-plugin-transform-async-to-promises":"^0.8.14","babel-plugin-transform-object-rest-spread":"^6.23.0","babel-plugin-transform-react-jsx":"^6.24.1","babel-preset-env":"^1.6.1","benchmark":"^2.1.4","chai":"^4.1.2","coveralls":"^3.0.0","cross-env":"^5.2.0","diff":"^3.5.0","eslint":"5.15.1","eslint-config-developit":"^1.1.1","eslint-plugin-react":"7.12.4","karma":"^3.0.0","karma-babel-preprocessor":"^7.0.0","karma-chai-sinon":"^0.1.5","karma-chrome-launcher":"^2.2.0","karma-coverage":"^1.1.2","karma-mocha":"^1.3.0","karma-mocha-reporter":"^2.2.5","karma-sauce-launcher":"^1.2.0","karma-sinon":"^1.0.5","karma-source-map-support":"^1.3.0","karma-sourcemap-loader":"^0.3.7","karma-webpack":"^3.0.5","lodash":"^4.17.10","microbundle":"^0.11.0","mocha":"^5.2.0","npm-run-all":"^4.0.0","prop-types":"^15.7.2","sinon":"^6.1.3","sinon-chai":"^3.0.0","travis-size-report":"^1.0.1","typescript":"^3.0.1","webpack":"^4.3.0"},"gitHead":"88999fe6c46b81a7551c77ed95082a778f576aa5","_id":"preact@10.0.3","_nodeVersion":"11.15.0","_npmVersion":"6.10.1","dist":{"integrity":"sha512-PpoOHxUd550lxSXu2iE2PRKuz/Jm0MSCCiThXEj4DsAWSRg7lCb76YFrNEenFDlEPy0RmDT5xeJPsIueaFAplw==","shasum":"01e037240334aa7b478dbaa693ee2cb378da3757","tarball":"http://localhost:4545/npm/registry/preact/preact-10.0.3.tgz","fileCount":72,"unpackedSize":732016,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJduAP2CRA9TVsSAnZWagAAe6IP/RVlcKf4QcSoRAhrAZ18\nuscT2ztEJGgceM2/GvNyhnqrUd5zYOgocdL7xFuDJnwCSFQhXKebRNA1ZksR\nuwub+dgXDeu6WUD2VnPXQAP93W3xuy0tK31Y4lLGlkARH+TAcSZ4NM8muu91\n65eB3nkBdr2N1wZr43+mb7dA5LcLt/O9cOuN4KZHNF8KvfWdfmJ8jGphlr37\nggw++LWpLyXBqjzBeFjIRIh4TJLwQL+37y0AOjhM0Iklbn3stG64elJy3VP4\n67i91zX4M1OyxcW302Wn+rtG9Z8NCsAtTaMQbXCTlpln2ZQ0FtECWbCz0Tmk\nP8TzxklmIvYNcMxBNQ069AO20JDkF/LcQ6FZ8/EUdCpuQvQYq0bnmhkHpOq0\nr0Zg7QYaAsqQlthLMO3hBm6xk/KHKzYTcamLaKibQE0iZjM2bA8y/OwO2azs\nL2dcmPlKjSFub3tvz0mHe/MdAAntkF/M0cmMrEa0uRjyVvn3pSbDLTC2dM6C\nGeMyd3oAPN89c5vZ6KipAPY04lc+vFfgBwZ0s/J6w6VE4hmylc+T8X3/ScoD\n30xDValsc3E4GcubAeChUVbN7M5jPJh6NpxQJyD1dg06U4IwCZuRftzVt43x\nYoBXQPyRbGt/PZKb94/dX3Qee1MjMf5tFaHmu1Rzvv3So9xU72rttWLTkn1k\n+I40\r\n=ql3D\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDE0pu3mXGlnysIRP9QA+3q4RyTntwqE831a4LN1wHOogIhAN1oXg/fu7XDC0UkmdyL9lCeGfcX86MKkkHZtCehEDtK"}]},"maintainers":[{"email":"jason@developit.ca","name":"developit"},{"email":"npm.leah@hrmny.sh","name":"harmony"},{"email":"luke@lukeed.com","name":"lukeed"},{"email":"marvin@marvinhagemeister.de","name":"marvinhagemeister"},{"email":"prateek89born@gmail.com","name":"prateekbh"},{"email":"hello@preactjs.com","name":"preactjs"},{"email":"allamsetty.anup@gmail.com","name":"reznord"},{"email":"solarliner@gmail.com","name":"solarliner"}],"_npmUser":{"name":"marvinhagemeister","email":"marvin@marvinhagemeister.de"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/preact_10.0.3_1572340725829_0.26166707389791855"},"_hasShrinkwrap":false},"10.0.4":{"name":"preact","amdName":"preact","version":"10.0.4","private":false,"description":"Fast 3kb React-compatible Virtual DOM library.","main":"dist/preact.js","module":"dist/preact.module.js","umd:main":"dist/preact.umd.js","unpkg":"dist/preact.umd.js","source":"src/index.js","license":"MIT","types":"src/index.d.ts","scripts":{"build":"npm-run-all --parallel build:*","build:core":"microbundle build --raw && cp dist/preact.js dist/preact.min.js","build:debug":"microbundle build --raw --cwd debug","build:hooks":"microbundle build --raw --cwd hooks","build:test-utils":"microbundle build --raw --cwd test-utils","build:compat":"microbundle build --raw --cwd compat --globals 'preact/hooks=preactHooks'","dev":"microbundle watch --raw --format cjs","dev:hooks":"microbundle watch --raw --format cjs --cwd hooks","dev:compat":"microbundle watch --raw --format cjs --cwd compat --globals 'preact/hooks=preactHooks'","test":"npm-run-all lint build --parallel test:mocha test:karma test:ts","test:ts":"run-p test:ts:*","test:ts:core":"tsc -p test/ts/ && mocha --require babel-register test/ts/**/*-test.js","test:ts:compat":"tsc -p compat/test/ts/","test:mocha":"mocha --recursive --require babel-register test/shared test/node","test:karma":"cross-env COVERAGE=true karma start karma.conf.js --single-run","test:mocha:watch":"npm run test:mocha -- --watch","test:karma:watch":"karma start karma.conf.js --no-single-run","test:karma:hooks":"cross-env COVERAGE=false karma start karma.conf.js --grep=hooks/test/browser/**.js --no-single-run","test:karma:test-utils":"cross-env PERFORMANCE=false COVERAGE=false karma start karma.conf.js --grep=test-utils/test/shared/**.js --no-single-run","test:karma:bench":"cross-env PERFORMANCE=true COVERAGE=false karma start karma.conf.js --grep=test/benchmarks/**.js --single-run","benchmark":"npm run test:karma:bench -- no-single-run","lint":"eslint src test debug compat hooks test-utils"},"eslintConfig":{"extends":"developit","settings":{"react":{"pragma":"createElement"}},"rules":{"camelcase":[1,{"allow":["__test__*","unstable_*","UNSAFE_*"]}],"prefer-rest-params":0,"prefer-spread":0,"no-cond-assign":0,"react/jsx-no-bind":0,"react/prefer-stateless-function":0,"react/sort-comp":0,"jest/valid-expect":0,"jest/no-disabled-tests":0,"react/no-find-dom-node":0}},"eslintIgnore":["test/fixtures","test/ts/","*.ts","dist"],"keywords":["preact","react","virtual dom","vdom","components","virtual","dom"],"authors":["Jason Miller "],"repository":{"type":"git","url":"git+https://github.com/preactjs/preact.git"},"bugs":{"url":"https://github.com/preactjs/preact/issues"},"homepage":"https://github.com/preactjs/preact","devDependencies":{"@types/chai":"^4.1.2","@types/mocha":"^5.0.0","@types/node":"^10.5.2","babel-cli":"6.26.0","babel-core":"6.26.3","babel-loader":"7.1.5","babel-plugin-istanbul":"5.0.1","babel-plugin-transform-async-to-promises":"^0.8.14","babel-plugin-transform-object-rest-spread":"^6.23.0","babel-plugin-transform-react-jsx":"^6.24.1","babel-preset-env":"^1.6.1","benchmark":"^2.1.4","chai":"^4.1.2","coveralls":"^3.0.0","cross-env":"^5.2.0","diff":"^3.5.0","eslint":"5.15.1","eslint-config-developit":"^1.1.1","eslint-plugin-react":"7.12.4","karma":"^3.0.0","karma-babel-preprocessor":"^7.0.0","karma-chai-sinon":"^0.1.5","karma-chrome-launcher":"^2.2.0","karma-coverage":"^1.1.2","karma-mocha":"^1.3.0","karma-mocha-reporter":"^2.2.5","karma-sauce-launcher":"^1.2.0","karma-sinon":"^1.0.5","karma-source-map-support":"^1.3.0","karma-sourcemap-loader":"^0.3.7","karma-webpack":"^3.0.5","lodash":"^4.17.10","microbundle":"^0.11.0","mocha":"^5.2.0","npm-run-all":"^4.0.0","prop-types":"^15.7.2","sinon":"^6.1.3","sinon-chai":"^3.0.0","travis-size-report":"^1.0.1","typescript":"^3.0.1","webpack":"^4.3.0"},"gitHead":"5eee583ed1395a3dd5e313a999468a6bffe46ca0","_id":"preact@10.0.4","_nodeVersion":"12.12.0","_npmVersion":"6.11.3","dist":{"integrity":"sha512-x9QW91LVQZ4lkMZ8gOucyaW1414MEtgSC//JwlxR0nfq/QEdbaLQZrWFFWgjtGyNBBXg2P0TZ6u6W+XlpjcK2Q==","shasum":"7c1a2e074ea64a2d3c83349f7f55304ed0e017a7","tarball":"http://localhost:4545/npm/registry/preact/preact-10.0.4.tgz","fileCount":80,"unpackedSize":805335,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJduDlmCRA9TVsSAnZWagAAz0IP/0F6S9txkiCx5IfImAw+\nsCpAyP039kJlIo/Pmxtvfjek5I2c56qivkkrOFm85ANH2FdpgqkWESiNWru+\n2s8kgy3YRlbKFTH4nWpJB9bZp4SiBRnBMr7kw/7Ejurmez0FdJYUsaG0HYdL\nkTMfVjFbhyTKawCLas5w6O35G98lInn3OWJc0hrQbrK9X3vEXpYxk8j8ewLR\nRATHZ6f7SwGvY2oWOt/1lasQg0fyYjBFhMrwIDzVPVBHyRuwXYV4D6lxTbfy\nf6tAIlSyHdc2QxeiLNuUT1IiSrEAXdS5u2/GR1QxB4s9vv4DtwSkozaxQQmv\nZfFHEGDbVt3xik+l0t499vj19tP29VNae1Vx7kRnWTaZNWvWhXiEpBgckkFX\nZQeQ5SQthrwrX3B5ug7ZABp6TyrMowXVo9Q46Sc5JCBS7Mkd8RE0K0jRm2TK\nVmbgK74BnHy7n4OVtHOn6EsYgXxl1VnkRKm9HzTj5Or0Jyga0I8LeoArGOli\nCA8pbNV62ll/2Sjq2h37XpI8M7NIYYa1XBE3grh8c4doUg9LrSo+gPOM7DsR\n5eyKV5mDXpawEGHtPhZ39eI4X6xd829SD0DDBRQrfzvSLkRbPOCMVg7p2oeD\nPjToVljbhIjMps9fJ4BxhDgXsBIvuYnvSY3H/QiwqJts8pm/xosqEewR8FiL\n7yDk\r\n=HA/J\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEtv1YX0R9UzKrytTtIWhVAUfv5wN1ARdtI/Hdb4W1SBAiEAyrnzqtyQN+pSn/KMpLvmt4vxMRAG/5uCzi+1+aqQpPY="}]},"maintainers":[{"email":"jason@developit.ca","name":"developit"},{"email":"npm.leah@hrmny.sh","name":"harmony"},{"email":"luke@lukeed.com","name":"lukeed"},{"email":"marvin@marvinhagemeister.de","name":"marvinhagemeister"},{"email":"prateek89born@gmail.com","name":"prateekbh"},{"email":"hello@preactjs.com","name":"preactjs"},{"email":"allamsetty.anup@gmail.com","name":"reznord"},{"email":"solarliner@gmail.com","name":"solarliner"}],"_npmUser":{"name":"robertknight","email":"robertknight@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/preact_10.0.4_1572354406245_0.8735966065912224"},"_hasShrinkwrap":false},"8.5.3":{"name":"preact","version":"8.5.3","description":"Fast 3kb React alternative with the same modern API. Components & Virtual DOM.","main":"dist/preact.js","jsnext:main":"dist/preact.mjs","module":"dist/preact.mjs","dev:main":"dist/preact.dev.js","minified:main":"dist/preact.min.js","unpkg":"dist/preact.min.js","types":"dist/preact.d.ts","umd:main":"dist/preact.umd.js","scripts":{"clean":"rimraf dist/ devtools.js devtools.js.map debug.js debug.js.map test/ts/**/*.js","copy-flow-definition":"copyfiles -f src/preact.js.flow dist","copy-typescript-definition":"copyfiles -f src/preact.d.ts dist","build":"npm-run-all --silent clean transpile copy-flow-definition copy-typescript-definition strip optimize minify size","flow":"flow","transpile:main":"rollup -c config/rollup.config.js","transpile:devtools":"rollup -c config/rollup.config.devtools.js","transpile:esm":"rollup -c config/rollup.config.module.js","transpile:umd":"rollup -c config/rollup.config.umd.js","transpile:debug":"babel debug/ -o debug.js -s","transpile":"npm-run-all transpile:main transpile:esm transpile:umd transpile:devtools transpile:debug","optimize":"uglifyjs dist/preact.dev.js -c conditionals=false,sequences=false,loops=false,join_vars=false,collapse_vars=false --pure-funcs=Object.defineProperty --mangle-props --mangle-regex=\"/^(_|normalizedNodeName|nextBase|prev[CPS]|_parentC)/\" --name-cache config/properties.json -b width=120,quote_style=3 -o dist/preact.js -p relative --in-source-map dist/preact.dev.js.map --source-map dist/preact.js.map","minify":"uglifyjs dist/preact.js -c collapse_vars,evaluate,screw_ie8,unsafe,loops=false,keep_fargs=false,pure_getters,unused,dead_code -m -o dist/preact.min.js -p relative --in-source-map dist/preact.js.map --source-map dist/preact.min.js.map","prepare":"npm run build","strip:main":"jscodeshift --run-in-band -s -t config/codemod-strip-tdz.js dist/preact.dev.js && jscodeshift --run-in-band -s -t config/codemod-const.js dist/preact.dev.js && jscodeshift --run-in-band -s -t config/codemod-let-name.js dist/preact.dev.js","strip:esm":"jscodeshift --run-in-band -s -t config/codemod-strip-tdz.js dist/preact.mjs && jscodeshift --run-in-band -s -t config/codemod-const.js dist/preact.mjs && jscodeshift --run-in-band -s -t config/codemod-let-name.js dist/preact.mjs","strip":"npm-run-all strip:main strip:esm","size":"node -e \"process.stdout.write('gzip size: ')\" && gzip-size --raw dist/preact.min.js","test":"npm-run-all lint --parallel test:mocha test:karma test:ts test:flow","test:flow":"flow check","test:ts":"tsc -p test/ts/ && mocha --require babel-register test/ts/**/*-test.js","test:mocha":"mocha --recursive --require babel-register test/shared test/node","test:karma":"karma start test/karma.conf.js --single-run","test:mocha:watch":"npm run test:mocha -- --watch","test:karma:watch":"npm run test:karma -- no-single-run","test:size":"bundlesize","lint":"eslint debug devtools src test","prepublishOnly":"npm run build","smart-release":"npm run build && npm test && git commit -am $npm_package_version && git tag $npm_package_version && git push && git push --tags && npm publish","release":"cross-env npm run smart-release","postinstall":"node -e \"console.log('\\u001b[35m\\u001b[1mLove Preact? You can now donate to our open collective:\\u001b[22m\\u001b[39m\\n > \\u001b[34mhttps://opencollective.com/preact/donate\\u001b[0m')\""},"eslintConfig":{"extends":"./config/eslint-config.js"},"typings":"./dist/preact.d.ts","repository":{"type":"git","url":"git+https://github.com/developit/preact.git"},"keywords":["preact","react","virtual dom","vdom","components","virtual","dom"],"author":{"name":"Jason Miller","email":"jason@developit.ca"},"license":"MIT","bugs":{"url":"https://github.com/developit/preact/issues"},"homepage":"https://github.com/developit/preact","devDependencies":{"@types/chai":"^4.1.7","@types/mocha":"^5.2.5","@types/node":"^9.6.40","babel-cli":"^6.24.1","babel-core":"^6.24.1","babel-eslint":"^8.2.6","babel-loader":"^7.0.0","babel-plugin-transform-object-rest-spread":"^6.23.0","babel-plugin-transform-react-jsx":"^6.24.1","babel-preset-env":"^1.6.1","bundlesize":"^0.17.0","chai":"^4.2.0","copyfiles":"^2.1.0","core-js":"^2.6.0","coveralls":"^3.0.0","cross-env":"^5.1.4","diff":"^3.0.0","eslint":"^4.18.2","eslint-plugin-react":"^7.11.1","flow-bin":"^0.89.0","gzip-size-cli":"^2.0.0","istanbul-instrumenter-loader":"^3.0.0","jscodeshift":"^0.5.0","karma":"^3.1.3","karma-babel-preprocessor":"^7.0.0","karma-chai-sinon":"^0.1.5","karma-chrome-launcher":"^2.2.0","karma-coverage":"^1.1.2","karma-mocha":"^1.3.0","karma-mocha-reporter":"^2.2.5","karma-sauce-launcher":"^1.2.0","karma-sinon":"^1.0.5","karma-source-map-support":"^1.3.0","karma-sourcemap-loader":"^0.3.6","karma-webpack":"^3.0.5","mocha":"^5.0.4","npm-run-all":"^4.1.5","puppeteer":"^1.11.0","rimraf":"^2.5.3","rollup":"^0.57.1","rollup-plugin-babel":"^3.0.2","rollup-plugin-memory":"^3.0.0","rollup-plugin-node-resolve":"^3.4.0","sinon":"^4.4.2","sinon-chai":"^3.3.0","typescript":"^3.0.1","uglify-js":"^2.7.5","webpack":"^4.27.1"},"greenkeeper":{"ignore":["babel-cli","babel-core","babel-eslint","babel-loader","jscodeshift","rollup-plugin-babel"]},"bundlesize":[{"path":"./dist/preact.min.js","threshold":"4Kb"}],"gitHead":"2b967c5074e9d067490c0ab8984cdbb527a46b78","readme":"
Fast 3kB alternative to React with the same modern API.
\n\n**All the power of Virtual DOM components, without the overhead:**\n\n- Familiar React API & patterns: [ES6 Class] and [Functional Components]\n- Extensive React compatibility via a simple [preact-compat] alias\n- Everything you need: JSX, VDOM, React DevTools, HMR, SSR..\n- A highly optimized diff algorithm and seamless Server Side Rendering\n- Transparent asynchronous rendering with a pluggable scheduler\n- 🆕💥 **Instant no-config app bundling with [Preact CLI](https://github.com/developit/preact-cli)**\n\n### 💁 More information at the [Preact Website ➞](https://preactjs.com)\n\n\n---\n\n\n\n- [Demos](#demos)\n- [Libraries & Add-ons](#libraries--add-ons)\n- [Getting Started](#getting-started)\n\t- [Import what you need](#import-what-you-need)\n\t- [Rendering JSX](#rendering-jsx)\n\t- [Components](#components)\n\t- [Props & State](#props--state)\n- [Linked State](#linked-state)\n- [Examples](#examples)\n- [Extensions](#extensions)\n- [Debug Mode](#debug-mode)\n- [Backers](#backers)\n- [Sponsors](#sponsors)\n- [License](#license)\n\n\n\n\n# Preact\n\n[![npm](https://img.shields.io/npm/v/preact.svg)](http://npm.im/preact)\n[![CDNJS](https://img.shields.io/cdnjs/v/preact.svg)](https://cdnjs.com/libraries/preact)\n[![Preact Slack Community](https://preact-slack.now.sh/badge.svg)](https://preact-slack.now.sh)\n[![OpenCollective Backers](https://opencollective.com/preact/backers/badge.svg)](#backers)\n[![OpenCollective Sponsors](https://opencollective.com/preact/sponsors/badge.svg)](#sponsors)\n[![travis](https://travis-ci.org/developit/preact.svg?branch=master)](https://travis-ci.org/developit/preact)\n[![coveralls](https://img.shields.io/coveralls/developit/preact/master.svg)](https://coveralls.io/github/developit/preact)\n[![gzip size](http://img.badgesize.io/https://unpkg.com/preact/dist/preact.min.js?compression=gzip)](https://unpkg.com/preact/dist/preact.min.js)\n[![install size](https://packagephobia.now.sh/badge?p=preact)](https://packagephobia.now.sh/result?p=preact)\n\nPreact supports modern browsers and IE9+:\n\n[![Browsers](https://saucelabs.com/browser-matrix/preact.svg)](https://saucelabs.com/u/preact)\n\n\n---\n\n\n## Demos\n\n#### Real-World Apps\n\n- [**Preact Hacker News**](https://hn.kristoferbaxter.com) _([GitHub Project](https://github.com/kristoferbaxter/preact-hn))_\n- [**Play.cash**](https://play.cash) :notes: _([GitHub Project](https://github.com/feross/play.cash))_\n- [**BitMidi**](https://bitmidi.com/) 🎹 Wayback machine for free MIDI files _([GitHub Project](https://github.com/feross/bitmidi.com))_\n- [**Ultimate Guitar**](https://www.ultimate-guitar.com) 🎸speed boosted by Preact.\n- [**ESBench**](http://esbench.com) is built using Preact.\n- [**BigWebQuiz**](https://bigwebquiz.com) _([GitHub Project](https://github.com/jakearchibald/big-web-quiz))_\n- [**Nectarine.rocks**](http://nectarine.rocks) _([GitHub Project](https://github.com/developit/nectarine))_ :peach:\n- [**TodoMVC**](https://preact-todomvc.surge.sh) _([GitHub Project](https://github.com/developit/preact-todomvc))_\n- [**OSS.Ninja**](https://oss.ninja) _([GitHub Project](https://github.com/developit/oss.ninja))_\n- [**GuriVR**](https://gurivr.com) _([GitHub Project](https://github.com/opennewslabs/guri-vr))_\n- [**Color Picker**](https://colors.now.sh) _([GitHub Project](https://github.com/lukeed/colors-app))_ :art:\n- [**Offline Gallery**](https://use-the-platform.com/offline-gallery/) _([GitHub Project](https://github.com/vaneenige/offline-gallery/))_ :balloon:\n- [**Periodic Weather**](https://use-the-platform.com/periodic-weather/) _([GitHub Project](https://github.com/vaneenige/periodic-weather/))_ :sunny:\n- [**Rugby News Board**](http://nbrugby.com) _[(GitHub Project)](https://github.com/rugby-board/rugby-board-node)_\n- [**Preact Gallery**](https://preact.gallery/) an 8KB photo gallery PWA built using Preact.\n- [**Rainbow Explorer**](https://use-the-platform.com/rainbow-explorer/) Preact app to translate real life color to digital color _([Github project](https://github.com/vaneenige/rainbow-explorer))_.\n- [**YASCC**](https://carlosqsilva.github.io/YASCC/#/) Yet Another SoundCloud Client _([Github project](https://github.com/carlosqsilva/YASCC))_.\n- [**Journalize**](https://preact-journal.herokuapp.com/) 14k offline-capable journaling PWA using preact. _([Github project](https://github.com/jpodwys/preact-journal))_.\n\n\n#### Runnable Examples\n\n- [**Flickr Browser**](http://codepen.io/developit/full/VvMZwK/) (@ CodePen)\n- [**Animating Text**](http://codepen.io/developit/full/LpNOdm/) (@ CodePen)\n- [**60FPS Rainbow Spiral**](http://codepen.io/developit/full/xGoagz/) (@ CodePen)\n- [**Simple Clock**](http://jsfiddle.net/developit/u9m5x0L7/embedded/result,js/) (@ JSFiddle)\n- [**3D + ThreeJS**](http://codepen.io/developit/pen/PPMNjd?editors=0010) (@ CodePen)\n- [**Stock Ticker**](http://codepen.io/developit/pen/wMYoBb?editors=0010) (@ CodePen)\n- [*Create your Own!*](https://jsfiddle.net/developit/rs6zrh5f/embedded/result/) (@ JSFiddle)\n\n### Starter Projects\n\n- [**Preact Boilerplate**](https://preact-boilerplate.surge.sh) _([GitHub Project](https://github.com/developit/preact-boilerplate))_ :zap:\n- [**Preact Offline Starter**](https://preact-starter.now.sh) _([GitHub Project](https://github.com/lukeed/preact-starter))_ :100:\n- [**Preact PWA**](https://preact-pwa-yfxiijbzit.now.sh/) _([GitHub Project](https://github.com/ezekielchentnik/preact-pwa))_ :hamburger:\n- [**Parcel + Preact + Unistore Starter**](https://github.com/hwclass/parcel-preact-unistore-starter)\n- [**Preact Mobx Starter**](https://awaw00.github.io/preact-mobx-starter/) _([GitHub Project](https://github.com/awaw00/preact-mobx-starter))_ :sunny:\n- [**Preact Redux Example**](https://github.com/developit/preact-redux-example) :star:\n- [**Preact Redux/RxJS/Reselect Example**](https://github.com/continuata/preact-seed)\n- [**V2EX Preact**](https://github.com/yanni4night/v2ex-preact)\n- [**Preact Coffeescript**](https://github.com/crisward/preact-coffee)\n- [**Preact + TypeScript + Webpack**](https://github.com/k1r0s/bleeding-preact-starter)\n- [**0 config => Preact + Poi**](https://github.com/k1r0s/preact-poi-starter)\n- [**Zero configuration => Preact + Typescript + Parcel**](https://github.com/aalises/preact-typescript-parcel-starter)\n\n---\n\n## Libraries & Add-ons\n\n- :raised_hands: [**preact-compat**](https://git.io/preact-compat): use any React library with Preact *([full example](http://git.io/preact-compat-example))*\n- :twisted_rightwards_arrows: [**preact-context**](https://github.com/valotas/preact-context): React's `createContext` api for Preact\n- :page_facing_up: [**preact-render-to-string**](https://git.io/preact-render-to-string): Universal rendering.\n- :eyes: [**preact-render-spy**](https://github.com/mzgoddard/preact-render-spy): Enzyme-lite: Renderer with access to the produced virtual dom for testing.\n- :loop: [**preact-render-to-json**](https://git.io/preact-render-to-json): Render for Jest Snapshot testing.\n- :earth_americas: [**preact-router**](https://git.io/preact-router): URL routing for your components\n- :bookmark_tabs: [**preact-markup**](https://git.io/preact-markup): Render HTML & Custom Elements as JSX & Components\n- :satellite: [**preact-portal**](https://git.io/preact-portal): Render Preact components into (a) SPACE :milky_way:\n- :pencil: [**preact-richtextarea**](https://git.io/preact-richtextarea): Simple HTML editor component\n- :bookmark: [**preact-token-input**](https://github.com/developit/preact-token-input): Text field that tokenizes input, for things like tags\n- :card_index: [**preact-virtual-list**](https://github.com/developit/preact-virtual-list): Easily render lists with millions of rows ([demo](https://jsfiddle.net/developit/qqan9pdo/))\n- :repeat: [**preact-cycle**](https://git.io/preact-cycle): Functional-reactive paradigm for Preact\n- :triangular_ruler: [**preact-layout**](https://download.github.io/preact-layout/): Small and simple layout library\n- :thought_balloon: [**preact-socrates**](https://github.com/matthewmueller/preact-socrates): Preact plugin for [Socrates](http://github.com/matthewmueller/socrates)\n- :rowboat: [**preact-flyd**](https://github.com/xialvjun/preact-flyd): Use [flyd](https://github.com/paldepind/flyd) FRP streams in Preact + JSX\n- :speech_balloon: [**preact-i18nline**](https://github.com/download/preact-i18nline): Integrates the ecosystem around [i18n-js](https://github.com/everydayhero/i18n-js) with Preact via [i18nline](https://github.com/download/i18nline).\n- :microscope: [**preact-jsx-chai**](https://git.io/preact-jsx-chai): JSX assertion testing _(no DOM, right in Node)_\n- :tophat: [**preact-classless-component**](https://github.com/ld0rman/preact-classless-component): create preact components without the class keyword\n- :hammer: [**preact-hyperscript**](https://github.com/queckezz/preact-hyperscript): Hyperscript-like syntax for creating elements\n- :white_check_mark: [**shallow-compare**](https://github.com/tkh44/shallow-compare): simplified `shouldComponentUpdate` helper.\n- :shaved_ice: [**preact-codemod**](https://github.com/vutran/preact-codemod): Transform your React code to Preact.\n- :construction_worker: [**preact-helmet**](https://github.com/download/preact-helmet): A document head manager for Preact\n- :necktie: [**preact-delegate**](https://github.com/NekR/preact-delegate): Delegate DOM events\n- :art: [**preact-stylesheet-decorator**](https://github.com/k1r0s/preact-stylesheet-decorator): Add Scoped Stylesheets to your Preact Components\n- :electric_plug: [**preact-routlet**](https://github.com/k1r0s/preact-routlet): Simple `Component Driven` Routing for Preact using ES7 Decorators\n- :fax: [**preact-bind-group**](https://github.com/k1r0s/preact-bind-group): Preact Forms made easy, Group Events into a Single Callback\n- :hatching_chick: [**preact-habitat**](https://github.com/zouhir/preact-habitat): Declarative Preact widgets renderer in any CMS or DOM host ([demo](https://codepen.io/zouhir/pen/brrOPB)).\n- :tada: [**proppy-preact**](https://github.com/fahad19/proppy): Functional props composition for Preact components\n\n#### UI Component Libraries\n\n> Want to prototype something or speed up your development? Try one of these toolkits:\n\n- [**preact-material-components**](https://github.com/prateekbh/preact-material-components): Material Design Components for Preact ([website](https://material.preactjs.com/))\n- [**preact-mdc**](https://github.com/BerndWessels/preact-mdc): Material Design Components for Preact ([demo](https://github.com/BerndWessels/preact-mdc-demo))\n- [**preact-mui**](https://git.io/v1aVO): The MUI CSS Preact library.\n- [**preact-photon**](https://git.io/preact-photon): build beautiful desktop UI with [photon](http://photonkit.com)\n- [**preact-mdl**](https://git.io/preact-mdl): [Material Design Lite](https://getmdl.io) for Preact\n- [**preact-weui**](https://github.com/afeiship/preact-weui): [Weui](https://github.com/afeiship/preact-weui) for Preact\n\n\n---\n\n## Getting Started\n\n> 💁 _**Note:** You [don't need ES2015 to use Preact](https://github.com/developit/preact-in-es3)... but give it a try!_\n\nThe easiest way to get started with Preact is to install [Preact CLI](https://github.com/developit/preact-cli). This simple command-line tool wraps up the best possible Webpack and Babel setup for you, and even keeps you up-to-date as the underlying tools change. Best of all, it's easy to understand! It builds your app in a single command (`preact build`), doesn't need any configuration, and bakes in best-practises 🙌.\n\nThe following guide assumes you have some sort of ES2015 build set up using babel and/or webpack/browserify/gulp/grunt/etc.\n\nYou can also start with [preact-boilerplate] or a [CodePen Template](http://codepen.io/developit/pen/pgaROe?editors=0010).\n\n\n### Import what you need\n\nThe `preact` module provides both named and default exports, so you can either import everything under a namespace of your choosing, or just what you need as locals:\n\n##### Named:\n\n```js\nimport { h, render, Component } from 'preact';\n\n// Tell Babel to transform JSX into h() calls:\n/** @jsx h */\n```\n\n##### Default:\n\n```js\nimport preact from 'preact';\n\n// Tell Babel to transform JSX into preact.h() calls:\n/** @jsx preact.h */\n```\n\n> Named imports work well for highly structured applications, whereas the default import is quick and never needs to be updated when using different parts of the library.\n>\n> Instead of declaring the `@jsx` pragma in your code, it's best to configure it globally in a `.babelrc`:\n>\n> **For Babel 5 and prior:**\n>\n> ```json\n> { \"jsxPragma\": \"h\" }\n> ```\n>\n> **For Babel 6:**\n>\n> ```json\n> {\n> \"plugins\": [\n> [\"transform-react-jsx\", { \"pragma\":\"h\" }]\n> ]\n> }\n> ```\n>\n> **For Babel 7:**\n>\n> ```json\n> {\n> \"plugins\": [\n> [\"@babel/plugin-transform-react-jsx\", { \"pragma\":\"h\" }]\n> ]\n> }\n> ```\n> **For using Preact along with TypeScript add to `tsconfig.json`:**\n>\n> ```json\n> {\n> \"jsx\": \"react\",\n> \"jsxFactory\": \"h\",\n> }\n> ```\n\n\n### Rendering JSX\n\nOut of the box, Preact provides an `h()` function that turns your JSX into Virtual DOM elements _([here's how](http://jasonformat.com/wtf-is-jsx))_. It also provides a `render()` function that creates a DOM tree from that Virtual DOM.\n\nTo render some JSX, just import those two functions and use them like so:\n\n```js\nimport { h, render } from 'preact';\n\nrender((\n\t
Fast 3kB alternative to React with the same modern API.
\r\n\r\n**All the power of Virtual DOM components, without the overhead:**\r\n\r\n- Familiar React API & patterns: ES6 Class, hooks, and Functional Components\r\n- Extensive React compatibility via a simple [preact/compat] alias\r\n- Everything you need: JSX, VDOM, [DevTools], HMR, SSR.\r\n- Highly optimized diff algorithm and seamless hydration from Server Side Rendering\r\n- Supports all modern browsers and IE11\r\n- Transparent asynchronous rendering with a pluggable scheduler\r\n- **Instant production-grade app setup with [Preact CLI](https://github.com/preactjs/preact-cli)**\r\n\r\n### 💁 More information at the [Preact Website ➞](https://preactjs.com)\r\n\r\n\r\n
\r\n\r\n\r\nYou can find some awesome libraries in the [awesome-preact list](https://github.com/preactjs/awesome-preact) :sunglasses:\r\n\r\n---\r\n\r\n## Getting Started\r\n\r\n> 💁 _**Note:** You [don't need ES2015 to use Preact](https://github.com/developit/preact-in-es3)... but give it a try!_\r\n\r\nThe easiest way to get started with Preact is to install [Preact CLI](https://github.com/preactjs/preact-cli). This simple command-line tool wraps up the best possible tooling for you, and even keeps things like Webpack and Babel up-to-date as they change. Best of all, it's easy to understand! Start a project or compile for production in a single command (`preact build`), with no configuration needed and best practices baked in! 🙌\r\n\r\n#### Tutorial: Building UI with Preact\r\n\r\nWith Preact, you create user interfaces by assembling trees of components and elements. Components are functions or classes that return a description of what their tree should output. These descriptions are typically written in [JSX](https://facebook.github.io/jsx/) (shown underneath), or [HTM](https://github.com/developit/htm) which leverages standard JavaScript Tagged Templates. Both syntaxes can express trees of elements with \"props\" (similar to HTML attributes) and children.\r\n\r\nTo get started using Preact, first look at the render() function. This function accepts a tree description and creates the structure described. Next, it appends this structure to a parent DOM element provided as the second argument. Future calls to render() will reuse the existing tree and update it in-place in the DOM. Internally, render() will calculate the difference from previous outputted structures in an attempt to perform as few DOM operations as possible.\r\n\r\n```js\r\nimport { h, render } from 'preact';\r\n// Tells babel to use h for JSX. It's better to configure this globally.\r\n// See https://babeljs.io/docs/en/babel-plugin-transform-react-jsx#usage\r\n// In tsconfig you can specify this with the jsxFactory\r\n/** @jsx h */\r\n\r\n// create our tree and append it to document.body:\r\nrender(
Hello
, document.body);\r\n\r\n// update the tree in-place:\r\nrender(
Hello World!
, document.body);\r\n// ^ this second invocation of render(...) will use a single DOM call to update the text of the
\r\n```\r\n\r\nHooray! render() has taken our structure and output a User Interface! This approach demonstrates a simple case, but would be difficult to use as an application grows in complexity. Each change would be forced to calculate the difference between the current and updated structure for the entire application. Components can help here – by dividing the User Interface into nested Components each can calculate their difference from their mounted point. Here's an example:\r\n\r\n```js\r\nimport { render, h } from 'preact';\r\nimport { useState } from 'preact/hooks';\r\n\r\n/** @jsx h */\r\n\r\nconst App = () => {\r\n\tconst [input, setInput] = useState('');\r\n\r\n\treturn (\r\n\t\t
\r\n\t\t\t
Do you agree to the statement: \"Preact is awesome\"?
\r\n\t\t\t setInput(e.target.value)} />\r\n\t\t
\r\n\t)\r\n}\r\n\r\nrender(, document.body);\r\n```\r\n\r\n---\r\n\r\n## Backers\r\n\r\nSupport us with a monthly donation and help us continue our activities. [[Become a backer](https://opencollective.com/preact#backer)]\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n## Sponsors\r\nBecome a sponsor and get your logo on our README on GitHub with a link to your site. [[Become a sponsor](https://opencollective.com/preact#sponsor)]\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n---\r\n\r\n## License\r\n\r\nMIT\r\n\r\n\r\n\r\n[![Preact](https://i.imgur.com/YqCHvEW.gif)](https://preactjs.com)\r\n\r\n\r\n[preact/compat]: https://github.com/preactjs/preact/tree/master/compat\r\n[hyperscript]: https://github.com/dominictarr/hyperscript\r\n[DevTools]: https://github.com/preactjs/preact-devtools\r\n","readmeFilename":"README.md","gitHead":"9f6c95ad19464cce7b8dad37d4ebf64df3d62172","_id":"preact@11.0.0-experimental.0","_nodeVersion":"16.13.1","_npmVersion":"8.1.4","dist":{"integrity":"sha512-TXVw49O11z34ouJOe9+wzN9/ReoXoNyO1Jth48SiJDuqLKrdAiuXkBlmtTWeDgiaJr1SSPDMBdLufMDjDkb5bg==","shasum":"67f9c6faf5cdf90a5b723516f0dbcb261c5abe33","tarball":"http://localhost:4545/npm/registry/preact/preact-11.0.0-experimental.0.tgz","fileCount":128,"unpackedSize":1308010,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiEiOxACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmo93BAAkZyk7Zmgep6OAkFvcdd4X7jIOOE5t6rDpZVSCaI+mCBdfVhw\r\nJUTRNVoCw8/6p8ICQvu8aRRT0ws3gepTQ9QT3ix89SfBOAOhoa1AKY2esquB\r\nmSp0lhDF+6pagSrGq1Jptx50p6nXaLXIXsliSJjd94GRYH1wSVIE1toVTa0k\r\n7Kc3pCEHHql+gHZWR6foNRpyUEOgtlvtmpBh0C9vA2b+snWISgmXhpEIWkj+\r\nj8gEVKFMgjss6hRb/hxfMhXrUd6s8K93RgebkP2GUFmCBwXYjTSMoyVEHAoN\r\nhZ6StRswSXJiM4XSx6TBfCsktW7JKnrOd9gzz1WuDTFDH8BlU5DEyx68SzsA\r\ny2b1ReRIsxbwoV8sdSvY2eRIRaam9XqGnwkj4/XT/jOt8yux14LFy2TM8Q9/\r\nK8P6l9faggJI1kfTbj/u6ZOh5ygf16Q9ZpXrKzTRbdckTDPktRp0TJ5uqW7x\r\nMcED7GXM3J8Itd8oqg8FYDWzSKco2c1U/9XNbYt7vnsXj7jR3exjdv0KRRRW\r\nJmXwD3dsQcCsdK/7LnyVkAf9/vmTOKayJcyowEGwswILb769hxXAA+lzphUX\r\nX+Uqla13JO4l8oOLK/XokyVP931LAXD7tKej4s6CxIKw4uOc2i4bxyz/SPLa\r\n4ybT3m3Hksgm+jVAqzFTflvRDhE4bf3gsUQ=\r\n=9EUQ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDRPCj1R5m6279T0ZctiH7J0D7ENP0TKFUY+/7CqQjj5AIhANGJaRJb9RPpBlNfMivXmkaB/RZUscfyeU7YtajLhnet"}]},"_npmUser":{"name":"jdecroock","email":"decroockjovi@gmail.com"},"directories":{},"maintainers":[{"name":"reznord","email":"allamsetty.anup@gmail.com"},{"name":"preactjs","email":"hello@preactjs.com"},{"name":"developit","email":"jason@developit.ca"},{"name":"lukeed","email":"luke@lukeed.com"},{"name":"prateekbh","email":"prateek89born@gmail.com"},{"name":"harmony","email":"npm.leah@hrmny.sh"},{"name":"marvinhagemeister","email":"hello@marvinh.dev"},{"name":"solarliner","email":"solarliner@gmail.com"},{"name":"jdecroock","email":"decroockjovi@gmail.com"},{"name":"sventschui","email":"sventschui@gmail.com"},{"name":"robertknight","email":"robertknight@gmail.com"},{"name":"drewigg","email":"drewigg@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/preact_11.0.0-experimental.0_1645355952821_0.7518737343672752"},"_hasShrinkwrap":false},"11.0.0-experimental.1":{"name":"preact","amdName":"preact","version":"11.0.0-experimental.1","private":false,"description":"Fast 3kb React-compatible Virtual DOM library.","main":"dist/preact.js","module":"dist/preact.mjs","umd:main":"dist/preact.umd.js","unpkg":"dist/preact.min.js","source":"src/index.js","browserslist":["Firefox>=60","chrome>=61","and_chr>=61","Safari>=10.1","iOS>=10.3","edge>=16","opera>=48","op_mob>=48","Samsung>=8.2","not dead"],"exports":{".":{"module":"./dist/preact.mjs","import":"./dist/preact.mjs","require":"./dist/preact.js","umd":"./dist/preact.umd.js"},"./compat":{"module":"./compat/dist/compat.mjs","import":"./compat/dist/compat.mjs","require":"./compat/dist/compat.js","umd":"./compat/dist/compat.umd.js"},"./debug":{"module":"./debug/dist/debug.mjs","import":"./debug/dist/debug.mjs","require":"./debug/dist/debug.js","umd":"./debug/dist/debug.umd.js"},"./devtools":{"module":"./devtools/dist/devtools.mjs","import":"./devtools/dist/devtools.mjs","require":"./devtools/dist/devtools.js","umd":"./devtools/dist/devtools.umd.js"},"./hooks":{"module":"./hooks/dist/hooks.mjs","import":"./hooks/dist/hooks.mjs","require":"./hooks/dist/hooks.js","umd":"./hooks/dist/hooks.umd.js"},"./test-utils":{"module":"./test-utils/dist/testUtils.mjs","import":"./test-utils/dist/testUtils.mjs","require":"./test-utils/dist/testUtils.js","umd":"./test-utils/dist/testUtils.umd.js"},"./jsx-runtime":{"module":"./jsx-runtime/dist/jsxRuntime.mjs","import":"./jsx-runtime/dist/jsxRuntime.mjs","require":"./jsx-runtime/dist/jsxRuntime.js","umd":"./jsx-runtime/dist/jsxRuntime.umd.js"},"./jsx-dev-runtime":{"module":"./jsx-runtime/dist/jsxRuntime.mjs","import":"./jsx-runtime/dist/jsxRuntime.mjs","require":"./jsx-runtime/dist/jsxRuntime.js","umd":"./jsx-runtime/dist/jsxRuntime.umd.js"},"./compat/server":{"module":"./compat/server.mjs","import":"./compat/server.mjs","require":"./compat/server.js"},"./package.json":"./package.json","./compat/package.json":"./compat/package.json","./debug/package.json":"./debug/package.json","./devtools/package.json":"./devtools/package.json","./hooks/package.json":"./hooks/package.json","./test-utils/package.json":"./test-utils/package.json","./jsx-runtime/package.json":"./jsx-runtime/package.json"},"license":"MIT","funding":{"type":"opencollective","url":"https://opencollective.com/preact"},"types":"src/index.d.ts","scripts":{"prepare":"run-s build && check-export-map","build":"npm-run-all --parallel build:*","_bundle":"microbundle build --raw -f modern,cjs,umd --no-generateTypes","build:core":"npm run -s _bundle","build:core-min":"microbundle build --raw -f iife src/cjs.js -o dist/preact.min.js --no-generateTypes","build:debug":"npm run -s _bundle -- --cwd debug","build:devtools":"npm run -s _bundle -- --cwd devtools","build:hooks":"npm run -s _bundle -- --cwd hooks","build:test-utils":"npm run -s _bundle -- --cwd test-utils","build:compat":"npm run -s _bundle -- --cwd compat --globals 'preact/hooks=preactHooks'","build:jsx":"npm run -s _bundle -- --cwd jsx-runtime","postbuild":"node ./config/compat-entries.js","dev":"microbundle watch --raw --format cjs --no-generateTypes","dev:hooks":"microbundle watch --raw --format cjs --cwd hooks --no-generateTypes","dev:compat":"microbundle watch --raw --format cjs --cwd compat --globals 'preact/hooks=preactHooks' --no-generateTypes","test":"npm-run-all build lint test:unit","test:unit":"run-p test:mocha test:karma:minify test:ts","test:ts":"run-p test:ts:*","test:ts:core":"tsc -p test/ts/ && mocha --require \"@babel/register\" test/ts/**/*-test.js","test:ts:compat":"tsc -p compat/test/ts/","test:mocha":"mocha --recursive --require \"@babel/register\" test/shared test/node","test:mocha:watch":"npm run test:mocha -- --watch","test:karma":"cross-env COVERAGE=true BABEL_NO_MODULES=true karma start karma.conf.js --single-run","test:karma:minify":"cross-env COVERAGE=true MINIFY=true BABEL_NO_MODULES=true karma start karma.conf.js --single-run","test:karma:watch":"cross-env BABEL_NO_MODULES=true karma start karma.conf.js --no-single-run","test:karma:hooks":"cross-env COVERAGE=false BABEL_NO_MODULES=true karma start karma.conf.js --grep=hooks/test/browser/**.js --no-single-run","test:karma:test-utils":"cross-env PERFORMANCE=false COVERAGE=false BABEL_NO_MODULES=true karma start karma.conf.js --grep=test-utils/test/shared/**.js --no-single-run","test:karma:bench":"cross-env PERFORMANCE=true COVERAGE=false BABEL_NO_MODULES=true karma start karma.conf.js --grep=test/benchmarks/**.js --single-run","benchmark":"npm run test:karma:bench -- no-single-run","lint":"eslint src test debug compat hooks test-utils"},"eslintConfig":{"extends":["developit","prettier"],"settings":{"react":{"pragma":"createElement"}},"rules":{"camelcase":[1,{"allow":["__test__*","unstable_*","UNSAFE_*"]}],"no-unused-vars":[2,{"args":"none","varsIgnorePattern":"^h|React|_[0-9]?$"}],"prefer-rest-params":0,"prefer-spread":0,"no-cond-assign":0,"react/jsx-no-bind":0,"react/no-danger":"off","react/prefer-stateless-function":0,"react/sort-comp":0,"jest/valid-expect":0,"jest/no-disabled-tests":0,"react/no-find-dom-node":0}},"eslintIgnore":["test/fixtures","test/ts/","*.ts","dist"],"prettier":{"singleQuote":true,"trailingComma":"none","useTabs":true,"tabWidth":2},"lint-staged":{"**/*.{js,jsx,ts,tsx,yml}":["prettier --write"]},"husky":{"hooks":{"pre-commit":"lint-staged"}},"keywords":["preact","react","ui","user interface","virtual dom","vdom","components","dom diff","front-end","framework"],"authors":["The Preact Authors (https://github.com/preactjs/preact/contributors)"],"repository":{"type":"git","url":"git+https://github.com/preactjs/preact.git"},"bugs":{"url":"https://github.com/preactjs/preact/issues"},"homepage":"https://preactjs.com","devDependencies":{"@babel/core":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-transform-react-jsx":"^7.7.0","@babel/plugin-transform-react-jsx-source":"^7.7.4","@babel/preset-env":"^7.7.1","@babel/register":"^7.7.0","@changesets/changelog-github":"^0.4.2","@changesets/cli":"^2.18.1","@types/chai":"^4.3.0","@types/mocha":"^5.0.0","@types/node":"^14.14.10","babel-plugin-istanbul":"^6.0.0","babel-plugin-transform-async-to-promises":"^0.8.15","babel-plugin-transform-rename-properties":"0.1.0","benchmark":"^2.1.4","chai":"^4.3.4","check-export-map":"^1.2.0","coveralls":"^3.1.1","cross-env":"^7.0.3","csstype":"^3.0.5","diff":"^5.0.0","errorstacks":"^2.3.2","esbuild":"^0.11.21","eslint":"5.15.1","eslint-config-developit":"^1.1.1","eslint-config-prettier":"^6.5.0","eslint-plugin-react":"7.12.4","husky":"^4.3.0","karma":"^5.2.3","karma-chai-sinon":"^0.1.5","karma-chrome-launcher":"^3.1.0","karma-coverage":"^2.1.0","karma-esbuild":"^2.2.0","karma-mocha":"^2.0.1","karma-mocha-reporter":"^2.2.5","karma-sauce-launcher":"^4.3.6","karma-sinon":"^1.0.5","karma-sourcemap-loader":"^0.3.7","kolorist":"^1.5.1","lint-staged":"^10.5.2","lodash":"^4.17.21","microbundle":"^0.14.2","mocha":"^8.2.1","npm-merge-driver-install":"^1.1.1","npm-run-all":"^4.0.0","prettier":"^1.18.2","prop-types":"^15.7.2","sinon":"^9.2.3","sinon-chai":"^3.7.0","typescript":"3.5.3"},"readme":"
Fast 3kB alternative to React with the same modern API.
\n\n**All the power of Virtual DOM components, without the overhead:**\n\n- Familiar React API & patterns: ES6 Class, hooks, and Functional Components\n- Extensive React compatibility via a simple [preact/compat] alias\n- Everything you need: JSX, VDOM, [DevTools], HMR, SSR.\n- Highly optimized diff algorithm and seamless hydration from Server Side Rendering\n- Supports all modern browsers and IE11\n- Transparent asynchronous rendering with a pluggable scheduler\n- **Instant production-grade app setup with [Preact CLI](https://github.com/preactjs/preact-cli)**\n\n### 💁 More information at the [Preact Website ➞](https://preactjs.com)\n\n\n
\n\n\nYou can find some awesome libraries in the [awesome-preact list](https://github.com/preactjs/awesome-preact) :sunglasses:\n\n---\n\n## Getting Started\n\n> 💁 _**Note:** You [don't need ES2015 to use Preact](https://github.com/developit/preact-in-es3)... but give it a try!_\n\nThe easiest way to get started with Preact is to install [Preact CLI](https://github.com/preactjs/preact-cli). This simple command-line tool wraps up the best possible tooling for you, and even keeps things like Webpack and Babel up-to-date as they change. Best of all, it's easy to understand! Start a project or compile for production in a single command (`preact build`), with no configuration needed and best practices baked in! 🙌\n\n#### Tutorial: Building UI with Preact\n\nWith Preact, you create user interfaces by assembling trees of components and elements. Components are functions or classes that return a description of what their tree should output. These descriptions are typically written in [JSX](https://facebook.github.io/jsx/) (shown underneath), or [HTM](https://github.com/developit/htm) which leverages standard JavaScript Tagged Templates. Both syntaxes can express trees of elements with \"props\" (similar to HTML attributes) and children.\n\nTo get started using Preact, first look at the render() function. This function accepts a tree description and creates the structure described. Next, it appends this structure to a parent DOM element provided as the second argument. Future calls to render() will reuse the existing tree and update it in-place in the DOM. Internally, render() will calculate the difference from previous outputted structures in an attempt to perform as few DOM operations as possible.\n\n```js\nimport { h, render } from 'preact';\n// Tells babel to use h for JSX. It's better to configure this globally.\n// See https://babeljs.io/docs/en/babel-plugin-transform-react-jsx#usage\n// In tsconfig you can specify this with the jsxFactory\n/** @jsx h */\n\n// create our tree and append it to document.body:\nrender(
Hello
, document.body);\n\n// update the tree in-place:\nrender(
Hello World!
, document.body);\n// ^ this second invocation of render(...) will use a single DOM call to update the text of the
\n```\n\nHooray! render() has taken our structure and output a User Interface! This approach demonstrates a simple case, but would be difficult to use as an application grows in complexity. Each change would be forced to calculate the difference between the current and updated structure for the entire application. Components can help here – by dividing the User Interface into nested Components each can calculate their difference from their mounted point. Here's an example:\n\n```js\nimport { render, h } from 'preact';\nimport { useState } from 'preact/hooks';\n\n/** @jsx h */\n\nconst App = () => {\n\tconst [input, setInput] = useState('');\n\n\treturn (\n\t\t
\n\t\t\t
Do you agree to the statement: \"Preact is awesome\"?
Fast 3kB alternative to React with the same modern API.
\n\n**All the power of Virtual DOM components, without the overhead:**\n\n- Familiar React API & patterns: ES6 Class, hooks, and Functional Components\n- Extensive React compatibility via a simple [preact/compat] alias\n- Everything you need: JSX, VDOM, [DevTools], HMR, SSR.\n- Highly optimized diff algorithm and seamless hydration from Server Side Rendering\n- Supports all modern browsers and IE11\n- Transparent asynchronous rendering with a pluggable scheduler\n\n### 💁 More information at the [Preact Website ➞](https://preactjs.com)\n\n
\n\nYou can find some awesome libraries in the [awesome-preact list](https://github.com/preactjs/awesome-preact) :sunglasses:\n\n---\n\n## Getting Started\n\n> 💁 _**Note:** You [don't need ES2015 to use Preact](https://github.com/developit/preact-in-es3)... but give it a try!_\n\n#### Tutorial: Building UI with Preact\n\nWith Preact, you create user interfaces by assembling trees of components and elements. Components are functions or classes that return a description of what their tree should output. These descriptions are typically written in [JSX](https://facebook.github.io/jsx/) (shown underneath), or [HTM](https://github.com/developit/htm) which leverages standard JavaScript Tagged Templates. Both syntaxes can express trees of elements with \"props\" (similar to HTML attributes) and children.\n\nTo get started using Preact, first look at the render() function. This function accepts a tree description and creates the structure described. Next, it appends this structure to a parent DOM element provided as the second argument. Future calls to render() will reuse the existing tree and update it in-place in the DOM. Internally, render() will calculate the difference from previous outputted structures in an attempt to perform as few DOM operations as possible.\n\n```js\nimport { h, render } from 'preact';\n// Tells babel to use h for JSX. It's better to configure this globally.\n// See https://babeljs.io/docs/en/babel-plugin-transform-react-jsx#usage\n// In tsconfig you can specify this with the jsxFactory\n/** @jsx h */\n\n// create our tree and append it to document.body:\nrender(\n\t\n\t\t
Hello
\n\t,\n\tdocument.body\n);\n\n// update the tree in-place:\nrender(\n\t\n\t\t
Hello World!
\n\t,\n\tdocument.body\n);\n// ^ this second invocation of render(...) will use a single DOM call to update the text of the
\n```\n\nHooray! render() has taken our structure and output a User Interface! This approach demonstrates a simple case, but would be difficult to use as an application grows in complexity. Each change would be forced to calculate the difference between the current and updated structure for the entire application. Components can help here – by dividing the User Interface into nested Components each can calculate their difference from their mounted point. Here's an example:\n\n```js\nimport { render, h } from 'preact';\nimport { useState } from 'preact/hooks';\n\n/** @jsx h */\n\nconst App = () => {\n\tconst [input, setInput] = useState('');\n\n\treturn (\n\t\t
\n\t\t\t
Do you agree to the statement: \"Preact is awesome\"?
\n\t\t\t setInput(e.target.value)} />\n\t\t
\n\t);\n};\n\nrender(, document.body);\n```\n\n---\n\n## Sponsors\n\nBecome a sponsor and get your logo on our README on GitHub with a link to your site. [[Become a sponsor](https://opencollective.com/preact#sponsor)]\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n## Backers\n\nSupport us with a monthly donation and help us continue our activities. [[Become a backer](https://opencollective.com/preact#backer)]\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n---\n\n## License\n\nMIT\n\n[![Preact](https://i.imgur.com/YqCHvEW.gif)](https://preactjs.com)\n\n[preact/compat]: https://github.com/preactjs/preact/tree/main/compat\n[hyperscript]: https://github.com/dominictarr/hyperscript\n[DevTools]: https://github.com/preactjs/preact-devtools\n","maintainers":[{"name":"rschristian","email":"rchristian@ryanchristian.dev"},{"name":"drewigg","email":"drewigg@gmail.com"},{"name":"reznord","email":"allamsetty.anup@gmail.com"},{"name":"preactjs","email":"hello@preactjs.com"},{"name":"developit","email":"jason@developit.ca"},{"name":"marvinhagemeister","email":"hello@marvinh.dev"},{"name":"jdecroock","email":"decroockjovi@gmail.com"},{"name":"sventschui","email":"sventschui@gmail.com"},{"name":"robertknight","email":"robertknight@gmail.com"}],"time":{"modified":"2024-02-22T09:35:27.693Z","created":"2015-09-11T02:41:33.521Z","1.2.0":"2015-09-11T02:41:33.521Z","1.3.0":"2015-09-14T11:55:43.607Z","1.3.1":"2015-09-14T12:39:27.207Z","1.3.2":"2015-09-15T13:54:28.472Z","1.4.0":"2015-10-01T13:04:37.935Z","1.5.0":"2015-10-16T03:18:49.860Z","1.5.1":"2015-10-18T21:51:58.158Z","1.5.2":"2015-10-31T17:05:00.704Z","2.0.0":"2015-11-13T02:01:42.373Z","2.0.1":"2015-11-17T22:17:00.803Z","2.1.0":"2015-11-18T16:53:08.007Z","2.2.0":"2015-11-24T04:23:19.654Z","2.3.0":"2015-11-29T02:51:58.274Z","2.4.0":"2015-12-03T18:56:53.836Z","2.4.1":"2015-12-03T19:00:51.839Z","2.5.0":"2015-12-03T19:24:20.254Z","2.5.1":"2015-12-16T01:52:27.585Z","2.6.0":"2015-12-18T02:30:39.330Z","2.6.1":"2015-12-18T12:54:25.563Z","2.7.0":"2016-01-07T01:09:04.369Z","2.7.1":"2016-01-07T02:07:50.761Z","2.7.2":"2016-01-07T20:52:50.085Z","2.7.3":"2016-01-18T17:51:47.118Z","2.8.0":"2016-01-29T02:42:35.971Z","2.8.1":"2016-01-29T03:01:39.566Z","2.8.2":"2016-01-29T14:25:41.524Z","3.0.0-beta1":"2016-02-01T02:03:13.779Z","2.8.3":"2016-02-01T13:15:40.231Z","3.0.0-beta2":"2016-02-01T13:30:58.138Z","3.0.0-beta3":"2016-02-02T22:08:20.491Z","3.0.0-beta4":"2016-02-03T04:36:40.125Z","3.0.0":"2016-02-03T15:16:29.774Z","3.0.1":"2016-02-04T02:36:28.567Z","3.0.2":"2016-02-06T05:03:41.657Z","3.1.0":"2016-02-06T21:44:36.996Z","3.2.0":"2016-02-07T04:15:34.310Z","3.3.0":"2016-02-12T23:06:04.621Z","3.4.0":"2016-02-14T18:23:13.286Z","4.0.0":"2016-02-23T13:12:49.223Z","4.0.1":"2016-02-23T23:21:17.172Z","4.1.0":"2016-02-26T02:57:08.466Z","4.1.1":"2016-03-03T00:17:06.015Z","4.1.2":"2016-03-09T16:32:39.863Z","4.1.3":"2016-03-10T00:16:15.334Z","4.2.0":"2016-03-11T02:32:07.422Z","4.3.0":"2016-03-12T20:24:27.115Z","4.3.1":"2016-03-13T16:34:19.231Z","4.3.2":"2016-03-14T01:01:44.674Z","4.4.0":"2016-03-18T02:30:48.284Z","4.5.0":"2016-03-19T16:38:25.367Z","4.5.1":"2016-03-22T19:02:38.063Z","4.6.0":"2016-04-12T02:49:36.831Z","4.6.1":"2016-04-12T13:06:18.106Z","4.6.2":"2016-04-13T13:59:14.708Z","4.6.3":"2016-04-16T19:27:10.377Z","4.7.0":"2016-04-18T13:15:32.639Z","4.7.1":"2016-04-19T04:25:29.473Z","4.7.2":"2016-04-19T04:58:37.680Z","4.8.0":"2016-04-27T13:07:36.312Z","5.0.0-beta1":"2016-05-21T15:54:53.116Z","5.0.0-beta2":"2016-05-24T03:11:08.050Z","5.0.0-beta3":"2016-05-24T12:32:09.361Z","5.0.0-beta4":"2016-05-24T15:23:45.523Z","5.0.0-beta5":"2016-05-26T14:09:07.725Z","5.0.0-beta6":"2016-05-31T12:45:55.448Z","5.0.0-beta7":"2016-06-04T23:41:09.468Z","5.0.0-beta8":"2016-06-06T02:50:50.910Z","5.0.0-beta9":"2016-06-06T03:04:26.866Z","5.0.0-beta10":"2016-06-07T12:39:49.452Z","5.0.0-beta11":"2016-06-09T03:23:49.785Z","5.0.0-beta12":"2016-06-13T15:56:58.301Z","5.0.0-beta.12":"2016-06-13T16:00:14.174Z","5.0.1-beta.12":"2016-06-13T16:02:18.914Z","5.0.1-beta.13":"2016-06-18T17:26:50.831Z","5.0.1-beta.14":"2016-06-18T20:19:42.138Z","5.0.1-beta.15":"2016-06-20T23:50:00.826Z","5.1.0-beta.16":"2016-06-21T12:04:36.462Z","5.1.0-beta.17":"2016-06-21T23:03:51.577Z","5.1.0-beta.18":"2016-06-23T00:39:51.051Z","5.1.0-beta.19":"2016-06-23T16:02:22.959Z","5.1.0-beta.20":"2016-06-28T21:10:24.902Z","5.1.0-beta.21":"2016-06-30T13:29:34.986Z","5.1.0-beta.22":"2016-06-30T17:28:44.419Z","5.1.0-beta.23":"2016-07-07T03:15:13.442Z","5.1.0-beta.24":"2016-07-08T12:02:19.276Z","5.1.0-beta.25":"2016-07-08T12:14:10.734Z","5.1.0-beta.26":"2016-07-08T12:29:22.529Z","5.2.0-beta.0":"2016-07-14T11:27:25.082Z","5.3.0":"2016-07-17T04:52:42.308Z","5.3.1":"2016-07-17T07:59:15.345Z","5.3.2":"2016-07-18T23:17:04.241Z","5.4.0":"2016-07-19T04:35:40.449Z","5.4.1":"2016-07-21T20:01:47.331Z","5.5.0":"2016-07-22T01:21:13.867Z","5.6.0":"2016-07-24T03:16:38.332Z","5.7.0":"2016-08-18T03:41:58.392Z","6.0.0":"2016-08-25T16:21:27.439Z","6.0.1":"2016-09-03T00:43:51.438Z","6.0.2":"2016-09-07T17:09:56.611Z","6.1.0":"2016-09-29T03:30:08.591Z","6.2.0":"2016-10-03T03:49:15.145Z","6.2.1":"2016-10-04T00:32:30.240Z","6.3.0":"2016-10-06T01:05:55.844Z","6.4.0":"2016-10-28T02:39:32.077Z","7.0.0":"2016-11-10T19:33:23.091Z","7.0.1":"2016-11-10T19:44:13.979Z","7.0.2":"2016-11-14T22:30:13.402Z","7.0.3":"2016-11-17T16:27:21.414Z","7.1.0":"2016-12-02T23:00:54.087Z","7.2.0":"2017-01-23T13:39:38.352Z","7.2.1":"2017-03-24T01:00:20.466Z","8.0.0":"2017-04-06T03:15:52.752Z","8.0.1":"2017-04-06T16:40:49.575Z","8.1.0":"2017-04-09T15:42:00.618Z","8.2.0":"2017-07-11T02:24:39.581Z","8.2.1":"2017-07-11T22:36:29.547Z","8.2.2":"2017-08-24T16:44:26.602Z","8.2.3":"2017-08-24T17:37:06.651Z","8.2.4":"2017-08-24T19:08:12.826Z","8.2.5":"2017-08-28T20:55:50.750Z","8.2.6":"2017-10-24T16:20:54.004Z","8.2.7":"2017-12-12T18:18:31.631Z","8.2.8":"2018-04-26T19:51:06.541Z","8.2.9":"2018-04-30T14:39:08.052Z","8.3.0":"2018-08-05T20:36:45.671Z","8.3.1":"2018-08-16T01:35:49.815Z","8.4.0":"2018-12-06T19:19:39.506Z","8.4.1":"2018-12-06T19:55:36.067Z","8.4.2":"2018-12-07T20:51:26.689Z","10.0.0-alpha.0":"2019-03-04T23:43:24.942Z","10.0.0-alpha.1":"2019-03-07T19:54:55.027Z","10.0.0-alpha.2":"2019-03-14T19:21:56.441Z","10.0.0-alpha.3":"2019-04-02T18:42:08.474Z","10.0.0-alpha.4":"2019-04-05T20:16:30.178Z","10.0.0-beta.0":"2019-04-17T17:07:40.084Z","10.0.0-beta.1":"2019-05-02T20:48:54.543Z","10.0.0-beta.2":"2019-05-31T12:11:14.120Z","10.0.0-beta.3":"2019-06-21T19:03:23.955Z","10.0.0-rc.0":"2019-07-11T20:13:33.642Z","8.5.0":"2019-08-02T18:34:23.572Z","10.0.0-rc.1":"2019-08-02T20:34:45.123Z","8.5.1":"2019-08-08T07:48:55.246Z","8.5.2":"2019-08-18T05:51:15.904Z","10.0.0-rc.2":"2019-09-09T19:45:28.570Z","10.0.0-rc.3":"2019-09-10T18:19:37.247Z","10.0.0":"2019-10-01T18:26:18.414Z","10.0.1":"2019-10-17T18:09:23.729Z","10.0.2":"2019-10-28T17:57:16.701Z","10.0.3":"2019-10-29T09:18:45.999Z","10.0.4":"2019-10-29T13:06:46.399Z","8.5.3":"2019-11-01T08:41:49.217Z","10.0.5":"2019-11-10T13:25:36.066Z","10.1.0":"2019-12-09T18:50:36.886Z","10.1.1":"2019-12-16T19:51:39.067Z","10.2.0":"2020-01-07T20:42:55.712Z","10.2.1":"2020-01-08T08:36:04.685Z","10.3.0":"2020-02-03T19:15:49.374Z","10.3.1":"2020-02-06T17:24:50.568Z","10.3.2":"2020-02-15T13:50:17.299Z","10.3.3":"2020-03-01T17:57:56.588Z","10.3.4":"2020-03-11T19:16:12.060Z","10.4.0":"2020-04-08T11:04:58.743Z","10.4.1":"2020-04-20T19:26:16.644Z","10.4.2":"2020-05-18T17:48:44.135Z","10.4.3":"2020-05-18T23:18:23.107Z","10.4.4":"2020-05-18T23:25:44.468Z","10.4.5":"2020-06-30T19:02:40.819Z","10.4.6":"2020-07-14T16:04:09.402Z","10.4.7":"2020-08-05T21:20:18.587Z","10.4.8":"2020-08-26T18:37:19.566Z","10.5.0":"2020-09-23T11:05:57.380Z","10.5.1":"2020-09-23T13:28:42.440Z","10.5.2":"2020-09-23T14:10:51.610Z","10.5.3":"2020-09-28T20:59:48.776Z","10.5.4":"2020-10-05T16:20:46.512Z","10.5.5":"2020-10-18T10:24:46.041Z","10.5.6":"2020-11-12T18:41:42.618Z","10.5.7":"2020-11-12T21:59:22.228Z","10.5.8":"2020-12-30T15:19:16.883Z","10.5.9":"2021-01-03T12:33:26.896Z","10.5.10":"2021-01-14T12:16:51.666Z","10.5.11":"2021-01-20T21:45:27.375Z","10.5.12":"2021-01-26T21:59:23.057Z","10.5.13":"2021-03-14T21:17:27.950Z","10.5.14":"2021-07-01T16:55:57.821Z","10.5.15":"2021-10-12T05:54:49.664Z","10.6.0":"2021-11-23T16:06:22.346Z","10.6.1":"2021-11-25T11:00:52.961Z","10.6.2":"2021-11-29T16:11:35.031Z","10.6.3":"2021-12-08T13:11:29.490Z","10.6.4":"2021-12-09T20:57:46.032Z","10.6.5":"2022-01-27T17:07:07.765Z","10.6.6":"2022-02-14T12:35:43.067Z","11.0.0-experimental.0":"2022-02-20T11:19:13.632Z","11.0.0-experimental.1":"2022-02-20T14:00:49.241Z","10.7.0":"2022-03-29T19:13:24.818Z","10.7.1":"2022-04-05T08:59:46.771Z","10.7.2":"2022-05-06T19:02:40.964Z","10.7.3":"2022-06-01T07:23:55.574Z","10.8.0":"2022-06-14T14:26:07.619Z","10.8.1":"2022-06-16T18:04:40.475Z","10.8.2":"2022-06-22T13:52:39.706Z","10.9.0":"2022-07-06T08:34:08.168Z","10.10.0":"2022-07-13T10:29:35.663Z","10.10.1":"2022-08-05T12:06:14.331Z","10.10.2":"2022-08-10T08:55:13.756Z","10.10.3":"2022-08-16T08:42:56.764Z","10.10.4":"2022-08-18T21:06:27.156Z","10.10.5":"2022-08-19T08:57:19.400Z","10.10.6":"2022-08-19T17:18:02.412Z","10.11.0":"2022-09-12T08:37:37.413Z","10.11.1":"2022-10-04T19:48:09.959Z","10.11.2":"2022-10-15T09:07:00.655Z","10.11.3":"2022-11-14T08:12:50.974Z","10.12.0":"2023-02-06T21:34:34.584Z","10.12.1":"2023-02-09T18:32:40.605Z","10.13.0":"2023-02-24T13:08:39.345Z","10.13.1":"2023-03-09T14:38:25.192Z","10.13.2":"2023-03-27T08:33:37.222Z","10.14.0":"2023-05-14T10:27:37.067Z","10.14.1":"2023-05-16T15:22:16.273Z","10.15.0":"2023-05-21T19:05:11.878Z","10.15.1":"2023-05-27T09:28:33.984Z","10.16.0":"2023-07-09T08:01:55.455Z","10.17.0":"2023-08-14T13:24:00.433Z","10.17.1":"2023-08-19T07:46:40.710Z","10.18.0":"2023-09-28T09:33:11.094Z","10.18.1":"2023-10-01T09:22:19.523Z","10.18.2":"2023-11-03T08:05:15.726Z","10.19.0":"2023-11-11T08:03:27.443Z","10.19.1":"2023-11-11T10:18:09.873Z","10.19.2":"2023-11-14T05:58:38.569Z","10.19.3":"2023-12-08T14:31:39.334Z","10.19.4":"2024-02-08T07:06:58.208Z","10.19.5":"2024-02-16T09:42:54.732Z","10.19.6":"2024-02-22T09:35:27.207Z"},"homepage":"https://preactjs.com","repository":{"type":"git","url":"git+https://github.com/preactjs/preact.git"},"bugs":{"url":"https://github.com/preactjs/preact/issues"},"license":"MIT","readmeFilename":"README.md","users":{"developit":true,"pje":true,"kratyk":true,"rexpan":true,"abhisekp":true,"billneff79":true,"pixel67":true,"shanewholloway":true,"princetoad":true,"charlespeters":true,"gcwelborn":true,"lassevolkmann":true,"erikvold":true,"iamale":true,"xueboren":true,"grahm":true,"d-band":true,"daniellink":true,"youtwo":true,"rethinkflash":true,"kkho595":true,"sangdth":true,"sternelee":true,"tztz":true,"alexparish":true,"petershev":true,"wayn":true,"sshrike":true,"vpzomtrrfrt":true,"severen":true,"mdedirudianto":true,"huiyifyj":true,"karzanosman984":true,"aim97":true,"yang.shao":true,"nberlette":true,"flumpus-dev":true},"keywords":["preact","react","ui","user interface","virtual dom","vdom","components","dom diff","front-end","framework"]}
\ No newline at end of file
diff --git a/tests/testdata/npm/registry/pretty-format/pretty-format-3.8.0.tgz b/tests/testdata/npm/registry/pretty-format/pretty-format-3.8.0.tgz
new file mode 100644
index 0000000000..8766b9cce9
Binary files /dev/null and b/tests/testdata/npm/registry/pretty-format/pretty-format-3.8.0.tgz differ
diff --git a/tests/testdata/npm/registry/pretty-format/registry.json b/tests/testdata/npm/registry/pretty-format/registry.json
new file mode 100644
index 0000000000..0cd3fe36c1
--- /dev/null
+++ b/tests/testdata/npm/registry/pretty-format/registry.json
@@ -0,0 +1 @@
+{"_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"}}
\ No newline at end of file
diff --git a/tests/testdata/publish/unsupported_jsx_tsx/foo.jsx b/tests/testdata/publish/unsupported_jsx_tsx/foo.jsx
new file mode 100644
index 0000000000..021c2d49ea
--- /dev/null
+++ b/tests/testdata/publish/unsupported_jsx_tsx/foo.jsx
@@ -0,0 +1,5 @@
+import { renderToString } from "npm:preact-render-to-string";
+
+export default function render() {
+ return renderToString(
foo.tsx
);
+}
diff --git a/tests/testdata/publish/unsupported_jsx_tsx/foo.tsx b/tests/testdata/publish/unsupported_jsx_tsx/foo.tsx
new file mode 100644
index 0000000000..021c2d49ea
--- /dev/null
+++ b/tests/testdata/publish/unsupported_jsx_tsx/foo.tsx
@@ -0,0 +1,5 @@
+import { renderToString } from "npm:preact-render-to-string";
+
+export default function render() {
+ return renderToString(
foo.tsx
);
+}
diff --git a/tests/testdata/publish/unsupported_jsx_tsx/jsr.jsonc b/tests/testdata/publish/unsupported_jsx_tsx/jsr.jsonc
new file mode 100644
index 0000000000..7aea088428
--- /dev/null
+++ b/tests/testdata/publish/unsupported_jsx_tsx/jsr.jsonc
@@ -0,0 +1,11 @@
+{
+ "name": "@foo/bar",
+ "version": "1.0.0",
+ "exports": {
+ ".": "./mod.ts"
+ },
+ "compilerOptions": {
+ "jsx": "react-jsx",
+ "jsxImportSource": "npm:preact"
+ }
+}
diff --git a/tests/testdata/publish/unsupported_jsx_tsx/mod.out b/tests/testdata/publish/unsupported_jsx_tsx/mod.out
new file mode 100644
index 0000000000..5f085fb339
--- /dev/null
+++ b/tests/testdata/publish/unsupported_jsx_tsx/mod.out
@@ -0,0 +1,17 @@
+[WILDCARD]
+Check file:///[WILDCARD]/publish/unsupported_jsx_tsx/mod.ts
+Checking for slow types in the public API...
+Check file:///[WILDCARD]/publish/unsupported_jsx_tsx/mod.ts
+warning[unsupported-jsx-tsx]: JSX and TSX files are currently not supported
+ --> [WILDCARD]foo.jsx
+
+ info: follow https://github.com/jsr-io/jsr/issues/24 for updates
+
+warning[unsupported-jsx-tsx]: JSX and TSX files are currently not supported
+ --> [WILDCARD]foo.tsx
+
+ info: follow https://github.com/jsr-io/jsr/issues/24 for updates
+
+Publishing @foo/bar@1.0.0 ...
+Successfully published @foo/bar@1.0.0
+Visit http://127.0.0.1:4250/@foo/bar@1.0.0 for details
diff --git a/tests/testdata/publish/unsupported_jsx_tsx/mod.ts b/tests/testdata/publish/unsupported_jsx_tsx/mod.ts
new file mode 100644
index 0000000000..4631a829d9
--- /dev/null
+++ b/tests/testdata/publish/unsupported_jsx_tsx/mod.ts
@@ -0,0 +1,7 @@
+import fooTsx from "./foo.tsx";
+import fooJsx from "./foo.jsx";
+
+export function renderTsxJsx() {
+ console.log(fooTsx());
+ console.log(fooJsx());
+}