{"_id":"@fp-ts/schema","_rev":"16-d6f585f51406ec2c9f48605cea1d3247","name":"@fp-ts/schema","dist-tags":{"latest":"0.3.2"},"versions":{"0.0.1":{"name":"@fp-ts/schema","version":"0.0.1","license":"MIT","repository":{"type":"git","url":"git+https://github.com/fp-ts/schema.git"},"dependencies":{"@fp-ts/core":"^0.0.9","@fp-ts/data":"^0.0.20"},"main":"./index.js","publishConfig":{"access":"public"},"sideEffects":[],"exports":{".":{"import":{"types":"./index.d.ts","default":"./_mjs/index.mjs"},"require":{"types":"./index.d.ts","default":"./index.js"}},"./*":{"import":{"types":"./*.d.ts","default":"./_mjs/*.mjs"},"require":{"types":"./*.d.ts","default":"./*.js"}}},"types":"./index.d.ts","description":"<h3 align=\"center\">   <a href=\"https://fp-ts.github.io/schema/\">     <img src=\"./docs/fp-ts-logo.png\">   </a> </h3>","bugs":{"url":"https://github.com/fp-ts/schema/issues"},"homepage":"https://github.com/fp-ts/schema#readme","_id":"@fp-ts/schema@0.0.1","_integrity":"sha512-24d9lsY2Wlh5Zc59wCI+6TC9TuxSC405d1Y2TbuTk2szHMvAiAUnRgU2947/lBm22zAh4hdxR5SnKtYiZCbDCw==","_resolved":"/tmp/594ce737fe821dfbd8231e53a345f962/fp-ts-schema-0.0.1.tgz","_from":"file:fp-ts-schema-0.0.1.tgz","_nodeVersion":"16.17.1","_npmVersion":"8.15.0","dist":{"integrity":"sha512-24d9lsY2Wlh5Zc59wCI+6TC9TuxSC405d1Y2TbuTk2szHMvAiAUnRgU2947/lBm22zAh4hdxR5SnKtYiZCbDCw==","shasum":"d1974ca7aacc73b218d3f93f569a9d1dd2c0fbf6","tarball":"https://registry.npmjs.org/@fp-ts/schema/-/schema-0.0.1.tgz","fileCount":248,"unpackedSize":540861,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC8wyX9LOWP/FVIHnApqXvwtZLvzlhZP35R77vi7wg7OwIgFRClBqnnHsPlEjNhbe8hOO5l+KWTPp7CGqarf9gR6k0="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjjoeqACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmo0dA//RzDtcLnWDNfkY1CpS6JX2QT6rYgGuW+1iTzpiLoMRgDErSl4\r\nWkO51ham8/WRv7Ixqq9QGJagY1AW9iHZrscxmEAFSyEp7CFLrCWe6xJms/Bq\r\nlQ8x0eWYTNa0cIsOZ6m0RyWieJ6Sab2u+Sy6s7OpOvzTew5wbM6zCQypvfhm\r\n5pEGEdIl+PxsUmh6BeIfDBT5kgIOrj0ve+ddZ4Q7JCtr4Ne4nTjzW+zWREem\r\ng06KvN1lObtlZQpF3sm2yc7hYNZ3BthNsqep26DIZ9WMMcdmxeaWz1+FpIOA\r\nk/OlVmMlzmRi6x0yCKLOrjLD2pwzYqFltwgFgy94I+uXT6kkNjErxc1SKDwF\r\naZpildT2RHK5VJyf95Da36daJUYcVisN3s0WGEJrgdmYln0SKuqrym1PP9ly\r\nsUDVUmoUhjGD5IdvdW3mIzZVKmLeSntTDe/X2afuM/HA+hSYpx2cjHeQJdM7\r\nykyrv0CgMu2wS6bk/kYPkzfVhguVqIdJ5HobOvestOq+49MtFqoXVCtzhdZ0\r\nUykkJ580j4wAFJra2AX6yuihyu7NCvzmd4yuhtTEUPfpydTFb4XGqY2DsoM4\r\nvsK2AupJGamo5QjNpYVreB0oS97QeZB7SILEm1Hu+/DPLRNb7ZtM6bkHWHPu\r\nI5g2IvgD3SXkZVbMnCJfYgPMTVKINy30JZo=\r\n=WYSI\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"fp-ts-bot","email":"ma+fp-ts-bot@matechs.com"},"directories":{},"maintainers":[{"name":"fp-ts-bot","email":"ma+fp-ts-bot@matechs.com"},{"name":"michael.arnaldi","email":"ma+npm@matechs.com"},{"name":"gcanti","email":"giulio.canti@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/schema_0.0.1_1670285226264_0.5157084476946541"},"_hasShrinkwrap":false},"0.0.2":{"name":"@fp-ts/schema","version":"0.0.2","license":"MIT","repository":{"type":"git","url":"git+https://github.com/fp-ts/schema.git"},"dependencies":{"@fp-ts/core":"^0.0.9","@fp-ts/data":"^0.0.20","fast-check":"^3.3.0"},"main":"./index.js","publishConfig":{"access":"public"},"sideEffects":[],"exports":{".":{"import":{"types":"./index.d.ts","default":"./_mjs/index.mjs"},"require":{"types":"./index.d.ts","default":"./index.js"}},"./*":{"import":{"types":"./*.d.ts","default":"./_mjs/*.mjs"},"require":{"types":"./*.d.ts","default":"./*.js"}}},"types":"./index.d.ts","description":"<h3 align=\"center\">   <a href=\"https://fp-ts.github.io/schema/\">     <img src=\"./docs/fp-ts-logo.png\">   </a> </h3>","bugs":{"url":"https://github.com/fp-ts/schema/issues"},"homepage":"https://github.com/fp-ts/schema#readme","_id":"@fp-ts/schema@0.0.2","_integrity":"sha512-X8C4h1Lqw0o5DDeHxpt6TBNS+VR9z22Ew3O5NAMixDZCp2c6z328bqvJVgmfLC2pnXjWRmEXCV8b+7FKjTAgCQ==","_resolved":"/tmp/bdf650163a30eac9e569ac55008f3294/fp-ts-schema-0.0.2.tgz","_from":"file:fp-ts-schema-0.0.2.tgz","_nodeVersion":"16.17.1","_npmVersion":"8.15.0","dist":{"integrity":"sha512-X8C4h1Lqw0o5DDeHxpt6TBNS+VR9z22Ew3O5NAMixDZCp2c6z328bqvJVgmfLC2pnXjWRmEXCV8b+7FKjTAgCQ==","shasum":"7bac7503ada39068d9c42ae140585e37d70000df","tarball":"https://registry.npmjs.org/@fp-ts/schema/-/schema-0.0.2.tgz","fileCount":248,"unpackedSize":527543,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFEZN5fLQgoCsPHDz6uU0csoP3Qv0DMcK+DDeKHMz93rAiBFQgvjH/0rrgoJwyRxTTCiSlbrIhtGe3nI7PUQ8nkOtw=="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjj4iEACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmrIqhAAoDpyFZCcU37lKHlRbnBF/yntMo4h/8rZfNMI5AfcqFxdJ738\r\ntZPfURtb31KSyEYiby0gt1volWfTScrYtF8rTuvE7d0yaMHF/75utLWT2ac+\r\nI4Ety8o5FU9jl/2xFYwd6v6pBSYcWzekWOefQnAXtvB9FgBUSkAYPS4Q8+GX\r\nKKKSS5a9cSuoRNnIsm3lwTyFDw7BT5XguUGBIGERcDfwx1QVp1W4g5NdbYg8\r\n4yPgE6shR8gD0N62xbEmCQyuVdB3ezZCgJ0BQqPQr3BYqlIchtbwi9iT3GrF\r\n9bnZ/ZRQVjkcAMzAxc1fX6ZalsCKI5838LdQNB4ceRii2lbVNVkiLUgmI90H\r\nKglH+xt7YO6U8QVZAMWEpyJTM09NyGkVeerqTr1WqYutigX6i5jPO73vAVvr\r\nvxus/6U7iGbyjstcbXa7tlWZ61GyEHMVfcWEzs1MAw5by4USYjpsP46qpMnU\r\nxmG4+3BXpcwcUefPldg0Xm9BezQe/V/1SmNqWYiJQiI86aWKlQ/oZh9x9ex/\r\nIHIngaw9vO2P9r4UhY163rCWqQsu1OUGKmeXHcYGLkcdCWPld3r0T0hhbBmF\r\nB3DB8pD4qDpKgcLr2OufwCU06TZRXdXrYyZKkrsu5vSXNKAmMJeEAPqiHVi5\r\nlTJXmJweQ9ao8FN5BkSd0/a/HGPK9J1Mprw=\r\n=oMM0\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"fp-ts-bot","email":"ma+fp-ts-bot@matechs.com"},"directories":{},"maintainers":[{"name":"fp-ts-bot","email":"ma+fp-ts-bot@matechs.com"},{"name":"michael.arnaldi","email":"ma+npm@matechs.com"},{"name":"gcanti","email":"giulio.canti@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/schema_0.0.2_1670350979931_0.894620128825157"},"_hasShrinkwrap":false},"0.0.3":{"name":"@fp-ts/schema","version":"0.0.3","license":"MIT","repository":{"type":"git","url":"git+https://github.com/fp-ts/schema.git"},"dependencies":{"@fp-ts/core":"^0.0.9","@fp-ts/data":"^0.0.21","fast-check":"^3.3.0"},"main":"./index.js","publishConfig":{"access":"public"},"sideEffects":[],"exports":{".":{"import":{"types":"./index.d.ts","default":"./_mjs/index.mjs"},"require":{"types":"./index.d.ts","default":"./index.js"}},"./*":{"import":{"types":"./*.d.ts","default":"./_mjs/*.mjs"},"require":{"types":"./*.d.ts","default":"./*.js"}}},"types":"./index.d.ts","description":"<h3 align=\"center\">   <a href=\"https://fp-ts.github.io/schema/\">     <img src=\"./docs/fp-ts-logo.png\">   </a> </h3>","bugs":{"url":"https://github.com/fp-ts/schema/issues"},"homepage":"https://github.com/fp-ts/schema#readme","_id":"@fp-ts/schema@0.0.3","_integrity":"sha512-SNFwZ5WUdF0tRUnBd7rCLSOT2rNAuj1I/TfZB9u0Fazg16kCi97AqM83OY7+W0KlWHACVpHHNrFQn3TeW6aouQ==","_resolved":"/tmp/17fa888ac83fa7842807cb844862c994/fp-ts-schema-0.0.3.tgz","_from":"file:fp-ts-schema-0.0.3.tgz","_nodeVersion":"16.17.1","_npmVersion":"8.15.0","dist":{"integrity":"sha512-SNFwZ5WUdF0tRUnBd7rCLSOT2rNAuj1I/TfZB9u0Fazg16kCi97AqM83OY7+W0KlWHACVpHHNrFQn3TeW6aouQ==","shasum":"e303d577660e5640b84d1f64bf08e46101e52ad9","tarball":"https://registry.npmjs.org/@fp-ts/schema/-/schema-0.0.3.tgz","fileCount":248,"unpackedSize":527926,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDmVF9LX8DpKwkXoHF1Wwgaty6BBbnqCtrT2FQLuqvMFAIhALIWXUgLmYfrblfXQon9G66TTZp/HaWG7kE5IWynZ/CC"}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjj5R3ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmqczA//Vg9f3vKW6axD3jFb8hOzU09D/nkGmc6bdKDIsPxWHNkb+RGA\r\nCLGZiNm8+/iBZK6YTBf8IeMWUxgfD9HcefTYCSuIjj5SZZ18YQZZo84qCRN7\r\ncj94H2aAZbZVcKpgUoKpvqrV6Wm5rDfdk0eZoKtjFLETdxPeW4rnttKPd2j5\r\nA4vT3yxubuCgaeewoqJyqvYcYNkNV7mgPECFXUpDKB2jC/TmcW4EZJtzBAX5\r\n3NcteSo5o9qmHdP7CcSGpeCKwXrbOwO+MrKs+ABQrL5diXpkz7JxvB6iBUIa\r\ncoxUJoHUkHLlgKR6mTPmw2cVeYsb4dJ99bwQY8dRFh8M5+TlO7KqnIAJg3Ex\r\n71DF0TfFjKmQCpyejxPUe2m5YVP6WAdOElrE0jKiC+6u8+mWOvOXyiIP3Ehd\r\n+0GxHssfYciW4fwGevZZhCfVlZ80Bb5Y466Ohrwg6tHGr6ukVXrQ66JFWWdP\r\nraX3e0xEAX097To39uUw7FESPR7v/xCMwE8X5avqLzDzB24VdmBbfVUNgi2W\r\nAicbrf39jOvvCLmLqv+d+BVQ5gl7vqsfYe+L13jmIwdEjGS3x3uV5GWP8hP7\r\nGxydjp8/RSYJk/HLO0aGdifIXohAv+EzMTcUu6Jo/thjlylw204i9V/zF8JA\r\nBX4h9igIXh3ZKbhr3rd77VjcNXBnCNdBp78=\r\n=CgTO\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"fp-ts-bot","email":"ma+fp-ts-bot@matechs.com"},"directories":{},"maintainers":[{"name":"fp-ts-bot","email":"ma+fp-ts-bot@matechs.com"},{"name":"michael.arnaldi","email":"ma+npm@matechs.com"},{"name":"gcanti","email":"giulio.canti@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/schema_0.0.3_1670354039521_0.7946569971634545"},"_hasShrinkwrap":false},"0.0.4":{"name":"@fp-ts/schema","version":"0.0.4","license":"MIT","repository":{"type":"git","url":"git+https://github.com/fp-ts/schema.git"},"dependencies":{"@fp-ts/core":"~0.0.9","@fp-ts/data":"~0.0.22","fast-check":"^3.3.0"},"main":"./index.js","publishConfig":{"access":"public"},"sideEffects":[],"exports":{".":{"import":{"types":"./index.d.ts","default":"./_mjs/index.mjs"},"require":{"types":"./index.d.ts","default":"./index.js"}},"./*":{"import":{"types":"./*.d.ts","default":"./_mjs/*.mjs"},"require":{"types":"./*.d.ts","default":"./*.js"}}},"types":"./index.d.ts","description":"<h3 align=\"center\">   <a href=\"https://fp-ts.github.io/schema/\">     <img src=\"./docs/fp-ts-logo.png\">   </a> </h3>","bugs":{"url":"https://github.com/fp-ts/schema/issues"},"homepage":"https://github.com/fp-ts/schema#readme","_id":"@fp-ts/schema@0.0.4","_integrity":"sha512-n/1CEtl6QJPH1MP70XRzQAANsYQCVdCVLVDPQPtPuNbWZunP4vifOMTQSwj0ThnL7Ccczw1BEohmllSbXZoKnQ==","_resolved":"/tmp/1817f601f5f63268f3577c489f215ef7/fp-ts-schema-0.0.4.tgz","_from":"file:fp-ts-schema-0.0.4.tgz","_nodeVersion":"16.17.1","_npmVersion":"8.15.0","dist":{"integrity":"sha512-n/1CEtl6QJPH1MP70XRzQAANsYQCVdCVLVDPQPtPuNbWZunP4vifOMTQSwj0ThnL7Ccczw1BEohmllSbXZoKnQ==","shasum":"44a357ca54bd41126c2516f760b2cf7948f17535","tarball":"https://registry.npmjs.org/@fp-ts/schema/-/schema-0.0.4.tgz","fileCount":248,"unpackedSize":528168,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCW63vk+sHJH168UFFg4l2ovPMkLBag3cjvVbR6tDepaAIgVIEKHJ9TL9OXcD/m1Yz5hnDz+swYb8DfzhHfOTR1hZ4="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjj/PNACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmrM3w//X8I+WsBPKjDpNNeQt38iVLOYQTkBxDHRVQ7XrQBpk/VqF1Nd\r\n3MIdiyFMKYkFvFH4bIpLP5Ex6azBnGfJyWXvQw3JSFl8z3gHVP//6Q6b0A4y\r\nSKrN2ejphcval7s3ffDwWPcZSHYRLBvlk1WsN2nM93FlSbVrVPFc2YbHjgXQ\r\nSuFbrgI7WGhR4usjuBbYY74oX930Ba2cilHWrJEyMF7MViLW3cXwpHxiUbAB\r\nZlb+Etm0s1YQ0QEKLQTiLQB2FyO47WSugUFywjoNhH2z4+5I38EEk387i0u4\r\nAE9aItNGfv9MU1DlmyHRr7mMkzXNNs3syN3v6hg0RHEai3KTPTTzrHWSpxBN\r\n0U5O2spREvDI8iUvr49ICcTSnn8AqmAY5keYNAKwnX0fZVqERDLhKPsUSrRw\r\n6hHRe3XplM1Odj3cOlxa7YbPoD5Fy3adNBOnkZ5bf01FR/6o5oaSDDvtZ1JX\r\nAj6938ZMYRTxG99XVvLHV351JtNC68KOFANKzojlEb7QdR0ci5sAsFUngmww\r\npRqTPTs9fptcA7hGdXfkuRk221lFchLY+L1hzH9kMjospdci1nFMHmPpqJTn\r\n2dPCSLGBAUfGOwWk7k27oeZ546hrzj2O+iupO8m/Smh/Kowm1hF9ZW5eAebj\r\nIbK/2oH83UMudkBNnv9YZgMsNq206u60cDU=\r\n=UBHP\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"fp-ts-bot","email":"ma+fp-ts-bot@matechs.com"},"directories":{},"maintainers":[{"name":"fp-ts-bot","email":"ma+fp-ts-bot@matechs.com"},{"name":"michael.arnaldi","email":"ma+npm@matechs.com"},{"name":"gcanti","email":"giulio.canti@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/schema_0.0.4_1670378445362_0.6099904235451472"},"_hasShrinkwrap":false},"0.0.5":{"name":"@fp-ts/schema","version":"0.0.5","license":"MIT","repository":{"type":"git","url":"git+https://github.com/fp-ts/schema.git"},"dependencies":{"@fp-ts/core":"~0.0.9","@fp-ts/data":"~0.0.22","fast-check":"^3.3.0"},"main":"./index.js","publishConfig":{"access":"public"},"sideEffects":[],"exports":{".":{"import":{"types":"./index.d.ts","default":"./_mjs/index.mjs"},"require":{"types":"./index.d.ts","default":"./index.js"}},"./*":{"import":{"types":"./*.d.ts","default":"./_mjs/*.mjs"},"require":{"types":"./*.d.ts","default":"./*.js"}}},"types":"./index.d.ts","description":"<h3 align=\"center\">   <a href=\"https://fp-ts.github.io/schema/\">     <img src=\"./docs/fp-ts-logo.png\">   </a> </h3>","bugs":{"url":"https://github.com/fp-ts/schema/issues"},"homepage":"https://github.com/fp-ts/schema#readme","_id":"@fp-ts/schema@0.0.5","_integrity":"sha512-y2zsqJDbe2uKlzLgG80U8TSaW9rDpUzZaBwNNtmvst5x72qZ9d3K/GpmvfmVBSAZ/dNFKh24UyUqbTrjjrxFVA==","_resolved":"/tmp/97bbc676d1cd2ecd3c2991d9de101459/fp-ts-schema-0.0.5.tgz","_from":"file:fp-ts-schema-0.0.5.tgz","_nodeVersion":"16.17.1","_npmVersion":"8.15.0","dist":{"integrity":"sha512-y2zsqJDbe2uKlzLgG80U8TSaW9rDpUzZaBwNNtmvst5x72qZ9d3K/GpmvfmVBSAZ/dNFKh24UyUqbTrjjrxFVA==","shasum":"55530691374611675b7de5245424c46ee1652a74","tarball":"https://registry.npmjs.org/@fp-ts/schema/-/schema-0.0.5.tgz","fileCount":248,"unpackedSize":540951,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCKySJTcgv8CSJ6UDmyZKMO39vmagz8b+WWSJeEcL6G9QIgHXGdzea33AI8lRgKt2XJUIlbAoyYYPxC29IWtttn2BA="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjkG2/ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmqNpA//cc3m+KUMF1ZB+0todLIcqElPz+7iUWe3fsatWl85/i8Z+v5M\r\nkeJQTrcM67O8nFVGfh5em2/WXrKha8zeBQveHo0WaASENt5KSPHxOWMtZQIL\r\n7CrPOgw/iJkivh4ddwZR96+xj0r7W2KVtHgOhZxlPKJLn9Um/GkMXufbnY7z\r\nqy07FFURwMLrsrES7+T9I/YNd5mLgYjGcqQ7C09fXl6n37OjX3J6Cz3XRUXZ\r\nxvuIpfy89Y2nIpwNZYjimOkpjC7wku8WJpK4is9rpuGbatTw2FRXc2atONuA\r\nqWiB4c0ChyN5M3utFwmU9hsfLkJNfYcNV/21iDD1+HeZXrOK1IIh9JYbZWQp\r\nRq3TBXqGhY1/KGXE74YnhvBN5cjW4vQwa93fbifZ4FhKXNklUUkWPeim7xSS\r\n789jFxT9QquQHO2QegKHqh7Z/qWzWouUrQHu8ZFE4M/0hxDeViLPhWU6CtT4\r\nE5srnXBlKVB/Nt7HP93wmdSbnx+pBkmjocfqA84Wc2zqd3SoiCiwEISGoeQF\r\nM5o2yWXTPzIDC877gf70osufMFYB3m6kn80gW80ievomPTHSUFRsIv2falbI\r\nu6I/ubB9vJ0ArOcaA7NfrdGUmRLvGzk86ttvuZ44zKmBwoLLalqNDR5thkyP\r\nwmnostEL3Apg/iQXy629kE58KFQVETNMiXg=\r\n=Uvfg\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"fp-ts-bot","email":"ma+fp-ts-bot@matechs.com"},"directories":{},"maintainers":[{"name":"fp-ts-bot","email":"ma+fp-ts-bot@matechs.com"},{"name":"michael.arnaldi","email":"ma+npm@matechs.com"},{"name":"gcanti","email":"giulio.canti@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/schema_0.0.5_1670409662751_0.7097918629054416"},"_hasShrinkwrap":false},"0.0.6":{"name":"@fp-ts/schema","version":"0.0.6","license":"MIT","repository":{"type":"git","url":"git+https://github.com/fp-ts/schema.git"},"dependencies":{"@fp-ts/core":"~0.0.11","@fp-ts/data":"~0.0.28","fast-check":"^3.4.0"},"main":"./index.js","publishConfig":{"access":"public"},"sideEffects":[],"exports":{".":{"import":{"types":"./index.d.ts","default":"./_mjs/index.mjs"},"require":{"types":"./index.d.ts","default":"./index.js"}},"./*":{"import":{"types":"./*.d.ts","default":"./_mjs/*.mjs"},"require":{"types":"./*.d.ts","default":"./*.js"}}},"types":"./index.d.ts","description":"<h3 align=\"center\">   <a href=\"https://fp-ts.github.io/schema/\">     <img src=\"./docs/fp-ts-logo.png\">   </a> </h3>","bugs":{"url":"https://github.com/fp-ts/schema/issues"},"homepage":"https://github.com/fp-ts/schema#readme","_id":"@fp-ts/schema@0.0.6","_integrity":"sha512-LQXER4wDjbbG/OJSP8x/2nEvDeOQojzdrj4HiNjZF9ZpxOIgi3QjdzuxCRD0K/UpT6nm3jqY2VLHG+26zWmZ7g==","_resolved":"/tmp/23bef167bb9027aa00b62c4a3835c251/fp-ts-schema-0.0.6.tgz","_from":"file:fp-ts-schema-0.0.6.tgz","_nodeVersion":"16.17.1","_npmVersion":"8.15.0","dist":{"integrity":"sha512-LQXER4wDjbbG/OJSP8x/2nEvDeOQojzdrj4HiNjZF9ZpxOIgi3QjdzuxCRD0K/UpT6nm3jqY2VLHG+26zWmZ7g==","shasum":"660e07bfb556ee28e3a15d1ebb352cb8c24c50a6","tarball":"https://registry.npmjs.org/@fp-ts/schema/-/schema-0.0.6.tgz","fileCount":194,"unpackedSize":484558,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCvYVkhlq8Y172L223Et2UyzDiAI7mFne7hb9AehnS4VgIgIkDZY55wde9ZcgvXr8Tj0bvobzGI/s1JWb58cldH5Ek="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjofjSACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmrYeA/9HhCRBjZfHuctrBS6oCHmOin6XvUltrhcx+tyPcANsFDwy1sW\r\n7tyQua4z+dYw3BznNSSB5WtRxPGhjKnpIruqobBlttAJoM/hrddOAbG1mKvc\r\nZLtUncAt0Zz9bOKD1BKcH8Zxk6PnpKFdgFxg8i863jA9whfOicuCoIjJyID3\r\nWmhZNpTpmhfgvuMr8hFDP+jRjJPzLAaCfXIceb6s8xMj+DaE6MqnplDIn0aO\r\nj7aq7EkkoA3j09fwuMxWuCe6vyB/aTG5KL6ZWzfIPmuuFC9CjH4jlMDeRnur\r\nlhl6S1vqcTlACojGIXtdQ2s1kWDF68zPFwdJlMbPuMPrXtfQFDf6BPY1zfpo\r\nn/Te0tosKrAV6zrPgJujetVAKqrx1ks7WssQmVKs8IZZMykT06piIkS9SNUh\r\n31iBB3sozIg4ktzlJYFgm53tt3p0MNITuTlEU8OaeGlH08FYR1YBq0W9Ax0H\r\nJy9et+C0MG3YKKxz7JtM2PVIUED5gKld806uyqfljyQd5e26IkPFoK9Inq8C\r\nbmMN3UFVboXoG5dD5xhsIu/UyyijaDd+ck6gJJVYizonLLQ3Kqo6YkOWj5vY\r\nycUnUIyZIUhcnQGZB3coN7PjRlOrisNdQyIly04AQbO06yRM2IIh7penJL2p\r\nVKBwI27tqrqAaONR+2qq0x++X7T4IfF1nyE=\r\n=wu4p\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"fp-ts-bot","email":"ma+fp-ts-bot@matechs.com"},"directories":{},"maintainers":[{"name":"fp-ts-bot","email":"ma+fp-ts-bot@matechs.com"},{"name":"michael.arnaldi","email":"ma+npm@matechs.com"},{"name":"gcanti","email":"giulio.canti@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/schema_0.0.6_1671559378768_0.03014756041984179"},"_hasShrinkwrap":false},"0.0.7":{"name":"@fp-ts/schema","version":"0.0.7","license":"MIT","repository":{"type":"git","url":"git+https://github.com/fp-ts/schema.git"},"dependencies":{"@fp-ts/core":"~0.0.11","@fp-ts/data":"~0.0.31","fast-check":"^3.4.0"},"main":"./index.js","publishConfig":{"access":"public"},"sideEffects":[],"exports":{".":{"import":{"types":"./index.d.ts","default":"./_mjs/index.mjs"},"require":{"types":"./index.d.ts","default":"./index.js"}},"./*":{"import":{"types":"./*.d.ts","default":"./_mjs/*.mjs"},"require":{"types":"./*.d.ts","default":"./*.js"}}},"types":"./index.d.ts","description":"<h3 align=\"center\">   <a href=\"https://fp-ts.github.io/schema/\">     <img src=\"./docs/fp-ts-logo.png\">   </a> </h3>","bugs":{"url":"https://github.com/fp-ts/schema/issues"},"homepage":"https://github.com/fp-ts/schema#readme","_id":"@fp-ts/schema@0.0.7","_integrity":"sha512-9QUldRcc5Ii+69neOw00cDaR5jjK5CAMvbfUhh9mU3FmBEZEY2/23IMSfMmKUQs65qIofRbS9MIJRfa1rosQ2g==","_resolved":"/tmp/3717353c2452ccf89ab1c062d70f2805/fp-ts-schema-0.0.7.tgz","_from":"file:fp-ts-schema-0.0.7.tgz","_nodeVersion":"16.17.1","_npmVersion":"8.15.0","dist":{"integrity":"sha512-9QUldRcc5Ii+69neOw00cDaR5jjK5CAMvbfUhh9mU3FmBEZEY2/23IMSfMmKUQs65qIofRbS9MIJRfa1rosQ2g==","shasum":"5097ffd15fd96bfccba3292710387cc44fce2658","tarball":"https://registry.npmjs.org/@fp-ts/schema/-/schema-0.0.7.tgz","fileCount":158,"unpackedSize":538886,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD5QwuJyhMyV4q1CoQlvy53BEi9h2K2IrycAw1FOONh9QIhAIispviHXjPblI0MC+J7njZBL2HtLK1ApG98pSc/tk2X"}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjrYlzACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmpL/w//eznBNcLzKEGwONUEode2mmPThJ6SUR5rAgqTUJo6nqP6Lvv4\r\n8JelnmQOc1Fp14QNGuILtbla34PgkHGZ0orb7IG7mxGGX+4i60i2OcCDVF/F\r\nvpsIWq0/mgHtVuWtm9YmG/o+hFrcNiuoOf8S6+JP/nU2T6YZ6eyjOFblXPGq\r\nxiJKMjRx5e1TlpLULlCZS4MSo/2XFgDo4QONTD6ap08pph/kKiXwvof4Fe8j\r\np/aZoSIF9OrGtHYUNPdvme72+cq7wZ+wlzBCNILBcyR092g+Q5fHoGr7bxSu\r\nN3aAxbm4muI165HboXH0mkBg6s9U6oq4w0yVpJ6TJxOLZ+Sih2vxF+E9u3e1\r\nA5MGouy7V3vud4BsHIo0jTlRMHFtjbii+5TtBRuV3KOi/nWFtT98dF9RDDGz\r\nmeD61pcOu45c3KogTcgVnxLXtRiH4w7xIbdFpYYJ4iI8BLfUQRRlqoE1Oiuy\r\neIfZzH+tXtan7fpe7+MtcbiVVVFzGGvidFpSvyLNZuqXyxapdgY/k8+efATD\r\nEfzM76nV5rHZ8qhiO5vxK9ZNZI15TFHmFt1uV5GOwfdfeKuQ4omPGoocpZ7i\r\nTqmB63VO787UDRsq5wG6pM2QRXeWVt8o80phagpBXIWKrotDhztHrtUVYN3l\r\nt7pfCW5JbajeEduH0TDd0wwk/89a8RnwG0g=\r\n=MDJV\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"fp-ts-bot","email":"ma+fp-ts-bot@matechs.com"},"directories":{},"maintainers":[{"name":"fp-ts-bot","email":"ma+fp-ts-bot@matechs.com"},{"name":"michael.arnaldi","email":"ma+npm@matechs.com"},{"name":"gcanti","email":"giulio.canti@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/schema_0.0.7_1672317299198_0.6531769526580489"},"_hasShrinkwrap":false},"0.0.8":{"name":"@fp-ts/schema","version":"0.0.8","license":"MIT","repository":{"type":"git","url":"git+https://github.com/fp-ts/schema.git"},"dependencies":{"@fp-ts/core":"~0.0.11","@fp-ts/data":"~0.0.39","fast-check":"^3.5.0"},"main":"./index.js","publishConfig":{"access":"public"},"sideEffects":[],"exports":{".":{"import":{"types":"./index.d.ts","default":"./_mjs/index.mjs"},"require":{"types":"./index.d.ts","default":"./index.js"}},"./*":{"import":{"types":"./*.d.ts","default":"./_mjs/*.mjs"},"require":{"types":"./*.d.ts","default":"./*.js"}}},"types":"./index.d.ts","description":"<h3 align=\"center\">   <a href=\"https://fp-ts.github.io/schema/\">     <img src=\"./docs/fp-ts-logo.png\">   </a> </h3>","bugs":{"url":"https://github.com/fp-ts/schema/issues"},"homepage":"https://github.com/fp-ts/schema#readme","_id":"@fp-ts/schema@0.0.8","_integrity":"sha512-+osZGEnfVO4jaoBnjMRmZT/yoYhu+DoN3eCn0HjWMnDF6ZDUuWahtSTp4HpBwd2lL0+FkulAywvM8WRpy4lZiw==","_resolved":"/tmp/6ff2d7d915debc21939b0230fa7c8c0d/fp-ts-schema-0.0.8.tgz","_from":"file:fp-ts-schema-0.0.8.tgz","_nodeVersion":"16.17.1","_npmVersion":"8.15.0","dist":{"integrity":"sha512-+osZGEnfVO4jaoBnjMRmZT/yoYhu+DoN3eCn0HjWMnDF6ZDUuWahtSTp4HpBwd2lL0+FkulAywvM8WRpy4lZiw==","shasum":"b7834ea6b5c70a84abae7d0abf1829ff2eaf8990","tarball":"https://registry.npmjs.org/@fp-ts/schema/-/schema-0.0.8.tgz","fileCount":116,"unpackedSize":482121,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGlyxSOYnXdZiMAiNPXNCyur5bffeIOuKPPN+BaMWb7YAiEApxeY34/S3mSzag5NXG2s/JfwZEdOFd3ES7uHoTIK2SA="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjwY0UACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmpDOxAAlq6sPWb58G4HBvZFo6892WukKC/sKWQDrWtsjioLi1dsxcNy\r\ndUW8EigRr3sClsT59GMfPhWAO4wzNQachJnh6mjTgti6qY098v7jFrh0Iwbr\r\n3gdT0lY8bMkOpi3EVXsmQHbkA1yzRGtBDMyMEsiVqatTv96vNyMuDebu8/hJ\r\npWNwfAQnezSSxzSDIwsLaZjTqaELCsnpY5P096yBaX7osyetSv4wYqLwXFlF\r\nNv2mzlmhKPDEBkhPmkMZWfn3OnG0cgiL9q5GU9dJ8Slu6U+uehOJtvd8rx8n\r\nUeQc30dcWefCs8fzfWvXAPvbubd9iN6Os25yn5cqJXUFuA0ob9oWiwJ5wTTI\r\niVdl76XnkhYLlW1fFSRINMyPdTBGhzRGPXvUni6EIWVvK3mhCSUT3ocgCsKY\r\nIUxbgGXJVKjcgpAMmsXGeBGcREOW3oOK4L8L0qFFGqK4P4+OCbpOnGhufkVj\r\noRzRXBh0ewkHkKmSn4E/XACCJkDiMpyPr5xwZVo14vD8LTT+j5x4lg3aHRsj\r\nM2Fd+iU3l/rpjBRpOR2h2Xg/6a9CAHdvEHriMR0B+vQQGSpJiEEBb3B0r5iL\r\nan6ZKOaRIad2P6Pu2NTqfB4jK6V3AnUEclArbmPkl9FvD4IRx5Smak7iLT2H\r\nx8A+kKHpcj5sM/PpgrKQc90SANAH4GCiIcM=\r\n=xXXt\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"fp-ts-bot","email":"ma+fp-ts-bot@matechs.com"},"directories":{},"maintainers":[{"name":"fp-ts-bot","email":"ma+fp-ts-bot@matechs.com"},{"name":"michael.arnaldi","email":"ma+npm@matechs.com"},{"name":"gcanti","email":"giulio.canti@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/schema_0.0.8_1673628948452_0.7431757852529894"},"_hasShrinkwrap":false},"0.1.0":{"name":"@fp-ts/schema","version":"0.1.0","license":"MIT","repository":{"type":"git","url":"git+https://github.com/fp-ts/schema.git"},"dependencies":{"@fp-ts/core":"0.1.1","@fp-ts/data":"^0.1.0","fast-check":"^3.6.2"},"main":"./index.js","publishConfig":{"access":"public"},"sideEffects":[],"exports":{".":{"import":{"types":"./index.d.ts","default":"./_mjs/index.mjs"},"require":{"types":"./index.d.ts","default":"./index.js"}},"./*":{"import":{"types":"./*.d.ts","default":"./_mjs/*.mjs"},"require":{"types":"./*.d.ts","default":"./*.js"}}},"types":"./index.d.ts","description":"<h3 align=\"center\">   <a href=\"https://fp-ts.github.io/schema/\">     <img src=\"./docs/example.png\" width=\"500\">   </a> </h3>","bugs":{"url":"https://github.com/fp-ts/schema/issues"},"homepage":"https://github.com/fp-ts/schema#readme","_id":"@fp-ts/schema@0.1.0","_integrity":"sha512-eJZGaP/0Srwm9fsdcxhWUofD9aYVl65fbfh4LLY9Yt2T0MPDOYCr0BvnP4x9+Ox6zrhF/zGEBH+rhsHYq/eziQ==","_resolved":"/tmp/43949b0fe6e369b700cd8570987c7a46/fp-ts-schema-0.1.0.tgz","_from":"file:fp-ts-schema-0.1.0.tgz","_nodeVersion":"16.17.1","_npmVersion":"8.15.0","dist":{"integrity":"sha512-eJZGaP/0Srwm9fsdcxhWUofD9aYVl65fbfh4LLY9Yt2T0MPDOYCr0BvnP4x9+Ox6zrhF/zGEBH+rhsHYq/eziQ==","shasum":"ede0d2816bf6d23999b96a96d66482d15376500a","tarball":"https://registry.npmjs.org/@fp-ts/schema/-/schema-0.1.0.tgz","fileCount":128,"unpackedSize":526288,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCTlnpkAMBRKWdPs8EZfAKSq9GdmQqENYsQ9aDsTOHXcQIhANuTbE8EWjIpuxQ/v9VhMDvp6NwVJEIQ5LBSM/GQydYY"}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJj0TAnACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmqP9Q//YotbdK8ksxFekOSf8hxorEDw7MtYU/Ck0Qxc7KExLpisahen\r\nsVfAI+g56gRDrxJEOdl4pxoh8ok+yEgX4v9lRUcMcd7EfqjXBtssP1Wlgvzo\r\nc/PR3o+apOuFI/GD9GfoV97eiO/+p0dHlBj/rHk5xlWePr4NKPmMyMfcfuAX\r\nkI4J/Y1qmrnXW8j1048ZvmWfmqTEM71RT6G8EKt+fEJA0053bsciJbamaX0k\r\n9aR4/ri93X+UbQHGxGQSAKfmOTfhp3WfyLcgyuDuZLJKjSXIK6zPtwEfL2KI\r\njTOsKsd3YQbA7NAiB/vrmILieEDNia+o/nfOIv1/cyoO3nobXRjuef6MQc7M\r\nlAOxpYusxm2UL90P4NxpFjIcOLvKzlWUqqhLfoOvreTe6pJ3ZgP6NVeZtGox\r\nk0N9h9282Dp0aJy6wlaVO9cZvGIS3VyZBjPlrTm5g3y0mxq1KgOcMZqhot9G\r\nRL/M8oDfhjU0Q44HCPdmWe1tuK0jPZ+kLuNfxsEieLBlWnoXZLXu2YmNC/VE\r\nZPgWRAm5MUkL0C123gLHLlTQKkjAUx3d2GL51kcIkBcq1CMdDaV6CroaugZO\r\n2RqA2fFMH7ldanHrDuquswBHLAWr9xnhWSw/UNoE1IS/JJlsbn5GT1j53H+7\r\nJz7iEdvQGgX1rwfpy1b/sb9VUG4dGFDaVVs=\r\n=nKlB\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"fp-ts-bot","email":"ma+fp-ts-bot@matechs.com"},"directories":{},"maintainers":[{"name":"fp-ts-bot","email":"ma+fp-ts-bot@matechs.com"},{"name":"michael.arnaldi","email":"ma+npm@matechs.com"},{"name":"gcanti","email":"giulio.canti@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/schema_0.1.0_1674653734943_0.2614055587454778"},"_hasShrinkwrap":false},"0.1.1":{"name":"@fp-ts/schema","version":"0.1.1","license":"MIT","repository":{"type":"git","url":"git+https://github.com/fp-ts/schema.git"},"dependencies":{"@fp-ts/core":"0.1.1","@fp-ts/data":"^0.1.0","fast-check":"^3.6.2"},"main":"./index.js","publishConfig":{"access":"public"},"sideEffects":[],"exports":{".":{"import":{"types":"./index.d.ts","default":"./_mjs/index.mjs"},"require":{"types":"./index.d.ts","default":"./index.js"}},"./*":{"import":{"types":"./*.d.ts","default":"./_mjs/*.mjs"},"require":{"types":"./*.d.ts","default":"./*.js"}}},"types":"./index.d.ts","description":"<h3 align=\"center\">   <a href=\"https://fp-ts.github.io/schema/\">     <img src=\"./docs/example.png\" width=\"500\">   </a> </h3>","bugs":{"url":"https://github.com/fp-ts/schema/issues"},"homepage":"https://github.com/fp-ts/schema#readme","_id":"@fp-ts/schema@0.1.1","_integrity":"sha512-+r8YGV64cRoDraXqSGPA+PJoR8wWUQB925iqBOhPvCmgcTTJCaciASNnOl/7M+i5XH/B/eJIqWfUWJZcshxS5Q==","_resolved":"/tmp/d5f5b98615eef5d126a7f2bd1b90c4ef/fp-ts-schema-0.1.1.tgz","_from":"file:fp-ts-schema-0.1.1.tgz","_nodeVersion":"16.17.1","_npmVersion":"8.15.0","dist":{"integrity":"sha512-+r8YGV64cRoDraXqSGPA+PJoR8wWUQB925iqBOhPvCmgcTTJCaciASNnOl/7M+i5XH/B/eJIqWfUWJZcshxS5Q==","shasum":"5101fa25bb0b11f5893237b65136016562a70564","tarball":"https://registry.npmjs.org/@fp-ts/schema/-/schema-0.1.1.tgz","fileCount":128,"unpackedSize":527585,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD5uxubE3MGVXJIXn/M4CKf1TbwLrRt2NewMSwB7WB3WQIgT+X0y2D1U2hFXbsKeTI8fEijCaBBLLNy+KMs3iZEtoI="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJj0aoEACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmqxjg//baTqJgUbzUZxrrfp9HOtlUgNH3L4N7Wd0sGbondqxJ9hwTSh\r\nEzm2NIhScuTJymFDEP2GDVnWfy/Oyg0l/3dWT8R3fozJWNxoomRSJZNs+6Ph\r\nAcpRtzd3PeP/P0bKe9vNCsq1LfthoQcDpH88qEyG+yPMsRnvY2Q+b2dEzIeg\r\nUQmFfISDzqJM402K9zJcsws2HvKTEcLPRyQyqnEUPBY7xWMNL0srbTb5p7tc\r\n40Y+g6xaDfx0rA3m/hJn8gfU3Mz87M8V2v/GLuPxFRwa4bqutEYhmaVnXG8u\r\n183hnZ1dxU7LPrX3fe5xbp8aecH+PEltWFutotz2IcNKogA/EvSOuO5b0VEO\r\nOBUznHpjId2Mr6NPtLQZwhTw1858d2nRW3G4Ls/7vprGV/2sprdFRa3nDQ94\r\npfMy1JFfvFufC6MulblagvX916ozgnOW/miRRollLIpt75gdelIdZX/h/CMW\r\nJDaP5+/VD+53EmyCBWX6sjWJMUh6wY4DW7dqD7T2FxOifPGWzXW5WvOaNZcy\r\nRTPhgVXXMq6E0becZ5YTYyOlueXJ1zxfeWdJKo6CH12AifhATgjMA8UJuHpo\r\nraJ0tOkYgdkXoAxlFVBw8MGtxETvcdzKeZ+jWmGaeD1Sg1lQx3WjwNJJbpkL\r\nloMnW1iUrJOarGoYJZKHNoT355L8tgEyd7Q=\r\n=RSfg\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"fp-ts-bot","email":"ma+fp-ts-bot@matechs.com"},"directories":{},"maintainers":[{"name":"fp-ts-bot","email":"ma+fp-ts-bot@matechs.com"},{"name":"michael.arnaldi","email":"ma+npm@matechs.com"},{"name":"gcanti","email":"giulio.canti@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/schema_0.1.1_1674684932479_0.3389180841321977"},"_hasShrinkwrap":false},"0.1.2":{"name":"@fp-ts/schema","version":"0.1.2","license":"MIT","repository":{"type":"git","url":"git+https://github.com/fp-ts/schema.git"},"dependencies":{"@fp-ts/core":"0.1.1","@fp-ts/data":"^0.1.0","fast-check":"^3.6.2"},"main":"./index.js","publishConfig":{"access":"public"},"sideEffects":[],"exports":{".":{"import":{"types":"./index.d.ts","default":"./_mjs/index.mjs"},"require":{"types":"./index.d.ts","default":"./index.js"}},"./*":{"import":{"types":"./*.d.ts","default":"./_mjs/*.mjs"},"require":{"types":"./*.d.ts","default":"./*.js"}}},"types":"./index.d.ts","description":"<h3 align=\"center\">   <a href=\"https://fp-ts.github.io/schema/\">     <img src=\"./docs/example.png\" width=\"500\">   </a> </h3>","bugs":{"url":"https://github.com/fp-ts/schema/issues"},"homepage":"https://github.com/fp-ts/schema#readme","_id":"@fp-ts/schema@0.1.2","_integrity":"sha512-hhH4tjMN5wPClUDMLK7ZmuK3Zzqb5Pv/YCcUI4PycSHkpWO3Pw8+hIlrIlTfUXvgw6OF9DAoH2I0xP04RiCHlw==","_resolved":"/tmp/10151b31338ea8020ee8ae28de442fac/fp-ts-schema-0.1.2.tgz","_from":"file:fp-ts-schema-0.1.2.tgz","_nodeVersion":"16.17.1","_npmVersion":"8.15.0","dist":{"integrity":"sha512-hhH4tjMN5wPClUDMLK7ZmuK3Zzqb5Pv/YCcUI4PycSHkpWO3Pw8+hIlrIlTfUXvgw6OF9DAoH2I0xP04RiCHlw==","shasum":"53e3a2c4498b7ac0d8ed7244aebad67b3b7f593c","tarball":"https://registry.npmjs.org/@fp-ts/schema/-/schema-0.1.2.tgz","fileCount":128,"unpackedSize":528788,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDCcaI40qwBd6VWMh2DbOEzEo92Dq3HZy3X3lkcXhDZIgIgaWGwoUX7UeumBX+32ql/3Hq1NJym8pXhpX/Kc8NjJIw="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJj0pB0ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmo+iQ/+PpYG1vmXtsnEEfRFdjtQ1/tYqTVEX/V5lKk3EyipyUgEizRO\r\n+m7j0dc8iH7I0bOdKY1rWEHjsGptdjMydlyMMxGzDY37YhmJDOVKPrixRB+5\r\nVum+u8h+onUzN+rtyF+6SifuzPu3VyCau1iDz80RlcQa20MEtnGZf7qpBAGG\r\n7l0XxKoGirhBrrHwXlr5ZdL6TLW42oNdG7WFkSDsJY4n1p9n+68Nif4LkU3x\r\nRPqKIq1cQEYVkWf3ZI20pnMcuOCD+JLJX4m72a7HhHg1tVTGDbmATmeLvMxN\r\nzhaXDRZ86yxsEuWoR5McBh+45VZYrahtqlB8Zz/WL/j4U0d6TuOo/HPav/qM\r\nJDFSnKazna0LBA1zlIONNiAT97MS67wdMTS8lz0azW+ZDBf2HOChD/i7D5LY\r\nYoXcaYvLSQdGkFj9wkKQaOZAUBahcnprguX2+izNt2oyS41t5hRtwJhaF1us\r\n//w82SculOkRrtMFtreW3PtxWBBiJ0hl35wSqwtjVPGAmvADGT7RqBJx0odP\r\nMy8tJmrPRGOub3vb0rtkLZm5DyvB25SMbEC/Y9i78XpUBQyLE60I0WiE/d31\r\nDAtxJOlczlSCYDYwt7Xxw+ABL0TgnqMPHaOYXa2OzBMIm8/rQVd/LUSvX4vl\r\nmlmVjN88g96nxvx3+Yb8Zr3NpqrSX1R+TZE=\r\n=sZqo\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"fp-ts-bot","email":"ma+fp-ts-bot@matechs.com"},"directories":{},"maintainers":[{"name":"fp-ts-bot","email":"ma+fp-ts-bot@matechs.com"},{"name":"michael.arnaldi","email":"ma+npm@matechs.com"},{"name":"gcanti","email":"giulio.canti@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/schema_0.1.2_1674743924547_0.5271871127845198"},"_hasShrinkwrap":false},"0.1.3":{"name":"@fp-ts/schema","version":"0.1.3","license":"MIT","repository":{"type":"git","url":"git+https://github.com/fp-ts/schema.git"},"dependencies":{"@fp-ts/core":"0.1.1","@fp-ts/data":"^0.1.0","fast-check":"^3.6.2"},"main":"./index.js","publishConfig":{"access":"public"},"sideEffects":[],"exports":{".":{"import":{"types":"./index.d.ts","default":"./_mjs/index.mjs"},"require":{"types":"./index.d.ts","default":"./index.js"}},"./*":{"import":{"types":"./*.d.ts","default":"./_mjs/*.mjs"},"require":{"types":"./*.d.ts","default":"./*.js"}}},"types":"./index.d.ts","description":"<h3 align=\"center\">   <a href=\"https://fp-ts.github.io/schema/\">     <img src=\"./docs/example.png\" width=\"500\">   </a> </h3>","bugs":{"url":"https://github.com/fp-ts/schema/issues"},"homepage":"https://github.com/fp-ts/schema#readme","_id":"@fp-ts/schema@0.1.3","_integrity":"sha512-rdyqwodZPqbY96mAUg3cAEKK7WsJ3JqZWDfBShSoPvxwB+fnFw1Rjhg3tsTpBhBN1oGlSHatIRJQ+QcoaAU+uA==","_resolved":"/tmp/bfa2be37e72f6f02ff878654eb5b6c05/fp-ts-schema-0.1.3.tgz","_from":"file:fp-ts-schema-0.1.3.tgz","_nodeVersion":"16.17.1","_npmVersion":"8.15.0","dist":{"integrity":"sha512-rdyqwodZPqbY96mAUg3cAEKK7WsJ3JqZWDfBShSoPvxwB+fnFw1Rjhg3tsTpBhBN1oGlSHatIRJQ+QcoaAU+uA==","shasum":"cc3a46385cbec94fc8aa1ef423b9ea5e5943b4fc","tarball":"https://registry.npmjs.org/@fp-ts/schema/-/schema-0.1.3.tgz","fileCount":128,"unpackedSize":528674,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCotYkoZVMJE7+x+kVMExFtg/5L4qdzhHHnEZBSIjNDfQIgMlLyqmlSrmeDzhX8A6C7rIU8maeQ69F2BiyncbNTPc4="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJj03l9ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmoVvw/5AReAGlPzWRjpY0AVLbq4ivFVJ8Ad8erYNszVUkqxvqKNEAnc\r\n4HUjI3ZP1/4kXEMdAQmU1T6cTxi71eKaRpuyEPn09NbgT+bG0j4eyIXHIvG0\r\nSOXPxfAxigDK34gw6sU3y2+YPrM3HkOmIZODV7Hz01xYq9PMId8vzZLEda5d\r\nwEkGIahFqsFaYEQmr5MpBOEJ4iVYfQs/BeCk0Y/29To/uTFWxcI61PsTCLMu\r\nX8i1/Z7h2Uc8BwH/4Dp45ZVgW3LP1OeyyEK360T1Jl88UDTXfPjFVnbNp4go\r\nDfdT0UUZxkg8asYhXrnHHXgTjX1Y2IIQer63iOCW6sjl2aO/AeYSqPFdvBb6\r\nZw2n4n7Yqucwgi61OaiUIXgttING956Q1Do4BWHnTeIUpj54tLMZyrGiYoxP\r\nXQrkI3Zf6a0lgolaoMR1q9O1+EAkKI2LejNoB2qqwLg3o7zPB8+rV5j1MXzh\r\nxmrwjP5f5CRf1Y7SGi66yr4KBla7YGTY5P9+A+X3ZpWtlsS5QdTfinP45zZz\r\nZUdrLblJUMYi5C6I1yIQHFdFKb+hrHGHvRpz9dxjumeg8MsjXU5CXObMOivu\r\nuwfnrjPBWLoo570crdgpNu7OPIB818LXlEaFcQzIUAphBQmE2eOgoe3gDCUv\r\n2J2yc5nyau2zZEEoPmlawJgZZ74Gbt8eQsM=\r\n=5YPB\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"fp-ts-bot","email":"ma+fp-ts-bot@matechs.com"},"directories":{},"maintainers":[{"name":"fp-ts-bot","email":"ma+fp-ts-bot@matechs.com"},{"name":"michael.arnaldi","email":"ma+npm@matechs.com"},{"name":"gcanti","email":"giulio.canti@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/schema_0.1.3_1674803581163_0.8362777236155403"},"_hasShrinkwrap":false},"0.2.0":{"name":"@fp-ts/schema","version":"0.2.0","license":"MIT","repository":{"type":"git","url":"git+https://github.com/fp-ts/schema.git"},"dependencies":{"@effect/data":"~0.1.0","@fp-ts/core":"~0.2.1","fast-check":"^3.6.3"},"main":"./index.js","publishConfig":{"access":"public"},"sideEffects":[],"exports":{".":{"import":{"types":"./index.d.ts","default":"./_mjs/index.mjs"},"require":{"types":"./index.d.ts","default":"./index.js"}},"./*":{"import":{"types":"./*.d.ts","default":"./_mjs/*.mjs"},"require":{"types":"./*.d.ts","default":"./*.js"}}},"types":"./index.d.ts","description":"<h3 align=\"center\">   <a href=\"https://fp-ts.github.io/schema/\">     <img src=\"./docs/example.png\" width=\"500\">   </a> </h3>","bugs":{"url":"https://github.com/fp-ts/schema/issues"},"homepage":"https://github.com/fp-ts/schema#readme","_id":"@fp-ts/schema@0.2.0","_integrity":"sha512-t+WqpvddcLWFJ0xUI8Ey+AxehUvzWicAuHSI7EV854m6lKMzQV6aAV5/vWV7l7CMXJ3R0juWWyzQIkdEXus4/Q==","_resolved":"/tmp/dd89456325bed775d219d2dd0e43982a/fp-ts-schema-0.2.0.tgz","_from":"file:fp-ts-schema-0.2.0.tgz","_nodeVersion":"16.17.1","_npmVersion":"8.15.0","dist":{"integrity":"sha512-t+WqpvddcLWFJ0xUI8Ey+AxehUvzWicAuHSI7EV854m6lKMzQV6aAV5/vWV7l7CMXJ3R0juWWyzQIkdEXus4/Q==","shasum":"af47aa326d07bcfb770908ea780fb53ffa020bfd","tarball":"https://registry.npmjs.org/@fp-ts/schema/-/schema-0.2.0.tgz","fileCount":158,"unpackedSize":579550,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC0qn6vpEXKJ31C0N7N6Qm8/gW1pzLaz88lw9svYJ9jjAIhAIbTYXCSK8QOyMG5FtCMMeAltDJJs/wQu6aiZCE/16pJ"}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJj76RFACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmpYlg/+P2YhqSRCLUVkEdAAteRhMoWCjoQ2xdwG1Cph1lgG0KRD8iiV\r\n8nqj4dDLSD/Khy9m2g71BNxWhR8+xCSTsZ3wHneqX8+0CjXuV3mYtVOuY2TG\r\nCktOdWEzA16C0Bbu+3VnRp6MZjzrZIVYQatpiui3VHKFpkpKYbh4AzKdS4t9\r\nijVM8goCTtmM4a1T6dJHum3T3eGMdYob6NtcPuz0lPQXNmma75K61F38byve\r\nRvFbxFCUv3RnRPKWwBKLjH1ZkZaRJzrjhh8vXJHDJ+MD6/KL2bcnHDAJBuLU\r\nTWZDc21v22FnLManwm7eRsrRNlUFUK6ngpR+9nJqwv4akuIhbj51Ahz4ZOoO\r\n4LHzj1zLC2e0dBkcC3bTflrQ9TCj3Z51q1r41kyFQs3AoZ4AizO4FfY3OtYQ\r\n5nAD7Ggfnb7z6NrZ6SnjA04wnqcu26QlYh3rSxeZgVPGFNR7NAPNR6Y7QGKO\r\nP4iNaKmEmravzTS2aTuc3kwJUwYDV8HK8MXVCYbh05ARgmDdnyK/7CME3T8+\r\nVVVytghrcSPydZRzq0RznMIh11ZlBVQx8fuJtFrgc4rBxB9qvAR9FJDXSJU5\r\nfQ+c3rqsCoVrbihYNO3Slu7gAfd159yYrvJ+WS6dfvdaoTlmItykMb/26zkC\r\nZ0cY7JbeIZAzjegyFqddOvMGGuFgtgCeu7A=\r\n=yH36\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"fp-ts-bot","email":"ma+fp-ts-bot@matechs.com"},"directories":{},"maintainers":[{"name":"fp-ts-bot","email":"ma+fp-ts-bot@matechs.com"},{"name":"michael.arnaldi","email":"ma+npm@matechs.com"},{"name":"gcanti","email":"giulio.canti@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/schema_0.2.0_1676649541511_0.17691185408876953"},"_hasShrinkwrap":false},"0.2.1":{"name":"@fp-ts/schema","version":"0.2.1","license":"MIT","repository":{"type":"git","url":"git+https://github.com/fp-ts/schema.git"},"dependencies":{"@effect/data":"~0.1.2","@fp-ts/core":"~0.2.1","fast-check":"^3.6.3"},"main":"./index.js","publishConfig":{"access":"public"},"sideEffects":[],"exports":{".":{"import":{"types":"./index.d.ts","default":"./_mjs/index.mjs"},"require":{"types":"./index.d.ts","default":"./index.js"}},"./*":{"import":{"types":"./*.d.ts","default":"./_mjs/*.mjs"},"require":{"types":"./*.d.ts","default":"./*.js"}}},"types":"./index.d.ts","description":"<h3 align=\"center\">   <a href=\"https://fp-ts.github.io/schema/\">     <img src=\"./docs/example.png\" width=\"500\">   </a> </h3>","bugs":{"url":"https://github.com/fp-ts/schema/issues"},"homepage":"https://github.com/fp-ts/schema#readme","_id":"@fp-ts/schema@0.2.1","_integrity":"sha512-SIsyuUFmRvyWyz8PEtC21jWKjxV78QzxJ41ltlrGkpYQaEwMooWdzkQHESKaiR9R8ATu21dw6KQD+aEelw0dJA==","_resolved":"/tmp/2493c6116795d6429262c085c20d3241/fp-ts-schema-0.2.1.tgz","_from":"file:fp-ts-schema-0.2.1.tgz","_nodeVersion":"16.17.1","_npmVersion":"8.15.0","dist":{"integrity":"sha512-SIsyuUFmRvyWyz8PEtC21jWKjxV78QzxJ41ltlrGkpYQaEwMooWdzkQHESKaiR9R8ATu21dw6KQD+aEelw0dJA==","shasum":"fd6d8033aa9fa78f9a6ce2fd4222c0c3b990c8c2","tarball":"https://registry.npmjs.org/@fp-ts/schema/-/schema-0.2.1.tgz","fileCount":158,"unpackedSize":588039,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC9LnFev/XRqYj6ASJZYekAQ1c+yUzNWWMiTwS4fJs2agIhAMAxqtxfmpCLFdWorrIAi1XUEjIGXl4uP4bfKa2QwRlj"}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJj9PnBACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmrg5A/+P6DYwVhgemxBzXJJ6KdDJI9i9+CzIbFmCpnRLS9Ww0M949Yp\r\nBBx1A7vBlIDEcRHE7pE3CWGlQ3caCUcXdehmBLOuJmAv2yvzUXFmPN464CRa\r\n7Uo9ZZ0osM9rzu7LDLEa08dVQgrrrbuobWqGc46ONid4dvQ9RrXa/b2W98nu\r\nvt7BEPWnq0d8S7U4KFdonHECXFKD7uXHyYqZKGJ8APsKo/sn0Jnt4hfkyBpm\r\nZ/t5UoaWNVoQJ0jHSQXHNRXM3O1j5JRpPX37S+tMZgux7DK7jjos81m5GWcw\r\n/USA/QCELuBvFWIdssFKHFwyKtWurKy6vdRaBXwLm3rg2lMXguNQR0Sr82Yr\r\nImYP1k5osPzAzL/q4ABDBiS8MI0w1jqrwbd+3oD2YF8qwBShvSlKpnVe8w5b\r\nazB6HqKWaB+VLjSpeT2C3AVMVSh7sy1g5wG7b8HCLqvBNOaK1USbHxJNSINv\r\nNtGunOyinymhg5a4ZuxHxTn4p3QQO409EcgSCLvWQcoqxcgJWAwDOTeqlYaR\r\nh3pljq+Ofl5qGapAKrXYDw8rxe3lXu1zFuUbhM1VXOq39Ybxvv4EJ0563PT+\r\naqHysdOqJhF9QBnN/gGZBT60hrzTSLOPJ6rDDv+zoCYWfakUovz1qQxg5dsT\r\niU6RLMSZS28+PqhCseMjvkYqZTOxTD4hfBA=\r\n=f3dT\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"fp-ts-bot","email":"ma+fp-ts-bot@matechs.com"},"directories":{},"maintainers":[{"name":"fp-ts-bot","email":"ma+fp-ts-bot@matechs.com"},{"name":"michael.arnaldi","email":"ma+npm@matechs.com"},{"name":"gcanti","email":"giulio.canti@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/schema_0.2.1_1676999105295_0.4566253255036876"},"_hasShrinkwrap":false},"0.3.0":{"name":"@fp-ts/schema","version":"0.3.0","license":"MIT","repository":{"type":"git","url":"git+https://github.com/fp-ts/schema.git"},"dependencies":{"@effect/data":"~0.2.0","fast-check":"^3.6.3"},"main":"./index.js","publishConfig":{"access":"public"},"sideEffects":[],"exports":{".":{"import":{"types":"./index.d.ts","default":"./_mjs/index.mjs"},"require":{"types":"./index.d.ts","default":"./index.js"}},"./*":{"import":{"types":"./*.d.ts","default":"./_mjs/*.mjs"},"require":{"types":"./*.d.ts","default":"./*.js"}}},"types":"./index.d.ts","description":"<h3 align=\"center\">   <a href=\"https://fp-ts.github.io/schema/\">     <img src=\"./docs/example.png\" width=\"500\">   </a> </h3>","bugs":{"url":"https://github.com/fp-ts/schema/issues"},"homepage":"https://github.com/fp-ts/schema#readme","_id":"@fp-ts/schema@0.3.0","_integrity":"sha512-MOZbHWlgwRm9javAbnKrmODAfpuY7xO02Z3tVDGFs/gf1MzrSIv7SS9dZBDv1bqEYs2j7KtbZ6b+G2iJrgakyA==","_resolved":"/tmp/f73584f7324d93712c0769ea4e9da34e/fp-ts-schema-0.3.0.tgz","_from":"file:fp-ts-schema-0.3.0.tgz","_nodeVersion":"16.17.1","_npmVersion":"8.15.0","dist":{"integrity":"sha512-MOZbHWlgwRm9javAbnKrmODAfpuY7xO02Z3tVDGFs/gf1MzrSIv7SS9dZBDv1bqEYs2j7KtbZ6b+G2iJrgakyA==","shasum":"a30eef9aca3e00a5e081c2270cc7c8f4e3091c1f","tarball":"https://registry.npmjs.org/@fp-ts/schema/-/schema-0.3.0.tgz","fileCount":158,"unpackedSize":590026,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDvP2k6wMzhDCnaJS/Ge7Y/JCQHQe5vNc2jkCNF/aKO9AiBb/wHZXIAaam0n6Uw5uMtvbJv3L7cO0izuHycnVYu9nw=="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJj9hYPACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmoA7Q/9GegQlPgZUFn50YKKgGcyOJ05ZZs9dGjE3c0SpFOEylBDE0bf\r\nMcywBIzE5inwvnm/TV1Rk8GU1KF1bw0iRl/g6FKIIrGhU8KSl70x8RWb5SHE\r\nE7AsDH4htdQPJn69LINr/4HH8vGgRziZRPHJW6Abon0Dwmd3Te/moA/0xhhd\r\nhtlNgWr+9Fldz5FiaAQq8Z0ACtFqn+GSn2sVAWTLbNHMt4j8D9+BpZMVyscj\r\nW4Ux/agCC+pOgvJgCYwfX77aWFQbdOOFYqLIai5lopGSU70kJCyEO6rmD45x\r\nGY6rxlM9saGYKaPyZ7Jce1W1nZ/GGRqfiyg8Hxtlee2in/S1iiRz/y739luu\r\ng2feTDoD7P72T47Vz31lR75gP6dqvJ1qVxzDgFQDbhwxI9PAD7HTZk52LkkP\r\nDz8Sn7282xiopUITsc1fDqjDUAVlNateHMPSID8vZr4kt2xtemgpAUw/9v2M\r\nvnRUaSZ3gLdtsO69gxMDsCH8YvelX6z4ObFfrB9Whp7+lLkqrW1CrMKZxSru\r\nfPzDU+8XY9RsMOF3/s4ktomf/cjVM0tXS+0GqbeBSwof805Ev9fUPcUdzB3/\r\nzigC8AGD7ldCVwsXssUn16NmW0VZdCWyJM7JLfp92qWl5Btja8OnpmHmFtrj\r\nyVjtO1W/b1FhjyEGlg72w6ZzeAckjiGvCD0=\r\n=j7Bh\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"fp-ts-bot","email":"ma+fp-ts-bot@matechs.com"},"directories":{},"maintainers":[{"name":"fp-ts-bot","email":"ma+fp-ts-bot@matechs.com"},{"name":"michael.arnaldi","email":"ma+npm@matechs.com"},{"name":"gcanti","email":"giulio.canti@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/schema_0.3.0_1677071887747_0.2725350035412355"},"_hasShrinkwrap":false},"0.3.1":{"name":"@fp-ts/schema","version":"0.3.1","license":"MIT","repository":{"type":"git","url":"git+https://github.com/fp-ts/schema.git"},"dependencies":{"@effect/data":"~0.2.0","fast-check":"^3.6.3"},"main":"./index.js","publishConfig":{"access":"public"},"sideEffects":[],"exports":{".":{"import":{"types":"./index.d.ts","default":"./_mjs/index.mjs"},"require":{"types":"./index.d.ts","default":"./index.js"}},"./*":{"import":{"types":"./*.d.ts","default":"./_mjs/*.mjs"},"require":{"types":"./*.d.ts","default":"./*.js"}}},"types":"./index.d.ts","description":"<h3 align=\"center\">   <a href=\"https://fp-ts.github.io/schema/\">     <img src=\"./docs/example.png\" width=\"500\">   </a> </h3>","bugs":{"url":"https://github.com/fp-ts/schema/issues"},"homepage":"https://github.com/fp-ts/schema#readme","_id":"@fp-ts/schema@0.3.1","_integrity":"sha512-7J/h3JwLv/kATBxLAe04YXADx/3dBappy7HQT+9nX79FB38xZT/5uvD3NB8hnDMm4L3Ro5uynWzVawvV2gK9Vg==","_resolved":"/tmp/068a8c023b96a958817869b4089a1656/fp-ts-schema-0.3.1.tgz","_from":"file:fp-ts-schema-0.3.1.tgz","_nodeVersion":"16.17.1","_npmVersion":"8.15.0","dist":{"integrity":"sha512-7J/h3JwLv/kATBxLAe04YXADx/3dBappy7HQT+9nX79FB38xZT/5uvD3NB8hnDMm4L3Ro5uynWzVawvV2gK9Vg==","shasum":"844ca5ce3b62d873fb1423bc0fbc79fe4150bd35","tarball":"https://registry.npmjs.org/@fp-ts/schema/-/schema-0.3.1.tgz","fileCount":158,"unpackedSize":589784,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCzVQPrSYyr6fL1UmUQqtGzpXvCXnU6wwuBKEFo1kysrgIhALb8sb41V+Sp3Z+DtuCU7AH62X2W8XwbfbKrn0JHJYjh"}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJj+eNnACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmokcg//YJ93ilSp6fCtYcess/dHHZfKu5xhsievim5f0eFqE1g4dsAv\r\n2MV/x0p2BADhRNdBIDz/AzJQdDfuROQgVooL91s/O2DgOzqhHifKdf9p2P0v\r\nZgnHMBSZD/0DbVPqAF4e3r0WQwPh0s1bx5cjvu0KNZzByy2EIihKGQBLwwuP\r\nkiNxhpf2NIWVkzEdPQ3TG2Hxp0NP9tVlG0Yx/qlB3Erlw6wryy9UHc5CLvCY\r\nc2/gM+KiRF07ZyeyyK5F6eKHsbSSUfNIaY+wXESzRZbh4a26IyBl+S0EEZHq\r\nIQzBeDZffBPYBeVK5JNl4mfWRLPYlGpdIsezrRipaxnfkadIImxjckKYi3sm\r\nZHcoFllN3GaRQLLlqESwIEOcz1xFhyjSYgtYY0SD+/t+hWRFvaRw/+IhLQvv\r\nSqGD0iiM6PCwTthQgK57nlKRwPCbA3zrkoihL0XyMdY22H5v/TjJZTskPqIF\r\ny+OJ8dKA96ScjyOKnt1jdvpblwnHHR6WMYcxsrg5EU2b0A5gZPkfnU5o7DJ0\r\nBMS/7tVlASM2jDFWIXE3XZK4qDPT/X/fUbmTZQuDsm+yjupYvbP4+IAKjN4C\r\n/lp2jtKgsSzE8P+d9HW6cV/PT0jQ0lzyYWLgi65i3TqDVc8tTJ9WePW0w3WC\r\nNpBvGtcHdKALddNZy4dL8W61h+zl7676QxI=\r\n=zngM\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"fp-ts-bot","email":"ma+fp-ts-bot@matechs.com"},"directories":{},"maintainers":[{"name":"fp-ts-bot","email":"ma+fp-ts-bot@matechs.com"},{"name":"michael.arnaldi","email":"ma+npm@matechs.com"},{"name":"gcanti","email":"giulio.canti@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/schema_0.3.1_1677321063251_0.4244954980676776"},"_hasShrinkwrap":false},"0.3.2":{"name":"@fp-ts/schema","version":"0.3.2","license":"MIT","repository":{"type":"git","url":"git+https://github.com/fp-ts/schema.git"},"dependencies":{"@effect/data":"~0.2.0","fast-check":"^3.6.3"},"main":"./index.js","publishConfig":{"access":"public"},"sideEffects":[],"exports":{".":{"import":{"types":"./index.d.ts","default":"./_mjs/index.mjs"},"require":{"types":"./index.d.ts","default":"./index.js"}},"./*":{"import":{"types":"./*.d.ts","default":"./_mjs/*.mjs"},"require":{"types":"./*.d.ts","default":"./*.js"}}},"types":"./index.d.ts","description":"<h3 align=\"center\">   <a href=\"https://fp-ts.github.io/schema/\">     <img src=\"./docs/example.png\" width=\"500\">   </a> </h3>","bugs":{"url":"https://github.com/fp-ts/schema/issues"},"homepage":"https://github.com/fp-ts/schema#readme","_id":"@fp-ts/schema@0.3.2","_integrity":"sha512-DTWpgptOjnqEJxiif4Q8DDE6/8k7dx8Q+bJe/PMs+EiSvn62CXli4I6jBZHymL9+YJ35ezeK9zHa9Y2cQIOYwQ==","_resolved":"/tmp/34615ec5aa01534769fbc53fe4827b4d/fp-ts-schema-0.3.2.tgz","_from":"file:fp-ts-schema-0.3.2.tgz","_nodeVersion":"16.17.1","_npmVersion":"8.15.0","dist":{"integrity":"sha512-DTWpgptOjnqEJxiif4Q8DDE6/8k7dx8Q+bJe/PMs+EiSvn62CXli4I6jBZHymL9+YJ35ezeK9zHa9Y2cQIOYwQ==","shasum":"354e31f7ff1446df55b7c1d3006d9a5bab8e701b","tarball":"https://registry.npmjs.org/@fp-ts/schema/-/schema-0.3.2.tgz","fileCount":158,"unpackedSize":600070,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCozmjGXQYPBrMMrth9dCAAVJAEiVoknEXKg2sCftPXVQIhAPe5xJR9h+Z5Ts9ZeWpgGEJEdvU9YG/Wycm8V/AhF715"}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJj/LYyACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmrXTw//fQ1r4DD0a/5g4SJqB8eI9dMgjSQAsbAUmSBx8QSUmiAOKgPe\r\nV+O4sCW+Z1I+U8NJuqCpp8cFKznD6SOjJzjQzg3KTFy9qCYfk35uC2TVi80z\r\nDcYI2laMvVtMDFOPJoVmH7JuoE61kNP0eXv9U6xIGkkncOYTYkgkXwy5ca7l\r\nVSxwqkiVS5Mujodp5euPDIgTLNLyBqtkiDgPyNVmL9MbGMiLGZRsajZMJNz3\r\nNp/BH7R1ezhYUzIBBkyHMa8N/3jXgmrUAZDyEkJny5BxP1p+HJZZ+SFrqg7m\r\n++qPGtMisXp4v4vAVaJhp7M5scrq6PRrxRaRF6zVYosVnZPAfMmXFaWOLuLQ\r\nAFh//Fk4BpNigZSd4WMtvmfRT36xCNDN2Nejk3BP0QkAODXoxxQRaQWEdIvJ\r\n6HdHkhY5R1zaN/epeXPthxuaiXtJ/57C/jbso4tS6Yy303jceOVSIrtNEWm3\r\nCvPQkr62lBXLoj2Bj3jonFaf67VeDod7ejXsfi7VaYe3hkVne0kY5q/5kxF9\r\nxv+VTuUEvHTWb4r9CVRDz8BNTPUBiUyb+X/+xWUXLxyiFMhC/dpwbMpkhaeO\r\nzsLS7G1dmmS7UQAXyDpj95x6pZjjuHm/610ScNxNyjgGKeqbZ6tL03NiN3Eo\r\nD3jJZd/r9/aKkzzx95k0x2JpfhZvI7rJZoo=\r\n=PjXq\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"fp-ts-bot","email":"ma+fp-ts-bot@matechs.com"},"directories":{},"maintainers":[{"name":"fp-ts-bot","email":"ma+fp-ts-bot@matechs.com"},{"name":"michael.arnaldi","email":"ma+npm@matechs.com"},{"name":"gcanti","email":"giulio.canti@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/schema_0.3.2_1677506098648_0.2947983357944739"},"_hasShrinkwrap":false}},"time":{"created":"2022-12-06T00:07:06.176Z","0.0.1":"2022-12-06T00:07:06.427Z","modified":"2023-02-27T13:54:59.010Z","0.0.2":"2022-12-06T18:23:00.262Z","0.0.3":"2022-12-06T19:13:59.713Z","0.0.4":"2022-12-07T02:00:45.683Z","0.0.5":"2022-12-07T10:41:03.004Z","0.0.6":"2022-12-20T18:02:58.950Z","0.0.7":"2022-12-29T12:34:59.355Z","0.0.8":"2023-01-13T16:55:48.617Z","0.1.0":"2023-01-25T13:35:35.118Z","0.1.1":"2023-01-25T22:15:32.664Z","0.1.2":"2023-01-26T14:38:44.729Z","0.1.3":"2023-01-27T07:13:01.309Z","0.2.0":"2023-02-17T15:59:01.702Z","0.2.1":"2023-02-21T17:05:05.537Z","0.3.0":"2023-02-22T13:18:07.883Z","0.3.1":"2023-02-25T10:31:03.407Z","0.3.2":"2023-02-27T13:54:58.826Z"},"maintainers":[{"name":"fp-ts-bot","email":"ma+fp-ts-bot@matechs.com"},{"name":"michael.arnaldi","email":"ma+npm@matechs.com"},{"name":"gcanti","email":"giulio.canti@gmail.com"}],"description":"<h3 align=\"center\">   <a href=\"https://fp-ts.github.io/schema/\">     <img src=\"./docs/example.png\" width=\"500\">   </a> </h3>","homepage":"https://github.com/fp-ts/schema#readme","repository":{"type":"git","url":"git+https://github.com/fp-ts/schema.git"},"bugs":{"url":"https://github.com/fp-ts/schema/issues"},"license":"MIT","readme":"<h3 align=\"center\">\n  <a href=\"https://fp-ts.github.io/schema/\">\n    <img src=\"./docs/example.png\" width=\"500\">\n  </a>\n</h3>\n\n<p align=\"center\">\nModeling the schema of data structures as first-class values\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.npmjs.com/package/@fp-ts/schema\">\n    <img src=\"https://img.shields.io/npm/dm/@fp-ts/schema.svg\" alt=\"npm downloads\" height=\"20\">\n  </a>\n</p>\n\n# Introduction\n\nWelcome to the documentation for `@fp-ts/schema`, **a library for defining and using schemas** to validate and transform data in TypeScript.\n\n`@fp-ts/schema` allows you to define a `Schema` that describes the structure and data types of a piece of data, and then use that `Schema` to perform various operations such as **decoding** from `unknown`, **encoding** to `unknown`, **verifying** that a value conforms to a given `Schema`.\n\n`@fp-ts/schema` also provides a number of other features, including the ability to derive various artifacts such as `Arbitrary`s, `JSONSchema`s, and `Pretty`s from a `Schema`, as well as the ability to customize the library through the use of custom artifact compilers and custom `Schema` combinators.\n\nIf you're eager to learn how to define your first schema, jump straight to the [**Basic usage**](https://github.com/fp-ts/schema#basic-usage) section!\n\n# Credits and sponsorship\n\nThis library was inspired by the following projects:\n\n- [io-ts](https://github.com/gcanti/io-ts)\n- [zod](https://github.com/colinhacks/zod)\n- [zio-schema](https://github.com/zio/zio-schema)\n\nA huge thanks to my sponsors who made the development of `@fp-ts/schema` possible.\n\nIf you also want to **become a sponsor** to ensure this library continues to improve and receive maintenance, check out my [GitHub Sponsors profile](https://github.com/sponsors/gcanti?o=sd&sc=t)\n\n## Requirements\n\n- TypeScript 4.7 or newer\n- The `strict` flag enabled in your `tsconfig.json` file\n- The `exactOptionalPropertyTypes` flag enabled in your `tsconfig.json` file\n\n```\n{\n  // ...\n  \"compilerOptions\": {\n    // ...\n    \"strict\": true,\n    \"exactOptionalPropertyTypes\": true\n  }\n}\n```\n\n## Getting started\n\nTo install the **alpha** version:\n\n```\nnpm install @fp-ts/schema\n```\n\n**Warning**. This package is primarily published to receive early feedback and for contributors, during this development phase we cannot guarantee the stability of the APIs, consider each release to contain breaking changes.\n\nOnce you have installed the library, you can import the necessary types and functions from the `@fp-ts/schema` module.\n\n```ts\nimport * as S from \"@fp-ts/schema\";\n```\n\n## Defining a schema\n\nTo define a `Schema`, you can use the provided `struct` function to define a new `Schema` that describes an object with a fixed set of properties. Each property of the object is described by a `Schema`, which specifies the data type and validation rules for that property.\n\nFor example, consider the following `Schema` that describes a person object with a `name` property of type `string` and an `age` property of type `number`:\n\n```ts\nimport * as S from \"@fp-ts/schema\";\n\nconst Person = S.struct({\n  name: S.string,\n  age: S.number,\n});\n```\n\nYou can also use the `union` function to define a `Schema` that describes a value that can be one of a fixed set of types. For example, the following `Schema` describes a value that can be either a `string` or a `number`:\n\n```ts\nconst StringOrNumber = S.union(S.string, S.number);\n```\n\nIn addition to the provided `struct` and `union` functions, `@fp-ts/schema` also provides a number of other functions for defining `Schema`s, including functions for defining arrays, tuples, and records.\n\n## Extracting the inferred type\n\nOnce you have defined a `Schema`, you can use the `Infer` type to extract the inferred type of the data described by the `Schema`.\n\nFor example, given the `Person` `Schema` defined above, you can extract the inferred type of a `Person` object as follows:\n\n```ts\ninterface Person extends S.Infer<typeof Person> {}\n/*\ninterface Person {\n  readonly name: string;\n  readonly age: number;\n}\n*/\n```\n\n## Decoding\n\nTo use the `Schema` defined above to decode a value from `unknown`, you can use the `decode` function from the `@fp-ts/schema/Parser` module:\n\n```ts\nimport * as S from \"@fp-ts/schema\";\n\nconst Person = S.struct({\n  name: S.string,\n  age: S.number,\n});\n\nconst decodePerson = S.decode(Person);\n\nconst result1 = decodePerson({ name: \"Alice\", age: 30 });\nif (S.isSuccess(result1)) {\n  console.log(result1.right); // { name: \"Alice\", age: 30 }\n}\n\nconst result2 = decodePerson(null);\nif (S.isFailure(result2)) {\n  console.log(result2.left); // [PR.type(..., null)]\n}\n```\n\nThe `decodePerson` function returns a value of type `ParseResult<A>`, which is a type alias for `Either<NonEmptyReadonlyArray<ParseError>, A>`, where `NonEmptyReadonlyArray<ParseError>` represents a list of errors that occurred during the decoding process and `A` is the inferred type of the data described by the `Schema`. A successful decode will result in a `Right`, containing the decoded data. A `Right` value indicates that the decode was successful and no errors occurred. In the case of a failed decode, the result will be a `Left` value containing a list of `ParseError`s.\n\nThe `decodeOrThrow` function is used to decode a value and throw an error if the decoding fails.\nIt is useful when you want to ensure that the value being decoded is in the correct format, and want to throw an error if it is not.\n\n```ts\ntry {\n  const person = P.decodeOrThrow(Person)({});\n  console.log(person);\n} catch (e) {\n  console.error(\"Decoding failed:\");\n  console.error(e);\n}\n/*\nDecoding failed:\n1 error(s) found\n└─ key \"name\"\n   └─ is missing\n*/\n```\n\n### Excess properties\n\nWhen using a `Schema` to decode a value, any properties that are not specified in the `Schema` will result in a decoding error. This is because the `Schema` is expecting a specific shape for the decoded value, and any excess properties do not conform to that shape.\n\nHowever, you can use the `isUnexpectedAllowed` option to allow excess properties while decoding. This can be useful in cases where you want to be permissive in the shape of the decoded value, but still want to catch any potential errors or unexpected values.\n\nHere's an example of how you might use `isUnexpectedAllowed`:\n\n```ts\nimport * as S from \"@fp-ts/schema\";\n\nconst Person = S.struct({\n  name: S.string,\n  age: S.number,\n});\n\nconsole.log(\n  \"%o\",\n  S.decode(Person)(\n    {\n      name: \"Bob\",\n      age: 40,\n      email: \"bob@example.com\",\n    },\n    { isUnexpectedAllowed: true }\n  )\n);\n/*\n{\n  _tag: 'Right',\n  right: { name: 'Bob', age: 40 }\n}\n*/\n```\n\n### All errors\n\nThe `allErrors` option is a feature that allows you to receive all decoding errors when attempting to decode a value using a schema. By default only the first error is returned, but by setting the `allErrors` option to `true`, you can receive all errors that occurred during the decoding process. This can be useful for debugging or for providing more comprehensive error messages to the user.\n\nHere's an example of how you might use `allErrors`:\n\n```ts\nimport * as S from \"@fp-ts/schema\";\n\nconst Person = S.struct({\n  name: S.string,\n  age: S.number,\n});\n\nconsole.log(\n  \"%o\",\n  S.decode(Person)(\n    {\n      name: \"Bob\",\n      age: \"abc\",\n      email: \"bob@example.com\",\n    },\n    { allErrors: true }\n  )\n);\n/*\n{\n  _tag: 'Left',\n  left: [\n    {\n      _tag: 'Key',\n      key: 'age',\n      errors: [\n        { _tag: 'Type', expected: ..., actual: 'abc' },\n        [length]: 1\n      ]\n    },\n    {\n      _tag: 'Key',\n      key: 'email',\n      errors: [\n        { _tag: 'Unexpected', actual: 'bob@example.com' },\n        [length]: 1\n      ]\n    },\n    [length]: 2\n  ]\n}\n*/\n```\n\n## Encoding\n\nTo use the `Schema` defined above to encode a value to `unknown`, you can use the `encode` function:\n\n```ts\nimport * as S from \"@fp-ts/schema\";\nimport { pipe } from \"@effect/data/Function\";\nimport { parseNumber } from \"@fp-ts/schema/data/parser\";\n\n// Age is a schema that can decode a string to a number and encode a number to a string\nconst Age = pipe(S.string, parseNumber);\n\nconst Person = S.struct({\n  name: S.string,\n  age: Age,\n});\n\nconst encoded = S.encode(Person)({ name: \"Alice\", age: 30 });\nif (S.isSuccess(encoded)) {\n  console.log(encoded.right); // { name: \"Alice\", age: \"30\" }\n}\n```\n\nNote that during encoding, the number value `30` was converted to a string `\"30\"`.\n\n## Formatting errors\n\nTo format errors when a `decode` or an `encode` function fails, you can use the `format` function from the `@fp-ts/schema/formatter/Tree` module.\n\n```ts\nimport * as S from \"@fp-ts/schema\";\nimport { formatErrors } from \"@fp-ts/schema/formatter/Tree\";\n\nconst Person = S.struct({\n  name: S.string,\n  age: S.number,\n});\n\nconst result = S.decode(Person)({});\nif (S.isFailure(result)) {\n  console.error(\"Decoding failed:\");\n  console.error(formatErrors(result.left));\n}\n/*\nDecoding failed:\n1 error(s) found\n└─ key \"name\"\n   └─ is missing\n*/\n```\n\n## Assertions\n\nThe `is` function provided by the `@fp-ts/schema/Parser` module represents a way of verifying that a value conforms to a given `Schema`. `is` is a refinement that takes a value of type `unknown` as an argument and returns a `boolean` indicating whether or not the value conforms to the `Schema`.\n\n```ts\nimport * as S from \"@fp-ts/schema\";\n\nconst Person = S.struct({\n  name: S.string,\n  age: S.number,\n});\n\n// const isPerson: (u: unknown) => u is Person\nconst isPerson = S.is(Person);\n\nconsole.log(isPerson({ name: \"Alice\", age: 30 })); // true\nconsole.log(isPerson(null)); // false\nconsole.log(isPerson({})); // false\n```\n\nThe `asserts` function takes a `Schema` and returns a function that takes an input value and checks if it matches the schema. If it does not match the schema, it throws an error with a comprehensive error message.\n\n```ts\nimport * as S from \"@fp-ts/schema\";\n\nconst Person = S.struct({\n  name: S.string,\n  age: S.number,\n});\n\n// const assertsPerson: (input: unknown) => asserts input is Person\nconst assertsPerson: S.InferAsserts<typeof Person> = P.asserts(Person);\n\ntry {\n  assertsPerson({ name: \"Alice\", age: \"30\" });\n} catch (e) {\n  console.error(\"The input does not match the schema:\");\n  console.error(e);\n}\n/*\nThe input does not match the schema:\nError: 1 error(s) found\n└─ key \"age\"\n   └─ Expected number, actual \"30\"\n*/\n\n// this will not throw an error\nassertsPerson({ name: \"Alice\", age: 30 });\n```\n\n## [fast-check](https://github.com/dubzzz/fast-check) arbitraries\n\nThe `arbitrary` function provided by the `@fp-ts/schema/Arbitrary` module represents a way of generating random values that conform to a given `Schema`. This can be useful for testing purposes, as it allows you to generate random test data that is guaranteed to be valid according to the `Schema`.\n\n```ts\nimport * as S from \"@fp-ts/schema\";\nimport * as A from \"@fp-ts/schema/Arbitrary\";\nimport * as fc from \"fast-check\";\n\nconst Person = S.struct({\n  name: S.string,\n  age: S.number,\n});\n\nconst PersonArbitrary = A.arbitrary(Person)(fc);\n\nconsole.log(fc.sample(PersonArbitrary, 2));\n/*\n[\n{ name: '!U?z/X', age: -2.5223372357846707e-44 },\n{ name: 'valukeypro', age: -1.401298464324817e-45 }\n]\n*/\n```\n\n## Pretty print\n\nThe `pretty` function provided by the `@fp-ts/schema/Pretty` module represents a way of pretty-printing values that conform to a given `Schema`.\n\nYou can use the `pretty` function to create a human-readable string representation of a value that conforms to a `Schema`. This can be useful for debugging or logging purposes, as it allows you to easily inspect the structure and data types of the value.\n\n```ts\nimport * as S from \"@fp-ts/schema\";\nimport * as P from \"@fp-ts/schema/Pretty\";\n\nconst Person = S.struct({\n  name: S.string,\n  age: S.number,\n});\n\nconst PersonPretty = P.pretty(Person);\n\n// returns a string representation of the object\nconsole.log(PersonPretty({ name: \"Alice\", age: 30 })); // `{ \"name\": \"Alice\", \"age\": 30 }`\n```\n\n# Basic usage\n\n## Primitives\n\n```ts\nimport * as S from \"@fp-ts/schema\";\n\n// primitive values\nS.string;\nS.number;\nS.bigint;\nS.boolean;\nS.symbol;\nS.object;\nS.date; // value must be a Date\n\n// empty types\nS.undefined;\nS.void; // accepts undefined\n\n// catch-all types\n// allows any value\nS.any;\nS.unknown;\n\n// never type\n// allows no values\nS.never;\n```\n\n## Literals\n\n```ts\nS.null; // same as S.literal(null)\nS.literal(\"a\");\nS.literal(\"a\", \"b\", \"c\"); // union of literals\nS.literal(1);\nS.literal(2n); // bigint literal\nS.literal(true);\n```\n\n## Template literals\n\nThe `templateLiteral` combinator allows you to create a schema for a TypeScript template literal type.\n\n```ts\n// $ExpectType Schema<`a${string}`>\nS.templateLiteral(S.literal(\"a\"), S.string);\n\n// example from https://www.typescriptlang.org/docs/handbook/2/template-literal-types.html\nconst EmailLocaleIDs = S.literal(\"welcome_email\", \"email_heading\");\nconst FooterLocaleIDs = S.literal(\"footer_title\", \"footer_sendoff\");\n\n// $ExpectType Schema<\"welcome_email_id\" | \"email_heading_id\" | \"footer_title_id\" | \"footer_sendoff_id\">\nS.templateLiteral(S.union(EmailLocaleIDs, FooterLocaleIDs), S.literal(\"_id\"));\n```\n\n## Filters\n\n**Note**. Please note that the use of filters do not alter the type of the `Schema`. They only serve to add additional constraints to the decoding process.\n\n### String filters\n\n```ts\npipe(S.string, S.maxLength(5));\npipe(S.string, S.minLength(5));\npipe(S.string, nonEmpty()); // same as S.minLength(1)\npipe(S.string, S.length(5));\npipe(S.string, S.pattern(regex));\npipe(S.string, S.startsWith(string));\npipe(S.string, S.endsWith(string));\npipe(S.string, S.includes(searchString));\npipe(S.string, S.trimmed()); // verifies that a string contains no leading or trailing whitespaces\n```\n\n**Note**: The `trimmed` combinator does not make any transformations, it only validates. If what you were looking for was a combinator to trim strings, then check out the `trim` combinator.\n\n### Number filters\n\n```ts\npipe(S.number, S.greaterThan(5));\npipe(S.number, S.greaterThanOrEqualTo(5));\npipe(S.number, S.lessThan(5));\npipe(S.number, S.lessThanOrEqualTo(5));\npipe(S.number, S.between(-2, 2)); // -2 <= x <= 2\n\npipe(S.number, S.int()); // value must be an integer\n\npipe(S.number, S.nonNaN()); // not NaN\npipe(S.number, S.finite()); // ensures that the value being decoded is finite and not equal to Infinity or -Infinity\n\npipe(S.number, S.positive()); // > 0\npipe(S.number, S.nonNegative()); // >= 0\npipe(S.number, S.negative()); // < 0\npipe(S.number, S.nonPositive()); // <= 0\n```\n\n### Bigint filters\n\n```ts\nimport * as B from \"@fp-ts/schema/data/Bigint\";\n\npipe(S.bigint, B.greaterThan(5n));\npipe(S.bigint, B.greaterThanOrEqualTo(5n));\npipe(S.bigint, B.lessThan(5n));\npipe(S.bigint, B.lessThanOrEqualTo(5n));\npipe(S.bigint, B.between(-2n, 2n)); // -2n <= x <= 2n\n\npipe(S.bigint, B.positive()); // > 0n\npipe(S.bigint, B.nonNegative()); // >= 0n\npipe(S.bigint, B.negative()); // < 0n\npipe(S.bigint, B.nonPositive()); // <= 0n\n```\n\n### Array filters\n\n```ts\npipe(S.array(S.number), A.maxItems(2)); // max array length\npipe(S.array(S.number), A.minItems(2)); // min array length\npipe(S.array(S.number), A.itemsCount(2)); // exact array length\n```\n\n## Native enums\n\n```ts\nenum Fruits {\n  Apple,\n  Banana,\n}\n\n// $ExpectType Schema<Fruits>\nS.enums(Fruits);\n```\n\n## Nullables\n\n```ts\n// $ExpectType Schema<string | null>\nS.nullable(S.string);\n```\n\n## Unions\n\n`@fp-ts/schema` includes a built-in `union` combinator for composing \"OR\" types.\n\n```ts\n// $ExpectType Schema<string | number>\nS.union(S.string, S.number);\n```\n\n### Discriminated unions\n\nTypeScript reference: https://www.typescriptlang.org/docs/handbook/2/narrowing.html#discriminated-unions\n\nDiscriminated unions in TypeScript are a way of modeling complex data structures that may take on different forms based on a specific set of conditions or properties. They allow you to define a type that represents multiple related shapes, where each shape is uniquely identified by a shared discriminant property.\n\nIn a discriminated union, each variant of the union has a common property, called the discriminant. The discriminant is a literal type, which means it can only have a finite set of possible values. Based on the value of the discriminant property, TypeScript can infer which variant of the union is currently in use.\n\nHere is an example of a discriminated union in TypeScript:\n\n```ts\ntype Circle = {\n  readonly kind: \"circle\";\n  readonly radius: number;\n};\n\ntype Square = {\n  readonly kind: \"square\";\n  readonly sideLength: number;\n};\n\ntype Shape = Circle | Square;\n```\n\nThis code defines a discriminated union using the `@fp-ts/schema` library:\n\n```ts\nimport * as S from \"@fp-ts/schema\";\n\nconst Circle = S.struct({\n  kind: S.literal(\"circle\"),\n  radius: S.number,\n});\n\nconst Square = S.struct({\n  kind: S.literal(\"square\"),\n  sideLength: S.number,\n});\n\nconst Shape = S.union(Circle, Square);\n```\n\nThe `literal` combinator is used to define the discriminant property with a specific string literal value.\n\nTwo structs are defined for `Circle` and `Square`, each with their own properties. These structs represent the variants of the union.\n\nFinally, the `union` combinator is used to create a schema for the discriminated union `Shape`, which is a union of `Circle` and `Square`.\n\n### How to transform a simple union into a discriminated union\n\nIf you're working on a TypeScript project and you've defined a simple union to represent a particular input, you may find yourself in a situation where you're not entirely happy with how it's set up. For example, let's say you've defined a `Shape` union as a combination of `Circle` and `Square` without any special property:\n\n```ts\nimport * as S from \"@fp-ts/schema\";\n\nconst Circle = S.struct({\n  radius: S.number,\n});\n\nconst Square = S.struct({\n  sideLength: S.number,\n});\n\nconst Shape = S.union(Circle, Square);\n```\n\nTo make your code more manageable, you may want to transform the simple union into a discriminated union. This way, TypeScript will be able to automatically determine which member of the union you're working with based on the value of a specific property.\n\nTo achieve this, you can add a special property to each member of the union, which will allow TypeScript to know which type it's dealing with at runtime. Here's how you can transform the `Shape` schema into another schema that represents a discriminated union:\n\n```ts\nimport * as S from \"@fp-ts/schema\";\nimport { pipe } from \"@effect/data/Function\";\n\nconst Circle = S.struct({\n  radius: S.number,\n});\n\nconst Square = S.struct({\n  sideLength: S.number,\n});\n\nconst DiscriminatedShape = S.union(\n  pipe(\n    Circle,\n    S.transform(\n      pipe(Circle, S.extend(S.struct({ kind: S.literal(\"circle\") }))), // Add a \"kind\" property with the literal value \"circle\" to Circle\n      (circle) => ({ ...circle, kind: \"circle\" as const }), // Add the discriminant property to Circle\n      ({ kind: _kind, ...rest }) => rest // Remove the discriminant property\n    )\n  ),\n  pipe(\n    Square,\n    S.transform(\n      pipe(Square, S.extend(S.struct({ kind: S.literal(\"square\") }))), // Add a \"kind\" property with the literal value \"square\" to Square\n      (square) => ({ ...square, kind: \"square\" as const }), // Add the discriminant property to Square\n      ({ kind: _kind, ...rest }) => rest // Remove the discriminant property\n    )\n  )\n);\n\nexpect(S.decodeOrThrow(DiscriminatedShape)({ radius: 10 })).toEqual({\n  kind: \"circle\",\n  radius: 10,\n});\n\nexpect(S.decodeOrThrow(DiscriminatedShape)({ sideLength: 10 })).toEqual({\n  kind: \"square\",\n  sideLength: 10,\n});\n```\n\nIn this example, we use the `extend` function to add a \"kind\" property with a literal value to each member of the union. Then we use `transform` to add the discriminant property and remove it afterwards. Finally, we use `union` to combine the transformed schemas into a discriminated union.\n\nHowever, when we use the schema to encode a value, we want the output to match the original input shape. Therefore, we must remove the discriminant property we added earlier from the encoded value to match the original shape of the input.\n\nThe previous solution works perfectly and shows how we can add and remove properties to our schema at will, making it easier to consume the result within our domain model. However, it requires a lot of boilerplate. Fortunately, there is an API called `attachPropertySignature` designed specifically for this use case, which allows us to achieve the same result with much less effort:\n\n```ts\nconst Circle = S.struct({ radius: S.number });\nconst Square = S.struct({ sideLength: S.number });\nconst DiscriminatedShape = S.union(\n  pipe(Circle, S.attachPropertySignature(\"kind\", \"circle\")),\n  pipe(Square, S.attachPropertySignature(\"kind\", \"square\"))\n);\n\n// decoding\nexpect(S.decodeOrThrow(DiscriminatedShape)({ radius: 10 })).toEqual({\n  kind: \"circle\",\n  radius: 10,\n});\n\n// encoding\nexpect(\n  S.encodeOrThrow(DiscriminatedShape)({\n    kind: \"circle\",\n    radius: 10,\n  })\n).toEqual({ radius: 10 });\n```\n\n## Tuples\n\n```ts\n// $ExpectType Schema<readonly [string, number]>\nS.tuple(S.string, S.number);\n```\n\n### Append a required element\n\n```ts\n// $ExpectType Schema<readonly [string, number, boolean]>\npipe(S.tuple(S.string, S.number), S.element(S.boolean));\n```\n\n### Append an optional element\n\n```ts\n// $ExpectType Schema<readonly [string, number, boolean?]>\npipe(S.tuple(S.string, S.number), S.optionalElement(S.boolean));\n```\n\n### Append a rest element\n\n```ts\n// $ExpectType Schema<readonly [string, number, ...boolean[]]>\npipe(S.tuple(S.string, S.number), S.rest(S.boolean));\n```\n\n## Arrays\n\n```ts\n// $ExpectType Schema<readonly number[]>\nS.array(S.number);\n```\n\n### Non empty arrays\n\n```ts\n// $ExpectType Schema<readonly [number, ...number[]]>\nS.nonEmptyArray(S.number);\n```\n\n## Structs\n\n```ts\n// $ExpectType Schema<{ readonly a: string; readonly b: number; }>\nS.struct({ a: S.string, b: S.number });\n```\n\n### Optional fields\n\n```ts\n// $ExpectType Schema<{ readonly a: string; readonly b: number; readonly c?: boolean; }>\nS.struct({ a: S.string, b: S.number, c: S.optional(S.boolean) });\n```\n\n**Note**. The `optional` constructor only exists to be used in combination with the `struct` API to signal an optional field and does not have a broader meaning. This means that it is only allowed to use it as an outer wrapper of a `Schema` and **it cannot be followed by other combinators**, for example this type of operation is prohibited:\n\n```ts\nS.struct({\n  // the use of S.optional should be the last step in the pipeline and not preceeded by other combinators like S.nullable\n  c: pipe(S.boolean, S.optional, S.nullable), // type checker error\n});\n```\n\nand it must be rewritten like this:\n\n```ts\nS.struct({\n  c: pipe(S.boolean, S.nullable, S.optional), // ok\n});\n```\n\n### Access the schema for a particular key\n\nThe `getPropertySignatures` function takes a `Schema<A>` and returns a new object of type `{ [K in keyof A]: Schema<A[K]> }`. The new object has properties that are the same keys as those in the original object, and each of these properties is a schema for the corresponding property in the original object.\n\n```ts\nimport * as S from \"@fp-ts/schema\";\n\nconst Person = S.struct({\n  name: S.string,\n  age: S.number,\n});\n\n// get the schema for each property of `Person`\nconst shape = S.getPropertySignatures(Person);\n\nshape.name; // S.string\nshape.age; // S.number\n```\n\n## Pick\n\n```ts\n// $ExpectType Schema<{ readonly a: string; }>\npipe(S.struct({ a: S.string, b: S.number }), S.pick(\"a\"));\n```\n\n## Omit\n\n```ts\n// $ExpectType Schema<{ readonly b: number; }>\npipe(S.struct({ a: S.string, b: S.number }), S.omit(\"a\"));\n```\n\n## Partial\n\n```ts\n// $ExpectType Schema<Partial<{ readonly a: string; readonly b: number; }>>\nS.partial(S.struct({ a: S.string, b: S.number }));\n```\n\n## Records\n\n### String keys\n\n```ts\n// $ExpectType Schema<{ readonly [x: string]: string; }>\nS.record(S.string, S.string);\n\n// $ExpectType Schema<{ readonly a: string; readonly b: string; }>\nS.record(S.union(S.literal(\"a\"), S.literal(\"b\")), S.string);\n```\n\n### Keys refinements\n\n```ts\n// $ExpectType Schema<{ readonly [x: string]: string; }>\nS.record(pipe(S.string, S.minLength(2)), S.string);\n```\n\n### Symbol keys\n\n```ts\n// $ExpectType Schema<{ readonly [x: symbol]: string; }>\nS.record(S.symbol, S.string);\n```\n\n### Template literal keys\n\n```ts\n// $ExpectType Schema<{ readonly [x: `a${string}`]: string; }>\nS.record(S.templateLiteral(S.literal(\"a\"), S.string), S.string);\n```\n\n## Extend\n\nThe `extend` combinator allows you to add additional fields or index signatures to an existing `Schema`.\n\n```ts\n// $ExpectType Schema<{ [x: string]: string; readonly a: string; readonly b: string; readonly c: string; }>\npipe(\n  S.struct({ a: S.string, b: S.string }),\n  S.extend(S.struct({ c: S.string })), // <= you can add more fields\n  S.extend(S.record(S.string, S.string)) // <= you can add index signatures\n);\n```\n\n## InstanceOf\n\nIn the following section, we demonstrate how to use the `instanceOf` combinator to create a `Schema` for a class instance.\n\n```ts\nclass Test {\n  constructor(readonly name: string) {}\n}\n\n// $ExpectType Schema<Test>\npipe(S.object, S.instanceOf(Test));\n```\n\n## Recursive types\n\nThe `lazy` combinator is useful when you need to define a `Schema` that depends on itself, like in the case of recursive data structures. In this example, the `Category` schema depends on itself because it has a field `subcategories` that is an array of `Category` objects.\n\n```ts\ninterface Category {\n  readonly name: string;\n  readonly subcategories: ReadonlyArray<Category>;\n}\n\nconst Category: S.Schema<Category> = S.lazy(() =>\n  S.struct({\n    name: S.string,\n    subcategories: S.array(Category),\n  })\n);\n```\n\nHere's an example of two mutually recursive schemas, `Expression` and `Operation`, that represent a simple arithmetic expression tree.\n\n```ts\ninterface Expression {\n  readonly type: \"expression\";\n  readonly value: number | Operation;\n}\n\ninterface Operation {\n  readonly type: \"operation\";\n  readonly operator: \"+\" | \"-\";\n  readonly left: Expression;\n  readonly right: Expression;\n}\n\nconst Expression: S.Schema<Expression> = S.lazy(() =>\n  S.struct({\n    type: S.literal(\"expression\"),\n    value: S.union(S.number, Operation),\n  })\n);\n\nconst Operation: S.Schema<Operation> = S.lazy(() =>\n  S.struct({\n    type: S.literal(\"operation\"),\n    operator: S.union(S.literal(\"+\"), S.literal(\"-\")),\n    left: Expression,\n    right: Expression,\n  })\n);\n```\n\n## Transformations\n\nIn some cases, we may need to transform the output of a schema to a different type. For instance, we may want to parse a string into a number, or we may want to transform a date string into a `Date` object.\n\nTo perform these kinds of transformations, the `@fp-ts/schema` library provides the `transform` and `transformOrFail` combinators.\n\nThe `transform` combinator takes a target schema, a transformation function from the source type to the target type, and a reverse transformation function from the target type back to the source type. It returns a new schema that applies the transformation function to the output of the original schema before returning it. If the original schema fails to decode a value, the transformed schema will also fail.\n\n```ts\nimport * as S from \"@fp-ts/schema\";\n\n// define a schema for the string type\nconst stringSchema: S.Schema<string> = S.string;\n\n// define a schema for a tuple with one element of type string\nconst tupleSchema: S.Schema<[string]> = S.tuple(S.string);\n\n// define a function that converts a string into a tuple with one element of type string\nconst decode = (s: string): [string] => [s];\n\n// define a function that converts a tuple with one element of type string into a string\nconst encode = ([s]: [string]): string => s;\n\n// use the transform combinator to convert the string schema into the tuple schema\nconst transformedSchema: S.Schema<[string]> = pipe(\n  stringSchema,\n  S.transform(tupleSchema, decode, encode)\n);\n```\n\nIn the example above, we defined a schema for the `string` type and a schema for the tuple type `[string]`. We also defined the functions `decode` and `encode` that convert a `string` into a tuple and a tuple into a `string`, respectively. Then, we used the `transform` combinator to convert the string schema into a schema for the tuple type `[string]`. The resulting schema can be used to decode values of type `string` into values of type `[string]`.\n\nThe `transformOrFail` combinator works in a similar way, but allows the transformation function to return a `ParseResult` object, which can either be a success or a failure.\n\nHere's an example of the `transformOrFail` combinator which converts a `string` into a `boolean`:\n\n```ts\nimport { pipe } from \"@effect/data/Function\";\nimport * as PR from \"@fp-ts/schema/ParseResult\";\nimport * as S from \"@fp-ts/schema\";\nimport * as AST from \"@fp-ts/schema/AST\";\n\n// define a schema for the string type\nconst stringSchema: S.Schema<string> = S.string;\n\n// define a schema for the boolean type\nconst booleanSchema: S.Schema<boolean> = S.boolean;\n\n// define a function that converts a string into a boolean\nconst decode = (s: string): PR.ParseResult<boolean> =>\n  s === \"true\"\n    ? PR.success(true)\n    : s === \"false\"\n    ? PR.success(false)\n    : PR.failure(\n        PR.type(AST.union([AST.literal(\"true\"), AST.literal(\"false\")]), s)\n      );\n\n// define a function that converts a boolean into a string\nconst encode = (b: boolean): ParseResult<string> => PR.success(String(b));\n\n// use the transformOrFail combinator to convert the string schema into the boolean schema\nconst transformedSchema: S.Schema<boolean> = pipe(\n  stringSchema,\n  S.transformOrFail(booleanSchema, decode, encode)\n);\n```\n\n### parseNumber\n\nTransforms a `string` into a `number` by parsing the string using `parseFloat`.\n\nThe following special string values are supported: \"NaN\", \"Infinity\", \"-Infinity\".\n\n```ts\nimport * as S from \"@fp-ts/schema\";\nimport { parseNumber } from \"@fp-ts/schema/data/parser\";\n\nconst schema = parseNumber(S.string);\nconst decodeOrThrow = S.decodeOrThrow(schema);\n\n// success cases\ndecodeOrThrow(\"1\"); // 1\ndecodeOrThrow(\"-1\"); // -1\ndecodeOrThrow(\"1.5\"); // 1.5\ndecodeOrThrow(\"NaN\"); // NaN\ndecodeOrThrow(\"Infinity\"); // Infinity\ndecodeOrThrow(\"-Infinity\"); // -Infinity\n\n// failure cases\ndecodeOrThrow(\"a\"); // throws\n```\n\n### trim\n\nThe `trim` parser allows removing whitespaces from the beginning and end of a string.\n\n```ts\nimport * as S from \"@fp-ts/schema\";\n\nconst schema = S.trim(S.string);\nconst decodeOrThrow = S.decodeOrThrow(schema);\n\ndecodeOrThrow(\"a\"); // \"a\"\ndecodeOrThrow(\" a\"); // \"a\"\ndecodeOrThrow(\"a \"); // \"a\"\ndecodeOrThrow(\" a \"); // \"a\"\n```\n\n**Note**. If you were looking for a combinator to check if a string is trimmed, check out the `trimmed` combinator.\n\n### parseDate\n\nTransforms a `string` into a `Date` by parsing the string using `Date.parse`.\n\n```ts\nimport * as S from \"@fp-ts/schema\";\nimport { parseDate } from \"@fp-ts/schema/data/parser\";\n\nconst schema = parseDate(S.string);\nconst decodeOrThrow = S.decodeOrThrow(schema);\n\ndecodeOrThrow(\"1970-01-01T00:00:00.000Z\"); // new Date(0)\n\ndecodeOrThrow(\"a\"); // throws\n```\n\n## Option\n\nThe `option` combinator allows you to specify that a field in a schema may be either an optional value or `null`. This is useful when working with JSON data that may contain `null` values for optional fields.\n\nIn the example below, we define a schema for an object with a required `a` field of type `string` and an optional `b` field of type `number`. We use the `option` combinator to specify that the `b` field may be either a `number` or `null`.\n\n```ts\nimport * as S from \"@fp-ts/schema\";\nimport * as O from \"@effect/data/Option\";\n\nconst schema = S.struct({\n  a: S.string,\n  // define a schema for Option with number values\n  b: S.option(S.number),\n});\nconst decodeOrThrow = S.decodeOrThrow(schema);\n\ndecodeOrThrow({ a: \"hello\", b: null }); // { a: \"hello\", b: O.none }\n\ndecodeOrThrow({ a: \"hello\", b: 1 }); // { a: \"hello\", b: O.some(1) }\n```\n\n## ReadonlySet\n\nIn the following section, we demonstrate how to use the `fromValues` combinator to decode a `ReadonlySet` from an array of values.\n\n```ts\nimport * as S from \"@fp-ts/schema\";\nimport { fromValues } from \"@fp-ts/schema/data/ReadonlySet\";\n\n// define a schema for ReadonlySet with number values\nconst schema = fromValues(S.number);\nconst decodeOrThrow = P.decodeOrThrow(schema);\n\ndecodeOrThrow([1, 2, 3]); // new Set([1, 2, 3])\n```\n\n## ReadonlyMap\n\nIn the following section, we demonstrate how to use the `fromEntries` combinator to decode a `ReadonlyMap` from an array of entries.\n\n```ts\nimport * as S from \"@fp-ts/schema\";\nimport { fromEntries } from \"@fp-ts/schema/data/ReadonlyMap\";\n\n// define the schema for ReadonlyMap with number keys and string values\nconst schema = fromEntries(S.number, S.string);\nconst decodeOrThrow = P.decodeOrThrow(schema);\n\ndecodeOrThrow([\n  [1, \"a\"],\n  [2, \"b\"],\n  [3, \"c\"],\n]); // new Map([[1, \"a\"], [2, \"b\"], [3, \"c\"]])\n```\n\n# Adding new data types\n\nThe easiest way to define a new data type is through the `filter` combinator.\n\n```ts\nimport * as S from \"@fp-ts/schema\";\n\nconst LongString = pipe(\n  S.string,\n  S.filter((s) => s.length >= 10, {\n    message: () => \"a string at least 10 characters long\",\n  })\n);\n\nconsole.log(S.decodeOrThrow(LongString)(\"a\"));\n/*\n1 error(s) found\n└─ Expected a string at least 10 characters long, actual \"a\"\n*/\n```\n\nIt is good practice to add as much metadata as possible so that it can be used later by introspecting the schema.\n\n```ts\nconst LongString = pipe(\n  S.string,\n  S.filter((s) => s.length >= 10, {\n    message: () => \"a string at least 10 characters long\",\n    identifier: \"LongString\",\n    jsonSchema: { minLength: 10 },\n    description:\n      \"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua\",\n  })\n);\n```\n\n# Technical overview\n\n## Understanding Schemas\n\nA schema is a description of a data structure that can be used to generate various artifacts from a single declaration.\n\nFrom a technical point of view a schema is just a typed wrapper of an `AST` value:\n\n```ts\ninterface Schema<in out A> {\n  readonly ast: AST;\n}\n```\n\nThe `AST` type represents a tiny portion of the TypeScript AST, roughly speaking the part describing ADTs (algebraic data types),\ni.e. products (like structs and tuples) and unions.\n\nThis means that you can define your own schema constructors / combinators as long as you are able to manipulate the `AST` value accordingly, let's see an example.\n\nSay we want to define a `pair` schema constructor, which takes a `Schema<A>` as input and returns a `Schema<readonly [A, A]>` as output.\n\nFirst of all we need to define the signature of `pair`\n\n```ts\nimport * as S from \"@fp-ts/schema\";\n\ndeclare const pair: <A>(schema: S.Schema<A>) => S.Schema<readonly [A, A]>;\n```\n\nThen we can implement the body using the APIs exported by the `@fp-ts/schema/AST` module:\n\n```ts\nimport * as S from \"@fp-ts/schema\";\nimport * as AST from \"@fp-ts/schema/AST\";\nimport * as O from \"@effect/data/Option\";\n\nconst pair = <A>(schema: S.Schema<A>): S.Schema<readonly [A, A]> => {\n  const element = AST.createElement(\n    schema.ast, // <= the element type\n    false // <= is optional?\n  );\n  const tuple = AST.createTuple(\n    [element, element], // <= elements definitions\n    O.none, // <= rest element\n    true // <= is readonly?\n  );\n  return S.make(tuple); // <= wrap the AST value in a Schema\n};\n```\n\nThis example demonstrates the use of the low-level APIs of the `AST` module, however, the same result can be achieved more easily and conveniently by using the high-level APIs provided by the `Schema` module.\n\n```ts\nconst pair = <A>(schema: S.Schema<A>): S.Schema<readonly [A, A]> =>\n  S.tuple(schema, schema);\n```\n\nPlease note that the `S.tuple` API is a convenient utility provided by the library, but it can also be easily defined and implemented in userland.\n\n```ts\nexport const tuple = <Elements extends ReadonlyArray<Schema<any>>>(\n  ...elements: Elements\n): Schema<{ readonly [K in keyof Elements]: Infer<Elements[K]> }> =>\n  makeSchema(\n    AST.createTuple(\n      elements.map((schema) => AST.createElement(schema.ast, false)),\n      O.none,\n      true\n    )\n  );\n```\n\n## Annotations\n\nOne of the fundamental requirements in the design of `@fp-ts/schema` is that it is extensible and customizable. Customizations are achieved through \"annotations\". Each node contained in the AST of `@fp-ts/schema/AST` contains an `annotations: Record<string | symbol, unknown>` field that can be used to attach additional information to the schema.\n\nLet's see some examples:\n\n```ts\nimport { pipe } from \"@effect/data/Function\";\nimport * as S from \"@fp-ts/schema\";\n\nconst Password = pipe(\n  // initial schema, a string\n  S.string,\n  // add an error message for non-string values (annotation)\n  S.message(() => \"not a string\"),\n  // add a constraint to the schema, only non-empty strings are valid\n  S.nonEmpty,\n  // add an error message for empty strings (annotation)\n  S.message(() => \"required\"),\n  // add a constraint to the schema, only strings with a length less or equal than 10 are valid\n  S.maxLength(10),\n  // add an error message for strings that are too long (annotation)\n  S.message((s) => `${s} is too long`),\n  // add an identifier to the schema (annotation)\n  S.identifier(\"Password\"),\n  // add a title to the schema (annotation)\n  S.title(\"password\"),\n  // add a description to the schema (annotation)\n  S.description(\n    \"A password is a string of characters used to verify the identity of a user during the authentication process\"\n  ),\n  // add examples to the schema (annotation)\n  S.examples([\"1Ki77y\", \"jelly22fi$h\"]),\n  // add documentation to the schema (annotation)\n  S.documentation(`\n    jsDoc documentation...\n  `)\n);\n```\n\nThe example shows some built-in combinators to add meta information, but users can easily add their own meta information by defining a custom combinator.\n\nHere's an example of how to add a `deprecated` annotation:\n\n```ts\nimport * as S from \"@fp-ts/schema\";\nimport * as AST from \"@fp-ts/schema/AST\";\nimport { pipe } from \"@effect/data/Function\";\n\nconst DeprecatedId = \"some/unique/identifier/for/the/custom/annotation\";\n\nconst deprecated = <A>(self: S.Schema<A>): S.Schema<A> =>\n  S.make(AST.annotation(self.ast, DeprecatedId, true));\n\nconst schema = pipe(S.string, deprecated);\n\nconsole.log(schema);\n/*\n{\n  ast: {\n    _tag: 'StringKeyword',\n    annotations: {\n      '@fp-ts/schema/annotation/TitleId': 'string',\n      'some/unique/identifier/for/the/custom/annotation': true\n    }\n  }\n}\n*/\n```\n\nAnnotations can be read using the `getAnnotation` helper, here's an example:\n\n```ts\nimport * as O from \"@effect/data/Option\";\n\nconst isDeprecated = <A>(schema: S.Schema<A>): boolean =>\n  pipe(\n    AST.getAnnotation<boolean>(DeprecatedId)(schema.ast),\n    O.getOrElse(() => false)\n  );\n\nconsole.log(isDeprecated(S.string)); // false\nconsole.log(isDeprecated(schema)); // true\n```\n\n# Documentation\n\n- [API Reference](https://fp-ts.github.io/schema/)\n\n# License\n\nThe MIT License (MIT)\n","readmeFilename":"README.md"}